你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

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

[复制链接]
我的慢慢小宝贝 提问时间:2020-4-23 13:54 /
最近在用CAN通信,看到错误管理和错误帧这一部分,不理解。
手册上说错误管理完全由硬件处理,是不是如果发生了错误,错误帧是由硬件自动发送的?
那么错误帧的接收呢?也是由硬件自动接收处理的?

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

收藏 评论8 发布时间:2020-4-23 13:54

举报

8个回答
aiherong 回答时间:2020-4-25 05:08:34
建议再看一遍,读书百遍,其义自现
qq770211411 回答时间:2020-6-15 13:12:19
http://blog.csdn.net/ppdyhappy/article/details/71473672
建议你看看这个文章,希望对你有所帮助
废鱼 回答时间:2020-6-15 22:08:11
错误中断我理解的是,can模块检测到错误后,会产生对应的标志位,当开启错误中断后,出发错误中断,通过读取错误寄存器来判断错误的原因。
深山明月 回答时间:2020-6-15 22:50:19
学习了
任风吹吹 回答时间:2020-6-16 17:38:03
错误帧的检测,发送和接收都是自动的,只不过对于应用层来说是没有对应接口的;
对于错误检测:当检测到错误时,如果错误中断打开,那么会产生错误中断,这个是应用层可以看到的;
发送错误帧:不管是本身引起,还是检测到总线上出现错误帧,都会导致发送错误标志,错误标志有两种,主动错误标志和被动错误标志,取决于节点当前的状态(主动错误状态,被动错误状态?);
错误帧的发送问题-> 比如,当节点发送一个数据帧时由于某种问题(比如位错误)导致发送失败,那么本身节点会检测到这个错误,从而导致发送错误标志(错误帧),同时错误发送计数器TEC+8 (参考ISO11898-1错误计数规则)

当其它节点收到这个错误帧后也会发送错误帧,你没有看错,多个节点会同时发送错误帧,叠加在一起;那么对于其它节点来说,这个就是检测到总线的出现错误帧,被动式的发送错误帧,且它发送的错误标志取决定其节点状态;因此,错误帧的error flag实际长度为6~12位,合成supeposition of error flags;这些都是在ISO11898-1中的内容;后面才是界定符8个隐性位;

节点收到错误帧后接收错误计算器REC-1; TEC和REC就ST MCU内的寄存器,应用层可以看到的;这些都是自动有硬件处理的;
任风吹吹 回答时间:2020-6-16 17:40:53
这些是错误计数规则,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为0<REC<127时, 第次接收端成功接收报文后REC-1,直到减到0, 当接收端的REC>127时, 则当其成功接收报文后则直接设置REC为一固定值,此固定值为119~127.
任风吹吹 回答时间:2020-6-16 17:44:30
关于错误检测(由MCU自动实现):
位错误
节点检测到的位与自身送出的位数值不同
仲裁域或应答域期间发出“隐性”位,而检测到“显性”位不导致位错误
节点发送被动错误标志,但检测到显性位时不视为位错误.
填充错误
在使用位填充编码的帧域内(帧起始至CRC序列),不允许出现六个连续相同的电平位
CRC错误
节点计算的CRC序列与接收到的CRC序列不同
格式错误
固定格式位场(如CRC界定符、ACK界定符、EOF等)含有一个或更多非法位
在EOF,错误帧定界符,过载帧定界符的最后一位检测到显性位时, 不视为格式错误.
应答错误(ACK错误)
发送节点在ACK域(ACK slot)期间未检测到“显性”位
butterflyspring 回答时间:2020-6-19 17:31:40
学习啦

所属标签

相似问题

关于意法半导体
我们是谁
投资者关系
意法半导体可持续发展举措
创新和工艺
招聘信息
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
关注我们
st-img 微信公众号
st-img 手机版