近日在调试FDCAN protocal, 发送数据总是不成功,报TxFIFO溢出的错误,后查阅资料检查代码,发现是TxFIFO的配置问题,以下是解决问题的参考文档,转载过来记录以便以后查看。
一.TxFIFO设为1所带来的问题
在STM32F103,STM32F407上面的CAN控制器,到了STM32H743上升级成FDCAN控制器。浏览了正点原子,安富莱,野火的STM32H7教程,都没有介绍FDCAN如何使用。关于FDCAN相关的教程,广州硬石电子科技做得比较好。但是,硬石科技的FDCAN例程在实际项目上直接使用的话,会有一些问题等着你发现。
硬石科技将FDCAN控制器的TxFIFO设置为1,相当于取消FIFO的功能。
以下图片摘自硬石科技的H743教程:
1.1 示例代码
LED5_Handler()会被FreeRTOS系统每隔1S调用一次。实际上,代码的目的是发送5条CAN报文,CAN_ID分别是0x181,0x182,0x183,0x184,0x185。
通过CAN分析仪看到的结果是: "每隔1S时间,STM32H743只是发送了CAN_ID为0x181的CAN报文,并不是5条CAN报文。"
导致这个结果的原因是TxFIFO被设为1。
解决办法:
根据HAL库的源码可以看到,Tx Fifo Queue Elmts Nbr的范围是: 0 ~ 32.
代码不用修改,直接观察CAN分析仪的情况。
从上图可以看到,CAN分析仪每隔1S时间,收到CAN_ID为0x181,0x182,0x183,0x184,0x185的5条CAN报文。
问题解决了,代码的目的达到了。
原文地址:学习FDCAN控制器上的TxFIFO - STM32/STM8单片机论坛 - ST MCU意法半导体官方技术支持论坛 - 21ic电子技术开发论坛