关于STM8CAN产生bus-off如何自动恢复
关于STM8CAN产生bus-off如何自动恢复
- 硬件条件:STM8AF52A8、TJA1040T
- 软件条件:IAR
这里只是产生bus-off的一种情况:当CANH和CANL短接在一起的时候,STM8的can控制器就停止工作了,如何让CAN重新工作。
理论上:看STM8的参考手册,其中CAN主控制寄存器(CAN_MCR)的第六位ABOM可以决定CAN控制器自动退出离线状态,简单的说就是自动恢复。
按照上述手册所描述的,只要将ABOM置“1”就可以实现自动恢复。那么我们只需要简单的在CAN初始化的过程中将ABOM置“1”即可。那么就在CAN_Init(……);之后加CAN->MCR |= (uint8_t)CAN_MCR_ABOM;那么这样ABOM置“1”了。那么运行之后,CAN还是不能够恢复…….不知是不是哪里出错了还是设置不对,有经验的可以教教我。
以上的方法是没有实现自动恢复的。之后发现可以采用另外一种方法,就是当产生bus-off会触发STM8的中断函数,通过仿真发现其中CAN寄存器CAN_MSR的ERRI位会被置”1”,在通过查手册看了下CAN_MSR寄存器。写到置位以后会触发中断,那么当出现bus-off的时候可以通过中断服务函数来判断。那么接下来纠结的CAN错误中断服务函数是哪一个?在不下心的情况下发现了CAN发送中断后面的一个注释,大家可以看看。后面有一个ER,说明这个发送中断服务函数包括错误函数。意思就是当CAN发送报文和有错误触发的时候都会进入下面这个中断服务函数。
INTERRUPT void CAN_TX_IRQHandler(void); /* CAN TX/ER/SC */
接下来我们就要在中断服务函数中判断是否出现了BUS-OFF,从函数和手册中可以得知(就上面的截图就说到,BOFF置”1”,不再接收和发送报文),只要BOFF位被置“1”,说明进入了bus-off中断了。
CAN_IT_BOF =((uint16_t)0x0400), /*!< Bus-off interrupt */
INTERRUPT_HANDLER(CAN_TX_IRQHandler, 9){/* In order to detect unexpected events during development,it is recommended to set a breakpoint on the following instruction.*/CAN_ClearITPendingBit(CAN_IT_TME);if(CAN_GetITStatus(CAN_IT_BOF) == SET){//这里加你的CAN初始函数,将CAN重新初始化CAN_Init(……);CAN_ClearITPendingBit(CAN_IT_BOF);}}
按照上面的做法理论上是可以实现CAN恢复的,如果还是不行,那么就需要另外找办法了
在CAN出现BUS-OFF恢复后你可能会出现下面一个问题,在CAN恢复以后会有莫名几帧报文出现,这是因为STM8有一个自动重传模式,如果这不影响你的正常使用那是没有关系的,如果你想关闭这个自动重发的功能,你只需要将CAN_MCR寄存器的NART位置”1”就可以了,在CAN_Init();函数里面找以一个后面一点的位置加上下面这条语句。
CAN->MCR |= (uint8_t)CAN_MCR_NART;
应该就可以了。(这次寄存器就起作用了O(∩_∩)O哈哈~),下面就是手册里面介绍的。
上面说的很多都是契合STM32寄存器的内容,如果在使用STM32的CAN的过程中也可参考上述寄存器的配置。
关于STM8CAN产生bus-off如何自动恢复相关推荐
- 为什么文件会自动恢复成旧文件? -- windows server 2003
cjq001 (威猛先生 noteu.net) 等 级: 结帖率:98.15% 楼主发表于:2009-01-04 08:53:15 我编辑了我公司服务器上的文件,服务器安装的是windows serv ...
- ES 自动恢复分片的时候不恢复了是磁盘超过了85%,然后不恢复了 ES可以配置多个数据目录...
ES 自动恢复分片的时候不恢复了是磁盘超过了85%,然后不恢复了 ES可以配置多个数据目录 转载于:https://www.cnblogs.com/gaoyuechen/p/10156186.ht ...
- oracle自动还原,什么是oracle自动恢复操作
这是由系统进行的恢复.无需人的管理和操作.一般当系统由于突然掉电而出现故障时用这种方法.当再次启动数据库就会进行自动恢复. 不像简单的DOS系统,oracle系统在运行时有许多事务要处理,并且存在许多 ...
- 如何下载Android源码(非常详细,含自动恢复下载,编译,运行模拟器说明)
今天终于把代码下载完成,特此开一篇博文记录一下.上图: 为了下载这些源码,历时5天5夜,说为什么这么长时间,是因为太容易中断了,有时候下一晚上可能就一直没在下,在你入睡的时候它就自己断了,趁着这个周末 ...
- vendor自动恢复_push文件到system分区,重启后文件会被自动恢复
push文件到system分区,重启后文件会被自动恢复 2020-02-4 阅读:2488 [DESCRIPTION] 客户反馈有些版本,push文件到system分区之后一旦重启,push的文件会被 ...
- netsh命令恢复网络_实例的状态检查和自动恢复
关注微信公众号:AWS爱好者(iloveaws) Hello大家好,欢迎来到<AWS解决方案架构师认证 Professional(SAP)中文视频培训课程>,我们今天的课程讨论实例的状态检 ...
- Redis学习总结(23)——Redis如何实现故障自动恢复?浅析哨兵的工作原理
前言 Redis是如何实现故障自动恢复的,它的实现正是要基于之前所讲的数据持久化和数据多副本而做的.Redis作为非常火热的内存数据库,其除了具有非常高的性能之外,还需要保证高可用,在故障发生时,尽可 ...
- nova 宿主机重启自动恢复虚拟机运行状态
1. 宿主机重启自动恢复虚拟机运行状态 1.1 参数描述与默认值 # Whether to start guests that were running before the host reboote ...
- Excel设置自动恢复功能以及数据恢复教程
Microsoft Office Excel拥有"自动恢复"功能,用于在数据丢失时自动恢复未保存的文档文件.自动恢复作为Office内置的功能,该功能允许您还原到最后一个自动保存的 ...
- Windows自动恢复报错:无法加载操作系统,原因是关键系统驱动程序丢失或包含错误
Windows自动恢复报错:无法加载操作系统,原因是关键系统驱动程序丢失或包含错误 1. 问题 无法加载操作系统,原因是关键系统驱动程序丢失或包含错误 上午因为有点事就没有像往常一样打开电脑,下午回到 ...
最新文章
- ionic中使用Cordova Uglify 压缩js与css
- 如何修改word中的单位信息、用户信息及文档属性
- ASP.NET MVC 二维码生成(ThoughtWorks.QRCode)
- 【BZOJ2117】 [2010国家集训队]Crash的旅游计划
- 每天要问自己的十个问题
- 数据持久层框架 Hibernate
- addView的误区
- 音视频技术开发周刊 | 180
- 线程休眠 java 1615477264
- ASH的适用场景和常见用法(附2个经典案例)
- (4)ISE14.7 ChipScope使用流程(FPGA不积跬步101)
- java中为什么还要防止内存泄露_JAVA防止内存的泄漏什么意思,内存还能泄露?...
- linux 档案类型s,深入了解Linuxs归档和压缩命令 | MOS86
- jquery-weui的学习与使用
- 数据总线和地址总线区别是什么?作用分别是什么
- Matisse图片选择
- 关于知识分享和微软TechEd Roadshow
- Unity UGUI 字体加粗特效
- 榆树计算机课,吉林省榆树市弓棚镇武龙中学校七年级信息技术:第九课 Excel表格计算 教案+课件 (2份打包)...
- MySQL数据库基础-----多表查询