嵌入式技术william hill官网
直播中

张勇

7年用户 1423经验值
私信 关注
[经验]

记录一下STM32F4的CAN总线波特率配置bug及解决方案

一、结论

该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

更多回帖

发帖
×
20
完善资料,
赚取积分