STM32 CAN因波特率不同导致初始化失败

背景:现场发现CAN硬件连接后,波特率设置成125k则初始化失败,设置成500k则能正常启动。

平台:STM32 HAL库

调试记录

  1. 单步调试发现CAN初始化失败的原因为退出初始化模式时超时,INAK位始终为1。
    在这里插入图片描述
  2. 查找芯片资料,发现CAN需要检测到连续11个隐性电平才将INAK位清零,退出初始化模式。在这里插入图片描述
  3. 用万用表测量CAN线对地电压,总线悬空时测得CANH=3.26V、CANL=3.27V,总线无法初始化情况下,CANH=3.47V、CANL=1.97V,至此只能判断总线未能处于空闲状态,不能判断为什么波特率高低影响初始化。
  4. 将逻辑分析仪挂到总线上,抓到波形,发现总线有周期性电平变化,且最长持续电平大约持续62us。在这里插入图片描述
  5. 500k的11个隐性电平时间为22us,125k的11个隐性电平时间为88us,由此这条总线不满足125k波特率初始化条件。

总结

CAN初始化时要想办法将总线至于空闲状态,即便不能控制总线处于空闲状态,软件设计时也尽量不要总线初始化失败就陷入死循环。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值