CAN 四: CAN相关HAL库驱动介绍
2023-12-16 12:34:25
1、CAN相关HAL库函数总览
驱动函数 | 关联寄存器 | 功能描述 |
---|---|---|
__HAL_RCC_CANx_CLK_ENABLE(...) | 使能CAN时钟 | |
HAL_CAN_Init(...) | MCR / MTR | 初始化CAN |
HAL_CAN_ConfigFilter(…) | 过滤器寄存器 | 配置CAN接收过滤器 |
HAL_CAN_Start(…) | MCR / MSR | 启动CAN设备 |
HAL_CAN_ActivateNotification(…) | IER | 使能中断 |
__HAL_CAN_ENABLE_IT(…) | IER | 使能CAN中断允许 |
HAL_CAN_AddTxMessage(…) | TSR/TIxR/TDTxR/TDLxR/TDHxR | 发送消息 |
HAL_CAN_GetTxMailboxesFreeLevel(…) | TSR | 等待发送完成 |
HAL_CAN_GetRxFifoFillLevel(…) | RF0R/RF1R | 等待接收完成 |
HAL_CAN_GetRxMessage(…) | RF0R/RF1R/RDLxR/RDHxR | 接收消息 |
2、重要结构体介绍
(1)CAN外设相关重要结构体:CAN_InitTypeDef、CAN_FilterTypeDef和CAN_(T/R)xHeaderTypeDef。
(2)CAN_InitTypeDef:CAN初始化结构体
uint32_t Prescaler /* 预分频 */
uint32_t Mode /* 工作模式 */
uint32_t SyncJumpWidth /* 再次同步跳跃宽度 */
uint32_t TimeSeg1 /* 时间段1(BS1)长度 */
uint32_t TimeSeg2 /* 时间段2(BS2)长度 */
uint32_t TimeTriggeredMode /* 时间触发通信模式 */
uint32_t AutoBusOff /* 总线自动关闭 */
uint32_t AutoWakeUp /* 自动唤醒 */
uint32_t AutoRetransmission /* 自动重传 */
uint32_t ReceiveFifoLocked /* 接收FIFO锁定 */
uint32_t TransmitFifoPriority /* 传输FIFO优先级 */
(3)CAN_FilterTypeDef:过滤器结构体
uint32_t FilterIdHigh /* ID高字节 */
uint32_t FilterIdLow /* ID低字节 */
uint32_t FilterMaskIdHigh /* 掩码高字节 */
uint32_t FilterMaskIdLow /* 掩码低字节 */
uint32_t FilterFIFOAssignment /* 过滤器关联FIFO */
uint32_t FilterBank /* 选择过滤器组 */
uint32_t FilterMode /* 过滤器模式*/
uint32_t FilterScale /* 过滤器位宽 */
uint32_t FilterActivation /* 过滤器使能 */
Uint32_t SlaveStartFilterBank /* 从CAN选择启动过滤器组 单CAN没有意义*/
结构体成员与寄存器映射情况:
- 需要结合映射去赋值。
- 32位位宽:STID[10:3] STID[2:0] EXID[17:13]???????? EXID[12:5] EXID[4:0] IDE RTR 0
- 16位位宽:STID[10:3] STID[2:0] RTR IDE EXID[17:15]
- Mask:掩码,寄存器的每一位用于指定相关标识符寄存器的位是否必须与预期标识符的相应位匹配。
过滤器配置模式 | CAN_FxR1[31:16] | CAN_FxR1[15:0] | CAN_FxR2[31:16] | CAN_FxR2[15:0] |
---|---|---|---|---|
32位标识符屏蔽模式 | FilterIdHigh | FilterIdLow | FilterMaskIdHigh | FilterMaskIdLow |
32位标识符列表模式 | FilterIdHigh | FilterIdLow | FilterMaskIdHigh | FilterMaskIdLow |
16位标识符屏蔽模式 | FilterMaskIdLow | FilterIdLow | FilterMaskIdHigh | FilterIdHigh |
16位标识符列表模式 | FilterMaskIdLow | FilterIdLow | FilterMaskIdHigh | FilterIdHigh |
(4)CAN_TxHeaderTypeDef:CAN发送结构体
uint32_t StdId /* 标准标识符 */
uint32_t ExtId /* 扩展标识符 */
uint32_t IDE /* 帧格式(标准帧或扩展帧) */
uint32_t RTR /* 帧类型(数据帧或远程帧) */
uint32_t DLC /* 数据长度 */
uint32_t TransmitGlobalTime /* 发送时间标记(时间戳) */
(5)CAN_RxHeaderTypeDef:CAN接收结构体
uint32_t StdId
uint32_t ExtId
uint32_t IDE
uint32_t RTR
uint32_t DLC
Uint32_t Timestamp /* 时间戳 */
uint32_t FilterMatchIndex /* 过滤器号 */
?
文章来源:https://blog.csdn.net/weixin_42727214/article/details/134984723
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!