CAN 四: CAN相关HAL库驱动介绍

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

FilterIdLowFilterMaskIdHighFilterMaskIdLow
32位标识符列表模式FilterIdHighFilterIdLowFilterMaskIdHighFilterMaskIdLow
16位标识符屏蔽模式FilterMaskIdLowFilterIdLowFilterMaskIdHighFilterIdHigh
16位标识符列表模式FilterMaskIdLowFilterIdLowFilterMaskIdHighFilterIdHigh

(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	/* 过滤器号 */


 

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

代码织梦师小猪

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值