HAL库实现CAN 的回环模式
网上百度了很多关于can的回环模式。
主要参考了这个:https://www.cnblogs.com/feiniaoliangtiangao/p/11691102.html
并且在可变数据发送中进行了修改。
使用硬件设备
- STM32F103RCT6板子
- ST-Link Debugger
首先是CubeMX的配置
- 配置内部时钟配置为72MHz ,所以我们得到的APB1 peripheral的时钟为36MHz
2.这里主要是配置为回环模式,然后对can的时钟进行配置:
计算方式:36M/8/(6+2+1)=500kHz
3.使能can的RX0的接收中断
生成代码添加修改
- 初始化TxHeader句柄
/*******************************************************************************
- Function Name : vApp_CAN_TxHeader_Init
- Description : 初始化发送帧头句柄
- Input : pHeader 发送帧头指针
StdId 标识符
ExtId 扩展标识符
IDE 0:标准帧 1:拓展帧
RTR 0:数据帧 1:远程帧
DLC 数据长度
- Output : None
- Return : None
****************************************************************************** */
void DE_CAN_TxHeader_Init(void)
{
hCAN1_TxHeader.StdId = 0x12; //11位 标准标识符
hCAN1_TxHeader.ExtId = 0; //29位 扩展标识符
hCAN1_TxHeader.IDE = CAN_ID_STD; //1位 0:标准帧 1:拓展帧
hCAN1_TxHeader.RTR = CAN_RTR_DATA; //1位 0:数据帧 1:远程帧
hCAN1_TxHeader.DLC = 8; //4位 发送的数据的长度
hCAN1_TxHeader.TransmitGlobalTime = ENABLE;
}
- 初始化滤波器句柄
/*******************************************************************************
* Function Name : vApp_CAN_Filter_Init
* Description : 初始化滤波器
* Input : pFilter 滤波器句柄,初始化全部值
IdHigh,
IdLow,
MaskIdHigh,
MaskIdLow,
FIFOAssignment,
Bank,
Mode,
Scale,
Activation,
SlaveStartFilterBank
* Output : None
* Return : None
****************************************************************************** */
void DE_CAN_Filter_Init(void)
{
hCAN1_Filter.FilterIdHigh = 0;//高8位 不过滤任何id
hCAN1_Filter.FilterIdLow = 0;//低8位
hCAN1_Filter.FilterMaskIdHigh = 0;//高8位
hCAN1_Filter.FilterMaskIdLow = 0;//低8位
hCAN1_Filter.FilterFIFOAssignment =