1.当USE_HAL_CAN_REGISTER_CALLBACKS宏定义为1,并且CAN外设的状态为HAL_CAN_STATE_RESET时,会先将回调函数恢复为默认的legacy函数,然后判断用户是否定义了MspInitCallback回调函数,如果没有定义,则将默认的HAL_CAN_MspInit函数赋值给hcan->MspInitCallback,最后调用hcan->MspInitCallback(hcan)来初始化CAN外设的底层...
在HAL库中,CAN_FxR1与CAN_FxR2寄存器分别被拆成两段,CAN_FxR1寄存器的高16位对应着上面代码中的FilterIdHigh,低16位对应着FilterIdLow,而CAN_FxR2寄存器的高16位对应着FilterMaskIdHigh,低16位对应着FilterMaskIdLow。 CAN_FilterConfTypeDef的的4个成员FilterIdHigh,FilterIdLow,FilterMaskIdHigh,FilterMaskIdLow...
1.1.2 CAN参数设置 HAL库的CAN初始化有几个重要参数,都存放在几个结构体里面(如:CAN_HandleTypeDef,CAN_InitTypeDef),具体的结构体定义可以在HAL库查看。 说明:CAN参数需要根据自己实际的需求来配。 我这里着重讲解一下CAN波特率的配置。 CAN波特率 = CAN时钟频率 / 分频系数 / (TimeSeg1 + TimeSeg2 + 1)。
CAN_RxHeaderTypeDef rxMsg;//发送接收结构体CAN_TxHeaderTypeDef txMsg;//发送配置结构体uint8_trx_data[8];//接收数据uint32_tMotor_Can_ID;//接收数据电机IDuint8_tbyte[4];//转换临时数据uint32_tsend_mail_box = {0};//NON...
5、HAL库相关函数 (1)CAN外设基本控制函数 HAL_CAN_Init(CAN_HandleTypeDef *hcan) //CAN外设初始化 HAL_CAN_DeInit(CAN_HandleTypeDef *hcan) //CAN外设的寄存器恢复为默认值 HAL_CAN_MspInit(CAN_HandleTypeDef *hcan) //CAN的MSP初始化 CAN相关函数 ...
HAL库没有自动生成CAN过滤,需要进行手动设置,初始化代码如下: void filter_init(void) { HAL_StatusTypeDef HAL_Status; CAN_FilterTypeDef Filter0; Filter0.FilterBank = 1;//滤波器编号 Filter0.FilterMode = CAN_FILTERMODE_IDMASK; Filter0.FilterScale = CAN_FILTERSCALE_32BIT; ...
在STM32的HAL库下,可以用如下的代码初始化CAN通信。 /** * @brief CAN筛选器 */ HAL_StatusTypeDef Can_Filter_Init(void) { /*** CAN1 ***/ CAN_FilterTypeDef sFilterConfig; sFilterConfig.FilterActivation = ENABLE; // 激活过滤器 sFilterConfig.FilterBank = 0; // 配置主CAN筛选器组编号 ...
sFilterConfig.SlaveStartFilterBank = 0; //为从属can选择开始的过滤库,对于单个CAN实例,这个参数没有意义 if (HAL_CAN_ConfigFilter(h_can, &sFilterConfig) != HAL_OK) { Error_Handler(); return HAL_ERROR; } //regist RX_IT if (HAL_CAN_ActivateNotification(h_can, CAN_IT_RX_FIFO0_MSG_PEND...
前置任务:HAL库CAN通信流程 这里我们对寄存器及相关外设不做过多讨论,仅讨论函数调用和程序运行流程 一、CAN初始化 在GPIO的使用中,我们会定义一个GPIO初始化结构体,并在结构体的成员中储存GPIO的设置参数,CAN通信也是如此 不同的是,这里...
简介:STM32的HAL库开发系列 - CAN通信实例 CAN通信是一种高效、可靠、灵活的数据传输方式,适用于各种应用场景,在工业自动化、汽车电子、医疗设备等领域有着广泛的应用。 但理解CAN通信的实际应用,也不能全部只看软件方面,还需要对硬件上也有了解。 在硬件上,CAN通信使用两条线路:一条是数据线(CAN_H),另一条是...