硬汉嵌入式论坛

 找回密码
 立即注册
查看: 4447|回复: 0
收起左侧

[HAL学习笔记] HAL库的CAN FD源文件stm32h7xx_hal_canfd.c学习笔记(2021-01-27 V1.0)

[复制链接]

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106771
QQ
发表于 2021-1-27 15:16:54 | 显示全部楼层 |阅读模式
  ==============================================================================
                        ##### 驱动如何使用 #####
  ==============================================================================


      (#) 使用函数HAL_FDCAN_Init初始化

      (#) 如果需要,配置接收滤波和其它可选特性
            (++) HAL_FDCAN_ConfigClockCalibration
            (++) HAL_FDCAN_ConfigFilter
            (++) HAL_FDCAN_ConfigGlobalFilter
            (++) HAL_FDCAN_ConfigExtendedIdMask
            (++) HAL_FDCAN_ConfigRxFifoOverwrite
            (++) HAL_FDCAN_ConfigFifoWatermark
            (++) HAL_FDCAN_ConfigRamWatchdog
            (++) HAL_FDCAN_ConfigTimestampCounter
            (++) HAL_FDCAN_EnableTimestampCounter
            (++) HAL_FDCAN_DisableTimestampCounter
            (++) HAL_FDCAN_ConfigTimeoutCounter
            (++) HAL_FDCAN_EnableTimeoutCounter
            (++) HAL_FDCAN_DisableTimeoutCounter
            (++) HAL_FDCAN_ConfigTxDelayCompensation
            (++) HAL_FDCAN_EnableTxDelayCompensation
            (++) HAL_FDCAN_DisableTxDelayCompensation
            (++) HAL_FDCAN_EnableISOMode
            (++) HAL_FDCAN_DisableISOMode
            (++) HAL_FDCAN_EnableEdgeFiltering
            (++) HAL_FDCAN_DisableEdgeFiltering
            (++) HAL_FDCAN_TT_ConfigOperation
            (++) HAL_FDCAN_TT_ConfigReferenceMessage
            (++) HAL_FDCAN_TT_ConfigTrigger

      (#) 使用函数HAL_FDCAN_Start启动传输,总线激活后就可以收发数据了。

      (#) 下面的三个函数只有FDCAN在FDCAN启动后才能调用。
            (++) HAL_FDCAN_AddMessageToTxFifoQ
            (++) HAL_FDCAN_EnableTxBufferRequest
            (++) HAL_FDCAN_AbortTxRequest

      (#)在Tx Fifo或Queue中提交Tx请求后,可以通过函数HAL_FDCAN_GetLatestTxFifoQRequestBuffer获取用于放置Tx请求的Tx缓冲区位置。然后使用函数HAL_FDCAN_AbortTxRequest可以终止请求。

      (#) 当消息存到消息RAM里面,可以使用函数HAL_FDCAN_GetRxMessage获取数据。

      (#) 使用函数HAL_FDCAN_Stop可以停止FDCAN,使其进入初始化模式,重新使能使用上面的函数配置寄存器。

      (#)所有其它的控制函数可以在FDCAN初始化后任意时刻访问,不管是启动还是停止。

      *** 查询模式 ***
      ==============================


    [..]
        (#)接收或者发送状态可以使用下面的函数检测
              (++) HAL_FDCAN_IsRxBufferMessageAvailable
              (++) HAL_FDCAN_IsTxBufferMessagePending
              (++) HAL_FDCAN_GetRxFifoFillLevel
              (++) HAL_FDCAN_GetTxFifoFreeLevel

      *** 中断模式操作 ***
      ================================

      [..]
        (#) 两个中断线: line 0 和 1.
            默认情况下所有的中断都分配到line 0 ,可以使用函数HAL_FDCAN_ConfigInterruptLines配置到其它中断线。

        (#)通过函数HAL_FDCAN_ActivateNotification可以激活通知,然后处理控制可以通过回调HAL_FDCAN_xxxCallback设置

  *** 回调注册 ***
  =============================================

  使能宏定义USE_HAL_FDCAN_REGISTER_CALLBACKS
  用户就可以调用HAL_FDCAN_RegisterCallback() 或者 HAL_FDCAN_RegisterXXXCallback()动态的注册或者取消回调

  HAL_FDCAN_RegisterCallback() :
    (+) TxFifoEmptyCallback          : Tx Fifo Empty Callback.
    (+) RxBufferNewMessageCallback   : Rx Buffer New Message Callback.
    (+) HighPriorityMessageCallback  : High Priority Message Callback.
    (+) TimestampWraparoundCallback  : Timestamp Wraparound Callback.
    (+) TimeoutOccurredCallback      : Timeout Occurred Callback.
    (+) ErrorCallback                : Error Callback.
    (+) MspInitCallback              : FDCAN MspInit.
    (+) MspDeInitCallback            : FDCAN MspDeInit.

  对于专门的回调函数 ClockCalibrationCallback, TxEventFifoCallback, RxFifo0Callback, RxFifo1Callback,
  TxBufferCompleteCallback, TxBufferAbortCallback, ErrorStatusCallback, TT_ScheduleSyncCallback, TT_TimeMarkCallback,
  TT_StopWatchCallback and TT_GlobalTimeCallback, 需要专门的注册回调函数 :
  respectively @ref HAL_FDCAN_RegisterClockCalibrationCallback(), @ref HAL_FDCAN_RegisterTxEventFifoCallback(),
  @ref HAL_FDCAN_RegisterRxFifo0Callback(), @ref HAL_FDCAN_RegisterRxFifo1Callback(),
  @ref HAL_FDCAN_RegisterTxBufferCompleCallback(), @ref HAL_FDCAN_RegisterTxBufferAbortCallback(),
  @ref HAL_FDCAN_RegisterErrorStatusCallback(), @ref HAL_FDCAN_TT_RegisterScheduleSyncCallback(),
  @ref HAL_FDCAN_TT_RegisterTimeMarkCallback(), @ref HAL_FDCAN_TT_RegisterStopWatchCallback() and
  @ref HAL_FDCAN_TT_RegisterGlobalTimeCallback().

  HAL_FDCAN_UnRegisterCallback() 复位初始化函数:
    (+) TxFifoEmptyCallback          : Tx Fifo Empty Callback.
    (+) RxBufferNewMessageCallback   : Rx Buffer New Message Callback.
    (+) HighPriorityMessageCallback  : High Priority Message Callback.
    (+) TimestampWraparoundCallback  : Timestamp Wraparound Callback.
    (+) TimeoutOccurredCallback      : Timeout Occurred Callback.
    (+) ErrorCallback                : Error Callback.
    (+) MspInitCallback              : FDCAN MspInit.
    (+) MspDeInitCallback            : FDCAN MspDeInit.

  对于专门的回调 ClockCalibrationCallback, TxEventFifoCallback, RxFifo0Callback,
  RxFifo1Callback, TxBufferCompleteCallback, TxBufferAbortCallback, TT_ScheduleSyncCallback,
  TT_TimeMarkCallback, TT_StopWatchCallback and TT_GlobalTimeCallback, 需要专门的复位初始化函数 :
  @ref HAL_FDCAN_UnRegisterClockCalibrationCallback(),
  @ref HAL_FDCAN_UnRegisterTxEventFifoCallback(), @ref HAL_FDCAN_UnRegisterRxFifo0Callback(),
  @ref HAL_FDCAN_UnRegisterRxFifo1Callback(), @ref HAL_FDCAN_UnRegisterTxBufferCompleCallback(),
  @ref HAL_FDCAN_UnRegisterTxBufferAbortCallback(), @ref HAL_FDCAN_UnRegisterErrorStatusCallback(),
  @ref HAL_FDCAN_TT_UnRegisterScheduleSyncCallback(), @ref HAL_FDCAN_TT_UnRegisterTimeMarkCallback(),
  @ref HAL_FDCAN_TT_UnRegisterStopWatchCallback() and @ref HAL_FDCAN_TT_UnRegisterGlobalTimeCallback().

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|小黑屋|Archiver|手机版|硬汉嵌入式论坛

GMT+8, 2024-5-5 17:35 , Processed in 0.253633 second(s), 25 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

快速回复 返回顶部 返回列表