can的回环模式的可变数据长度

本文介绍了如何使用STM32 HAL库在CAN回环模式下实现变长数据传输。通过CubeMX配置内部时钟为72MHz,将CAN设置为回环模式并计算合适时钟参数。文中详细阐述了硬件设备、配置过程、代码修改,特别是针对数据组合部分,设计了数据结束标识符来判断接收完成。实验结果显示,数据能够成功发送并按预期接收。
摘要由CSDN通过智能技术生成

HAL库实现CAN 的回环模式

网上百度了很多关于can的回环模式。
主要参考了这个:https://www.cnblogs.com/feiniaoliangtiangao/p/11691102.html
并且在可变数据发送中进行了修改。

使用硬件设备

  • STM32F103RCT6板子
  • ST-Link Debugger

首先是CubeMX的配置

  1. 配置内部时钟配置为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         =
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值