[KungFu32位 MCU] KF32A156系列的CAN FD模块的使用介绍

[复制链接]
 楼主| jf101 发表于 2023-2-20 09:50 | 显示全部楼层 |阅读模式
can的使用是毕竟是车规级的芯片最重要的外设之一,首先介绍一下CAN FD模块的相关介绍 :
ANFD 模块是 CAN 的升级版本,它同时支持 CANFD(CAN with Flexible Data rate)协议和 CAN 2.0B 协议,两种协议下均可收发标准帧和扩展帧。在收发 CAN FD 帧时,帧数据长度最大可以达到 64 字节,发送速率可以达到 8Mb/s。


使用CANFD模块的建议:
1、务必使用外部晶振做为工作时钟的来源;
2、尽可能使用1个发送,其余的可以根据需要配置为多个接收;

(一)了解一下芯旺微canfd的结构


canfd外设本身配置就是配置寄存器,邮箱是芯片硬件在RAM里面开辟的单独空间,发送can帧的数据都是往ram的邮箱里面去丢,接收can帧也是去ram里面进行存取。下面是操作代码的部分。

1、寄存器部分
基本配置其实库函数已经进行了配置,具体的可以直接点进去查看库函数里面的内容,这里想说的是注意有个RSMOD,这个是复位canfd外设的位。当busoff的时候,该位是会置1,常常将其清0做为恢复busoff,代码如下:


  1.         
  2.         Canfd_Gpio_Init();    //配置位对应的pin脚
  3.         Can_m_FdControllerDeInit(CANfd6);    //复位外设和初始化canfd6的时钟
  4.         //配置canfd6外设
  5.         Can_m_FdControllerInit(CANfd6, Canfd_Controller_AllConfig,Initindex_0);


这里面的外设配置离不开三步走:配置所需引脚重映射为某功能 — 开启外设时钟 — 配置外设底层驱动
Canfd_Controller_AllConfig 这个参数是个结构体,点进去可以看到结构体里面的参数,好在是基本上都会有宏定义放好了,配置比较方便。

2、发送配置
  1.   //这里仅仅只是对can帧的结构体进行某些参数的配置
  2.                 Canfd_Sdu.Can_MailboxHeader[0].TransceiveType = MAIL_TRANSMIT;  //配置为发送
  3.                 Canfd_Sdu.Can_MailboxHeader[0].BRS = CANFD_BRS_DISABLE;  //加速波特率切换
  4.                 Canfd_Sdu.Can_MailboxHeader[0].Can_frame = CAN_FRAME_CLASSICAL ;  //can or canfd
  5.                 Canfd_Sdu.Can_MailboxHeader[0].Id = 0x100;  //can id
  6.        
  7.                 //更新邮箱,往Mailbox_0(也就是第一个邮箱)写入刚刚配置的参数
  8.                 Can_m_FdMailBox_Write(CANfd6, Mailbox_0,&Canfd_Sdu.Can_MailboxHeader[0]);
  9.                
  10.                 //当配置完成后,即可执行发送函数,此函数是进行手动邮箱仲裁
  11.                 Can_m_FdTransmit(CANfd6);


 楼主| jf101 发表于 2023-2-20 09:53 | 显示全部楼层
3、接收配置

初始化的配置是在初始化canfd外设完成后进行的配置
  1. //初始化的配置
  2. Canfd_Sdu.Can_MailboxHeader[0].TransceiveType = MAIL_RECEIVE;
  3. for(uint8_t i = 1 ; i<=20 ; i++)
  4.         {
  5.                 //调用更新邮箱的函数,配置为接受邮箱
  6.                 Can_m_FdMailBox_Write(CANfd6, i,&Canfd_Sdu.Can_MailboxHeader[0]);
  7.         }

  8. //中断服务函数里面,判断到接收中断后,去查询接收邮箱
  9.         if (Can_Controller_InterruptFlag.RxIntFlag == 0x01)
  10.         {

  11.                 for(uint8_t i = 1 ; i<=20 ; i++)
  12.                         {
  13.                         if(Can_m_FdGetMailBoxState(CANfd6,i) == MAIL_RECEIVE_SUCCESS)
  14.                         {
  15.                                 /* Read recevie mailbox information and reinitialize mailbox code */
  16.                                 if(Can_m_FdMailBox_Read(CANfd6, i, &Canfd_MailboxHeader_R,MAIL_RECEIVE) == CAN_OK)
  17.                                 {
  18.                                         //USER CODE
  19.                                 }
  20.                         }

  21.                         }
  22.         }

