打印
[KungFu32位 MCU]

KF32A156系列的CAN FD模块的使用介绍

[复制链接]
10914|46
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
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,代码如下:


        
        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[0].TransceiveType = MAIL_TRANSMIT;  //配置为发送
                Canfd_Sdu.Can_MailboxHeader[0].BRS = CANFD_BRS_DISABLE;  //加速波特率切换
                Canfd_Sdu.Can_MailboxHeader[0].Can_frame = CAN_FRAME_CLASSICAL ;  //can or canfd
                Canfd_Sdu.Can_MailboxHeader[0].Id = 0x100;  //can id
       
                //更新邮箱,往Mailbox_0(也就是第一个邮箱)写入刚刚配置的参数
                Can_m_FdMailBox_Write(CANfd6, Mailbox_0,&Canfd_Sdu.Can_MailboxHeader[0]);
               
                //当配置完成后,即可执行发送函数,此函数是进行手动邮箱仲裁
                Can_m_FdTransmit(CANfd6);


使用特权

评论回复
沙发
jf101|  楼主 | 2023-2-20 09:53 | 只看该作者
3、接收配置

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

//中断服务函数里面,判断到接收中断后,去查询接收邮箱
        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:20 | 只看该作者
本帖最后由 259872544 于 2023-2-22 16:23 编辑

跟CSDN 有篇差不多啊

使用特权

评论回复
地板
tpgf| | 2023-3-6 10:57 | 只看该作者
Can与CanFD主要区别:传输速率不同、数据长度不同、帧格式不同、ID长度不同。

使用特权

评论回复
5
八层楼| | 2023-3-6 11:23 | 只看该作者
CANFD:可以理解成CAN协议的升级版,只升级了协议,物理层未改变

使用特权

评论回复
6
观海| | 2023-3-6 11:47 | 只看该作者
CanFD:速率可变,仲裁比特率最高1Mbps(与CAN相同),数据比特率最高8Mbps

使用特权

评论回复
7
guanjiaer| | 2023-3-6 12:06 | 只看该作者
CanFD新增了FDF、BRS、ESI位。
FDF:表示CAN报文还是CAN-FD报文。
BRS:表示位速率转换,该位隐性时,速率可变(即BSR到CRC使用转换速率传输),该位为显性时,以正常的CAN-FD总线速率传输(恒定速率);
ESI:表示发送节点状态。

使用特权

评论回复
8
heimaojingzhang| | 2023-3-6 12:19 | 只看该作者
CAN标准帧ID长度最长11bit
CANFD标准帧ID长度可扩展到12bit。

使用特权

评论回复
9
keaibukelian| | 2023-3-6 12:54 | 只看该作者
总的感觉就是CANFD是can的升级 那么在使用的时候配置会不同吗

使用特权

评论回复
10
szt1993| | 2023-5-21 20:28 | 只看该作者
CAN标准帧ID长度最长11bit,CANFD标准帧ID长度可扩展到12bit,一般都有标准函数库,直接调用就可以

使用特权

评论回复
11
cemaj| | 2023-6-7 13:44 | 只看该作者
canfd和CAN总线是一个东西吗?

使用特权

评论回复
12
hearstnorman323| | 2023-6-10 10:23 | 只看该作者
在设计CAN FD应用时需要考虑硬件和软件的处理能力。如果处理能力不足,则可能会导致数据传输延迟或丢失,影响系统性能。

使用特权

评论回复
13
wangdezhi| | 2023-6-10 11:02 | 只看该作者
can fd总线是基于哪些因素而出现的  

使用特权

评论回复
14
beacherblack| | 2023-6-10 11:10 | 只看该作者
CAN FD协议的数据传输速率更高  

使用特权

评论回复
15
juliestephen| | 2023-6-10 11:16 | 只看该作者
can -fd相对于CANBUS在哪里有了提升呢?

使用特权

评论回复
16
elsaflower| | 2023-6-10 11:51 | 只看该作者
CAN FD是一种基于经典CAN总线的新型通信协议,它具有更高的数据传输速率和更大的数据负载能力。

使用特权

评论回复
17
ingramward| | 2023-6-10 12:25 | 只看该作者
可以选择在CAN FD模式或经典CAN模式下进行通信?

使用特权

评论回复
18
hearstnorman323| | 2023-6-10 12:31 | 只看该作者
在使用CAN FD模块进行通信时,需要保证CAN FD模块与其他设备之间的物理连接正确并稳定。

使用特权

评论回复
19
rosemoore| | 2023-6-10 12:38 | 只看该作者
CAN总线和CAN FD的can总线分析工具通用吗?

使用特权

评论回复
20
1988020566| | 2023-6-10 12:48 | 只看该作者
能够实现CAN与CAN FD之间的转换吗?

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

231

主题

1538

帖子

2

粉丝