你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。
chrome
firefox
safari
ie8及以上
ST
意法半导体官网
STM32
中文官网
ST
全球论坛
登录/注册
首页
技术问答
话题
资源
创客秀
视频
标签
积分商城
每日签到
stm32中使用CAN通信时,通信错误是怎么处理的?
[复制链接]
我的慢慢小宝贝
提问时间:2020-4-23 13:54 /
问答
是否解决:
最近在用CAN通信,看到错误管理和错误帧这一部分,不理解。
手册上说错误管理完全由硬件处理,是不是如果发生了错误,错误帧是由硬件自动发送的?
那么错误帧的接收呢?也是由硬件自动接收处理的?
还有stm32中的错误中断,是只要监测到总线上有错误就会触发中断吗?还是说只是有本机发送引起的错误才会触发中断呢?
赞
0
收藏
0
评论
8
分享
发布时间:2020-4-23 13:54
举报
请先
登录
后回复
8个回答
任风吹吹
回答时间:2020-6-16 17:38:03
a0a.1 32b0c
错误帧的检测,发送和接收都是自动的,只不过对于应用层来说是没有对应接口的;
对于错误检测:当检测到错误时,如果错误中断打开,那么会产生错误中断,这个是应用层可以看到的;
发送错误帧:不管是本身引起,还是检测到总线上出现错误帧,都会导致发送错误标志,错误标志有两种,主动错误标志和被动错误标志,取决于节点当前的状态(主动错误状态,被动错误状态?);
错误帧的发送问题-> 比如,当节点发送一个数据帧时由于某种问题(比如位错误)导致发送失败,那么本身节点会检测到这个错误,从而导致发送错误标志(错误帧),同时错误发送计数器TEC+8 (参考ISO11898-1错误计数规则)
当其它节点收到这个错误帧后也会发送错误帧,你没有看错,多个节点会同时发送错误帧,叠加在一起;那么对于其它节点来说,这个就是检测到总线的出现错误帧,被动式的发送错误帧,且它发送的错误标志取决定其节点状态;因此,错误帧的error flag实际长度为6~12位,合成supeposition of error flags;这些都是在ISO11898-1中的内容;后面才是界定符8个隐性位;
节点收到错误帧后接收错误计算器REC-1; TEC和REC就ST MCU内的寄存器,应用层可以看到的;这些都是自动有硬件处理的;
赞
1
评论
回复
支持
1
反对
0
aiherong
回答时间:2020-4-25 05:08:34
a0a.1 32b0c
建议再看一遍,读书百遍,其义自现
赞
0
评论
回复
支持
反对
qq770211411
回答时间:2020-6-15 13:12:19
a4a.1 32b0c
http://blog.csdn.net/ppdyhappy/article/details/71473672
建议你看看这个文章,希望对你有所帮助
赞
0
评论
回复
支持
反对
废鱼
回答时间:2020-6-15 22:08:11
a0a.1 32b0c
错误中断我理解的是,can模块检测到错误后,会产生对应的标志位,当开启错误中断后,出发错误中断,通过读取错误寄存器来判断错误的原因。
赞
0
评论
回复
支持
反对
深山明月
回答时间:2020-6-15 22:50:19
a1024a.1 32b0c
学习了
赞
0
评论
回复
支持
反对
任风吹吹
回答时间:2020-6-16 17:40:53
a0a.1 32b0c
这些是错误计数规则,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.
赞
0
评论
回复
支持
反对
任风吹吹
回答时间:2020-6-16 17:44:30
a0a.1 32b0c
关于错误检测(由MCU自动实现):
位错误
节点检测到的位与自身送出的位数值不同
仲裁域或应答域期间发出“隐性”位,而检测到“显性”位不导致位错误
节点发送被动错误标志,但检测到显性位时不视为位错误.
填充错误
在使用位填充编码的帧域内(帧起始至CRC序列),不允许出现六个连续相同的电平位
CRC错误
节点计算的CRC序列与接收到的CRC序列不同
格式错误
固定格式位场(如CRC界定符、ACK界定符、EOF等)含有一个或更多非法位
在EOF,错误帧定界符,过载帧定界符的最后一位检测到显性位时, 不视为格式错误.
应答错误(ACK错误)
发送节点在ACK域(ACK slot)期间未检测到“显性”位
赞
0
评论
回复
支持
反对
butterflyspring
回答时间:2020-6-19 17:31:40
a1024a.1 32b0c
学习啦
赞
0
评论
回复
支持
反对
所属标签
相似问题
关于
意法半导体
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
微信公众号
手机版
快速回复
返回顶部
返回列表
对于错误检测:当检测到错误时,如果错误中断打开,那么会产生错误中断,这个是应用层可以看到的;
发送错误帧:不管是本身引起,还是检测到总线上出现错误帧,都会导致发送错误标志,错误标志有两种,主动错误标志和被动错误标志,取决于节点当前的状态(主动错误状态,被动错误状态?);
错误帧的发送问题-> 比如,当节点发送一个数据帧时由于某种问题(比如位错误)导致发送失败,那么本身节点会检测到这个错误,从而导致发送错误标志(错误帧),同时错误发送计数器TEC+8 (参考ISO11898-1错误计数规则)
当其它节点收到这个错误帧后也会发送错误帧,你没有看错,多个节点会同时发送错误帧,叠加在一起;那么对于其它节点来说,这个就是检测到总线的出现错误帧,被动式的发送错误帧,且它发送的错误标志取决定其节点状态;因此,错误帧的error flag实际长度为6~12位,合成supeposition of error flags;这些都是在ISO11898-1中的内容;后面才是界定符8个隐性位;
节点收到错误帧后接收错误计算器REC-1; TEC和REC就ST MCU内的寄存器,应用层可以看到的;这些都是自动有硬件处理的;
建议你看看这个文章,希望对你有所帮助
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.
位错误
节点检测到的位与自身送出的位数值不同
仲裁域或应答域期间发出“隐性”位,而检测到“显性”位不导致位错误
节点发送被动错误标志,但检测到显性位时不视为位错误.
填充错误
在使用位填充编码的帧域内(帧起始至CRC序列),不允许出现六个连续相同的电平位
CRC错误
节点计算的CRC序列与接收到的CRC序列不同
格式错误
固定格式位场(如CRC界定符、ACK界定符、EOF等)含有一个或更多非法位
在EOF,错误帧定界符,过载帧定界符的最后一位检测到显性位时, 不视为格式错误.
应答错误(ACK错误)
发送节点在ACK域(ACK slot)期间未检测到“显性”位