KF32A156系列的CAN FD模块的使用介绍
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,代码如下:
Canfd_Gpio_Init(); //配置位对应的pin脚
Can_m_FdControllerDeInit(CANfd6); //复位外设和初始化canfd6的时钟
//配置canfd6外设
Can_m_FdControllerInit(CANfd6, Canfd_Controller_AllConfig,Initindex_0);
这里面的外设配置离不开三步走:配置所需引脚重映射为某功能 — 开启外设时钟 — 配置外设底层驱动
Canfd_Controller_AllConfig 这个参数是个结构体,点进去可以看到结构体里面的参数,好在是基本上都会有宏定义放好了,配置比较方便。
2、发送配置
//这里仅仅只是对can帧的结构体进行某些参数的配置
Canfd_Sdu.Can_MailboxHeader.TransceiveType = MAIL_TRANSMIT;//配置为发送
Canfd_Sdu.Can_MailboxHeader.BRS = CANFD_BRS_DISABLE;//加速波特率切换
Canfd_Sdu.Can_MailboxHeader.Can_frame = CAN_FRAME_CLASSICAL ;//can or canfd
Canfd_Sdu.Can_MailboxHeader.Id = 0x100;//can id
//更新邮箱,往Mailbox_0(也就是第一个邮箱)写入刚刚配置的参数
Can_m_FdMailBox_Write(CANfd6, Mailbox_0,&Canfd_Sdu.Can_MailboxHeader);
//当配置完成后,即可执行发送函数,此函数是进行手动邮箱仲裁
Can_m_FdTransmit(CANfd6);
3、接收配置
初始化的配置是在初始化canfd外设完成后进行的配置
//初始化的配置
Canfd_Sdu.Can_MailboxHeader.TransceiveType = MAIL_RECEIVE;
for(uint8_t i = 1 ; i<=20 ; i++)
{
//调用更新邮箱的函数,配置为接受邮箱
Can_m_FdMailBox_Write(CANfd6, i,&Canfd_Sdu.Can_MailboxHeader);
}
//中断服务函数里面,判断到接收中断后,去查询接收邮箱
if (Can_Controller_InterruptFlag.RxIntFlag == 0x01)
{
for(uint8_t i = 1 ; i<=20 ; i++)
{
if(Can_m_FdGetMailBoxState(CANfd6,i) == MAIL_RECEIVE_SUCCESS)
{
/* Read recevie mailbox information and reinitialize mailbox code */
if(Can_m_FdMailBox_Read(CANfd6, i, &Canfd_MailboxHeader_R,MAIL_RECEIVE) == CAN_OK)
{
//USER CODE
}
}
}
}
4、中断配置
相关分发送、接收都放在中断中进行就可以,中断配置也比较简单就不再赘述了!
本帖最后由 259872544 于 2023-2-22 16:23 编辑
跟CSDN 有篇差不多啊 Can与CanFD主要区别:传输速率不同、数据长度不同、帧格式不同、ID长度不同。 CANFD:可以理解成CAN协议的升级版,只升级了协议,物理层未改变 CanFD:速率可变,仲裁比特率最高1Mbps(与CAN相同),数据比特率最高8Mbps CanFD新增了FDF、BRS、ESI位。
FDF:表示CAN报文还是CAN-FD报文。
BRS:表示位速率转换,该位隐性时,速率可变(即BSR到CRC使用转换速率传输),该位为显性时,以正常的CAN-FD总线速率传输(恒定速率);
ESI:表示发送节点状态。 CAN标准帧ID长度最长11bit
CANFD标准帧ID长度可扩展到12bit。 总的感觉就是CANFD是can的升级 那么在使用的时候配置会不同吗 CAN标准帧ID长度最长11bit,CANFD标准帧ID长度可扩展到12bit,一般都有标准函数库,直接调用就可以 canfd和CAN总线是一个东西吗? 在设计CAN FD应用时需要考虑硬件和软件的处理能力。如果处理能力不足,则可能会导致数据传输延迟或丢失,影响系统性能。 can fd总线是基于哪些因素而出现的 CAN FD协议的数据传输速率更高 can -fd相对于CANBUS在哪里有了提升呢? CAN FD是一种基于经典CAN总线的新型通信协议,它具有更高的数据传输速率和更大的数据负载能力。 可以选择在CAN FD模式或经典CAN模式下进行通信? 在使用CAN FD模块进行通信时,需要保证CAN FD模块与其他设备之间的物理连接正确并稳定。 CAN总线和CAN FD的can总线分析工具通用吗? 能够实现CAN与CAN FD之间的转换吗?