S32K144CAN通信接收bug处理

项目场景:

通过CAN模块实现控制器与整车的通信,控制器每隔10ms发送一帧报文数据(定时发送),整车每隔100ms发送一帧信号(ID1),每隔20ms发送另一帧信号(ID2)


问题描述:

can数据在传输过程中,有可能会出现某个ID(ID1或者ID2)接收不到报文,但是另一个ID可以正常接收,且can的间隔发送也正常。


原因分析:

通过仿真调试,发现是对应该IDcan的邮箱使能寄存器被修改掉,导致该ID不能正常接收到can报文,can接收报文是使用的中断接收。
而在单步调试过程中,发现能对该寄存器操作的函数只有在初始化和can发送函数,在正常情况下,can发送函数只使能自己对应的bit位,然后在中断函数,清掉该标志位,但是可能在异常情况下(如低压,大量报文情况下,可能操作错误,导致修改掉别ID的bit位)。


解决方案:

将can的发送中断模式改为,can的轮询发送模式,即轮询标志位,然后在报文发送成功后,再清掉该标志位,问题得到解决。

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值