STM32F429 CAN通信不成功

最近因为CAN的问题弄了我好几天时间,总结一下:

1:STM32F407开发板回环模式与CAN1给CAN2发数据都是OK的,STM32F429不行。

对比初始化函数以及检查硬件,120欧电阻还是要的,什么光耦电路能去掉还是去掉,H/L直接从TJA1050芯片出来即可。

2:STM32F407与STM32F429回环模式,can1与can2通信都成功,但是STM32F407与STM32F429通信不成功。

这是为毛啊??不急,再做个试验,STM32F429两块板子能通信成功,不存在硬件问题了,定位应该是波特率不匹配的问题。

按照STM32规格书波特率计算方式应该是:

can波特率=(APB1时钟/(分频系数*(SYNC_SEG+BS1+BS2)));

再看看自己的配置,怎么看怎么对啊,虽然429系统时钟是180M,407系统时钟是168M,但407与429都是设置的是250kbps。

好吧,代码是看不出结果的。

1:拿个示波器来量吧,唯一借的一个示波器是坏的,can是通过H/L之前的电平差来计算1与0的,所以可以测试出来,我是没测成功,放弃。

2:弄个can转USB吧,407设置250Kbps通信成功,429设置250Kbps不成功。

更加确认波特率不对,但是为什么不对呢,那就去研究下系统时钟的产生,大概说下:

系统时钟可以由好几种方式产生,我的板是有外部晶振产生的,一般STM32官方固件库默认外部晶振是8M,但是我这块板子外部晶振是25M,那就怀疑是不是这方面配置,修改下配置25M(具体配置自行百度),再次试验,成功。

虽然最终成功,按理说外部晶振通过倍频方式产生180M的系统时钟,系统时钟再通过分频方式产生总线时钟,CAN波特率应该不受此影响,还是不理解最终原因???



你可能感兴趣的:(MCU)