历史上的今天
返回首页

历史上的今天

今天是:2025年04月21日(星期一)

正在发生

2020年04月21日 | 关于STM8CAN产生bus-off如何自动恢复

2020-04-21 来源:eefocus

硬件条件: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的过程中也可参考上述寄存器的配置。

推荐阅读

史海拾趣

ARMKEIL Microcontroller Tools公司的发展小趣事

ARMKEIL Microcontroller Tools公司的起点可以追溯到Keil公司的成立。1985年,Keil Elektronik GmbH(凯尔电子有限责任公司)在德国慕尼黑正式成立,由一群热衷于嵌入式系统开发的工程师创立。起初,公司的主要业务是开发和销售嵌入式系统的开发工具,这些工具为当时的电子工程师提供了强大的支持。随着业务的发展,Keil逐渐在嵌入式系统开发领域崭露头角。

Excelsys公司的发展小趣事

人才是企业发展的核心驱动力。Excelsys公司高度重视人才培养和团队建设。公司建立了完善的人才培养机制,为员工提供系统的培训和学习机会;同时,公司还注重团队文化的建设,营造积极向上、团结协作的工作氛围。这些措施为公司的持续发展提供了有力的人才保障。

Hsuan Mao Technology Co公司的发展小趣事

随着全球对环保意识的日益增强,Excelsys公司积极响应绿色环保的号召,将环保理念融入到产品设计和生产过程中。公司采用环保材料、优化生产工艺、提高能源利用效率等措施,减少了对环境的影响。同时,公司还积极参与环保公益活动,为行业的绿色发展贡献力量。

GAIA Converter Inc公司的发展小趣事

在江苏扬州,一家名为锋鸣电子的公司于2008年成立,起初专注于电子元器件的代工生产。面对激烈的市场竞争,公司创始人李伟决定走技术创新之路。2012年,锋鸣电子成功研发出新一代高灵敏度蜂鸣器,该产品在噪音控制和响应速度上实现了显著突破,迅速获得了国内外市场的认可。此后,公司不断加大研发投入,逐步拓展产品线,成为电子蜂鸣器领域的佼佼者。

Amerace Electronic Components公司的发展小趣事

随着全球环保意识的提高,Amerace Electronic Components公司积极响应绿色环保号召,将环保理念融入生产和经营中。公司采用环保材料和工艺,减少生产过程中的污染排放。同时,Amerace还致力于推动电子元件的循环利用和回收,为环保事业贡献力量。这种环保理念的践行不仅提升了公司的社会形象,也为公司的可持续发展奠定了基础。

DART(英国达特)公司的发展小趣事

在快速发展的过程中,DART公司也遇到了不少挑战和危机。例如,某个时期全球电子元器件供应紧张,导致公司面临严重的原材料短缺问题。面对这一挑战,DART公司迅速调整采购策略,积极寻找新的供应商和替代品,并加强与现有供应商的合作和沟通。通过这些措施,公司成功度过了危机,并保持了业务的稳定增长。

问答坊 | AI 解惑

上传点资料

本帖最后由 paulhyde 于 2014-9-15 09:26 编辑 [ 本帖最后由 HiVi1120 于 2009-8-22 17:29 编辑 ]  …

查看全部问答>

你的手机还能做什么?

手机的成本是越来越少了 今年也听到朋友提及手机监控 你觉得,除此之外,咱手上的手机还能做什么?…

查看全部问答>

TD数字无绳电话年内上市:欲成杀手级产品

  家庭信息机之后,TD-SCDMA又推出固网产品。全球首款基于TD-SCDMA的数字无绳电话解决方案的推出,标志着中国移动针对家庭用户的TD-SCDMA产品系列中将再度丰富。   数字无绳电话是现代家庭电话的升级换代产品,将满足家庭电话更新需求。中国 ...…

查看全部问答>

便携式心电监护系统的设计

  心电图(ECG)是心脏疾病诊断的重要手段。常规心电图是病人在静卧情况下由医院的心电图仪记录的短时间心电活动,由于心脏病发作带有很大的偶然性和突发性,所以在非发作期做常规心电图检查获取疾病信息的几率很低。   因此,将心电监护从病床 ...…

查看全部问答>

有个问题困惑我好几天了,望大侠们指点一下

我写了一个小驱动叫keyboard.sys,然后我用SRVINSTW.EXE把这个驱动注册了服务叫mykeyboard,为什么我在命令行里用net start mykeyboard命令时总是提示“发生系统所误161  指定的路径无效”,我真晕了,不知道错在什么地方…

查看全部问答>

请问这个问题解决了吗?

请问这个问题解决了吗?…

查看全部问答>

关于驱动程序与应用程序的交互问题

在WINDOWS DDK中有一个虚拟摄像头的驱动程序,如果我们使用他的话,他会有一张图片会显示。我想用我另外一个程序去控制这个虚拟摄像头的源,就是说如果我想把一个视频文件做成他的源,就是说我在我的程序里播放文件 或者其他的东西,在QQ上对方看到 ...…

查看全部问答>

关于68013A自动指针的问题

我使用的是68013A芯片,使用GPIF接口来控制MAX115进行数据的读写,在GPIF初始化的代码中(由GPIF Designer生成),有一部分是将波形描述符转移到0xE400,这里使用了自动指针来自动转移。我的问题是,正常下载运行之后,得不到pipe信息,描述符等信 ...…

查看全部问答>

能否将系统的数据调入到智能手机的发送短信功能里进行发送?

系统有两个数据表:人员表、信息表 人员表:id  、name、phone 信息表:id   title  content 想实现这样的功能,能够通过智能手机将信息表中的title和content的内容调出来,发送到指定人员表中指定的phone中的手 ...…

查看全部问答>