之前有大神提到,rtt4.1之前的版本,can的波特率计算是有误的。
主要F407的APB1是42MHz的。
需要把
CAN1MBaud, (CAN_SJW_2TQ | CAN_BS1_9TQ | CAN_BS2_5TQ | 3),
修改为
CAN1MBaud, (CAN_SJW_2TQ | CAN_BS1_9TQ | CAN_BS2_5TQ | 3)。
但是根据can的波特率计算应该是CAN_SJW_2TQ+CAN_BS1_9TQ+CAN_BS2_4TQ的结果是15。实际上要求是应该是14,这样42MHz进行分频以后,刚好就是42了。
CAN_SJW_2TQ+CAN_BS1_9TQ+CAN_BS2_4TQ
如果这样的话,是不是修改为
CAN1MBaud, (CAN_SJW_2TQ | CAN_BS1_9TQ | CAN_BS2_3TQ | 3)
比较合适。
查看更多
BaudRate = APBCLK/BRP*(1+BS1+BS2)你自己除一下, 按你说的2.9.3.3的配置,会有误差
BaudRate = APBCLK/BRP*(1+BS1+BS2)
42M 按1M波特率,最优的2.9.4.3
欢迎发表与嵌入式相关的技术分享、开发技巧、工具介绍、技术设想、职业心得、行业评论等对他人有启发,排版优雅的文章
回到 顶部
发布 问题
分享 好友
手机 浏览
投诉 建议
回到 底部
CAN_SJW_2TQ 不应该是等于2吗?那么应该是2+9+4。
@miandain_7
请仔细阅读红字部分
感谢。我的理解有误
我用的rtthread studio开发的,在cubemx setting里这样配置会报错说Prescaler设成3太小了。
是不是如果用了rtthread的drv_can.c,就不用再在cubemx setting里设置了?cubemx/Src/can.c里面的那些初始化也不用考虑了?
@NoneKnowsMe