[应用相关] 学习FDCAN控制器上的TxFIFO

[复制链接]
 楼主| 晓伍 发表于 2021-9-4 15:41 | 显示全部楼层 |阅读模式
一.TxFIFO设为1所带来的问题
在STM32F103,STM32F407上面的CAN控制器,到了STM32H743上升级成FDCAN控制器。浏览了正点原子,安富莱,野火的STM32H7教程,都没有介绍FDCAN如何使用。关于FDCAN相关的教程,广州硬石电子科技做得比较好。但是,硬石科技的FDCAN例程在实际项目上直接使用的话,会有一些问题等着你发现。

硬石科技将FDCAN控制器的TxFIFO设置为1,相当于取消FIFO的功能。

以下图片摘自硬石科技的H743教程:
347636133233b5550d.png

 楼主| 晓伍 发表于 2021-9-4 15:42 | 显示全部楼层

1.1 代码

watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dhbGxhY2U4OQ==,size_16,color_FFFFFF,t_70.jpg
LED5_Handler()会被FreeRTOS系统每隔1S调用一次。实际上,代码的目的是发送5条CAN报文,CAN_ID分别是0x181,0x182,0x183,0x184,0x185。
1.2 CAN分析仪

通过CAN分析仪看到的结果是: "每隔1S时间,STM32H743只是发送了CAN_ID为0x181的CAN报文,并不是5条CAN报文。"
watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dhbGxhY2U4OQ==,size_16,color_FFFFFF,t_70#pic_center.jpg
导致这个结果的原因是TxFIFO被设为1。


 楼主| 晓伍 发表于 2021-9-4 15:43 | 显示全部楼层
二. 解决问题的方法2.1 STM32CubeMX

watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dhbGxhY2U4OQ==,size_16,color_FFFFFF,t_70.jpg
根据HAL库的源码可以看到,Tx Fifo Queue Elmts Nbr的范围是: 0 ~ 32.
watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dhbGxhY2U4OQ==,size_16,color_FFFFFF,t_70.jpg


 楼主| 晓伍 发表于 2021-9-4 15:44 | 显示全部楼层
2.2 CAN分析仪

代码不用修改,直接观察CAN分析仪的情况。
watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dhbGxhY2U4OQ==,size_16,color_FFFFFF,t_70#pic_center.jpg
从上图可以看到,CAN分析仪每隔1S时间,收到CAN_ID为0x181,0x182,0x183,0x184,0x185的5条CAN报文。
问题解决了,代码的目的达到了。


麻花油条 发表于 2021-9-4 19:35 来自手机 | 显示全部楼层
学习,谢谢
您需要登录后才可以回帖 登录 | 注册

本版积分规则

91

主题

4332

帖子

1

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

91

主题

4332

帖子

1

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