久芯网

stm32中使用CAN通信时,通信错误是怎么处理的?

avatar jinger0311 提问时间: 2023-10-03 08:29:35 / 未解决
最近在用CAN通信,看到错误管理和错误帧这一部分,不理解。
手册上说错误管理完全由硬件处理,是不是如果发生了错误,错误帧是由硬件自动发送的?
那么错误帧的接收呢?也是由硬件自动接收处理的?

还有stm32中的错误中断,是只要监测到总线上有错误就会触发中断吗?还是说只是有本机发送引起的错误才会触发中断呢?


如需获得 stm32 等器件的更多信息,请点击链接或 点击此处 联系在线客服!

8个回答
  • avatar aiherong
    回答时间: 2023-10-03 08:54:51

    建议再看一遍,读书百遍,其义自现

  • avatar qq770211411
    回答时间: 2023-10-03 09:19:12

    http://blog.csdn.net/ppdyhappy/article/details/71473672 建议你看看这个文章,希望对你有所帮助

  • avatar 废鱼
    回答时间: 2023-10-03 09:51:37

    错误中断我理解的是,can模块检测到错误后,会产生对应的标志位,当开启错误中断后,出发错误中断,通过读取错误寄存器来判断错误的原因。

  • avatar 深山明月
    回答时间: 2023-10-03 10:22:45

    学习了

  • avatar 任风吹吹
    回答时间: 2023-10-03 10:39:58

    错误帧的检测,发送和接收都是自动的,只不过对于应用层来说是没有对应接口的; 对于错误检测:当检测到错误时,如果错误中断打开,那么会产生错误中断,这个是应用层可以看到的; 发送错误帧:不管是本身引起,还是检测到总线上出现错误帧,都会导致发送错误标志,错误标志有两种,主动错误标志和被动错误标志,取决于节点当前的状态(主动错误状态,被动错误状态?); 错误帧的发送问题-> 比如,当节点发送一个数据帧时由于某种问题(比如位错误)导致发送失败,那么本身节点会检测到这个错误,从而导致发送错误标志(错误帧),同时错误发送计数器TEC+8 (参考ISO11898-1错误计数规则) 当其它节点收到这个错误帧后也会发送错误帧,你没有看错,多个节点会同时发送错误帧,叠加在一起;那么对于其它节点来说,这个就是检测到总线的出现错误帧,被动式的发送错误帧,且它发送的错误标志取决定其节点状态;因此,错误帧的error flag实际长度为6~12位,合成supeposition of error flags;这些都是在ISO11898-1中的内容;后面才是界定符8个隐性位; 节点收到错误帧后接收错误计算器REC-1; TEC和REC就ST MCU内的寄存器,应用层可以看到的;这些都是自动有硬件处理的;

  • avatar 任风吹吹
    回答时间: 2023-10-03 10:58:05

    这些是错误计数规则,ISO11898-1中的内容(自己多看文档啊): 1>当接收端检测到一个错误时 ->REC+1 例外:当在发送主动错误标志和过载标志时检测到位错误 2>当接收端检测到一个错误时 ->REC+1 例外:当在发送主动错误标志和过载标志时检测到位错误 3> 当发送端发送错误标志时 ->TEC+8 例外: 当发送端是被动错误节点,且由于应答错误而在发送被动错误标志期间未检测到任何显性位时 当发送端在仲裁域期间由于检测到位填充错误而发送错误标志时(如发送隐性位但检测到实际是显性位) 4> 当发送端检测到在发送主动错误标志或者过载标志时出现位错误 ->TEC+8 5> 当接收端检测到在发送主动错误标志或者过载标志时出现位错误 ->REC+8 6> 任何节点在发送主动错误标志,被动错误标志,过载标志之后都应该能够最大容忍7个连续显性位, 节点在主动错误标志或者过载标志检测到连接14个显性位,或者在被动错误标志后检测到连续8个显性位, 每次检测到连续8个显性位时, 发送端的TEC+8,接收端的REC+8. 7> 发送端每次在成功发送报文后TEC-1,直到为0 8> 当接收端的REC为0127时, 则当其成功接收报文后则直接设置REC为一固定值,此固定值为119~127.

  • avatar 任风吹吹
    回答时间: 2023-10-03 11:22:04

    关于错误检测(由MCU自动实现): 位错误 节点检测到的位与自身送出的位数值不同 仲裁域或应答域期间发出“隐性”位,而检测到“显性”位不导致位错误 节点发送被动错误标志,但检测到显性位时不视为位错误. 填充错误 在使用位填充编码的帧域内(帧起始至CRC序列),不允许出现六个连续相同的电平位 CRC错误 节点计算的CRC序列与接收到的CRC序列不同 格式错误 固定格式位场(如CRC界定符、ACK界定符、EOF等)含有一个或更多非法位 在EOF,错误帧定界符,过载帧定界符的最后一位检测到显性位时, 不视为格式错误. 应答错误(ACK错误) 发送节点在ACK域(ACK slot)期间未检测到“显性”位

  • avatar butterflyspring
    回答时间: 2023-10-03 11:50:49

    学习啦

会员中心 微信客服
客服
回到顶部