4、中断配置
相关分发送、接收都放在中断中进行就可以,中断配置也比较简单就不再赘述了!

259872544 发表于 2023-2-22 16:20 | 显示全部楼层
本帖最后由 259872544 于 2023-2-22 16:23 编辑

跟CSDN 有篇差不多啊
tpgf 发表于 2023-3-6 10:57 | 显示全部楼层
Can与CanFD主要区别:传输速率不同、数据长度不同、帧格式不同、ID长度不同。
八层楼 发表于 2023-3-6 11:23 | 显示全部楼层
CANFD:可以理解成CAN协议的升级版,只升级了协议,物理层未改变
观海 发表于 2023-3-6 11:47 | 显示全部楼层
CanFD:速率可变,仲裁比特率最高1Mbps(与CAN相同),数据比特率最高8Mbps
guanjiaer 发表于 2023-3-6 12:06 | 显示全部楼层
CanFD新增了FDF、BRS、ESI位。
FDF:表示CAN报文还是CAN-FD报文。
BRS:表示位速率转换,该位隐性时,速率可变(即BSR到CRC使用转换速率传输),该位为显性时,以正常的CAN-FD总线速率传输(恒定速率);
ESI:表示发送节点状态。
heimaojingzhang 发表于 2023-3-6 12:19 | 显示全部楼层
CAN标准帧ID长度最长11bit
CANFD标准帧ID长度可扩展到12bit。
keaibukelian 发表于 2023-3-6 12:54 | 显示全部楼层
总的感觉就是CANFD是can的升级 那么在使用的时候配置会不同吗
szt1993 发表于 2023-5-21 20:28 | 显示全部楼层
CAN标准帧ID长度最长11bit,CANFD标准帧ID长度可扩展到12bit,一般都有标准函数库,直接调用就可以
cemaj 发表于 2023-6-7 13:44 | 显示全部楼层
canfd和CAN总线是一个东西吗?
hearstnorman323 发表于 2023-6-10 10:23 | 显示全部楼层
在设计CAN FD应用时需要考虑硬件和软件的处理能力。如果处理能力不足,则可能会导致数据传输延迟或丢失,影响系统性能。
wangdezhi 发表于 2023-6-10 11:02 | 显示全部楼层
can fd总线是基于哪些因素而出现的  
beacherblack 发表于 2023-6-10 11:10 | 显示全部楼层
CAN FD协议的数据传输速率更高  
juliestephen 发表于 2023-6-10 11:16 | 显示全部楼层
can -fd相对于CANBUS在哪里有了提升呢?
elsaflower 发表于 2023-6-10 11:51 | 显示全部楼层
CAN FD是一种基于经典CAN总线的新型通信协议,它具有更高的数据传输速率和更大的数据负载能力。
ingramward 发表于 2023-6-10 12:25 | 显示全部楼层
可以选择在CAN FD模式或经典CAN模式下进行通信?
hearstnorman323 发表于 2023-6-10 12:31 | 显示全部楼层
在使用CAN FD模块进行通信时,需要保证CAN FD模块与其他设备之间的物理连接正确并稳定。
rosemoore 发表于 2023-6-10 12:38 | 显示全部楼层
CAN总线和CAN FD的can总线分析工具通用吗?
1988020566 发表于 2023-6-10 12:48 | 显示全部楼层
能够实现CAN与CAN FD之间的转换吗?
您需要登录后才可以回帖 登录 | 注册

本版积分规则

255

主题

1848

帖子

3

粉丝
快速回复 在线客服 返回列表 返回顶部