一、结论
该bug已解决且在实际项目中得到应用,在4个月前已经提交到RTT master分支,并与2天前被合并入主分支。【v4.0.5 版后可见】。
后续,我将会把该bug提交到lts分支中。
注意:该bug仅针对STM32F4部分系列,准确说是42Mhz APB总线的型号,如F405, F407等。
二、bug表现
这已经是4个月前的事情,当时我参照了RTT官方和CSDN的一些示例。但无论如何总是CAN发送失败。
今天我同事使用RT-Thread studio生成CAN例程时(v4.0.4)再次遇到了该问题。为避免大家踩坑,所以有必要记录一下。
错误表现如下:
修改波特率配置后,例程运行正常:
三、 具体原因
其实这个问题是由RTT中的CAN驱动对波特率的配置错误造成的。
具体原因是,STM32F4 系列的APB时钟并不全部一样。 分42MHz or 45MHz,具体哪些型号为42M,哪些是45M,可以参照后续 drv_can.c 中的宏定义区分。
部分型号如下:
四 、代码
具体代码修改如下:
!315 针对STM32F4系列,根据不同的ABP1总线频率来配置CAN
新版 CAN 驱动中,修复了该bug,并且完善了CAN硬件滤波。如果有需要可以直接替换 drv_can.c 文件。
原作者:svchao
|