历史上的今天
返回首页

历史上的今天

今天是:2024年09月02日(星期一)

正在发生

2018年09月02日 | stm32_can错误中断 清除重点

2018-09-02 来源:eefocus

整理:MilerShao

 某日,有一客户反映他们在做STM32F407的CAN通信的出错测试时,发现出现类似死机的现象。后来跟踪调试发现是开启了出错中断,因其不停中断导致的貌似死机现象。纳闷的是,经过进一步测试,发现即使清除了“中断请求标志”后也无效。大致情形如下:

在CAN通讯时候让某节点做插拔、断电等测试,人为的产生一些CAN总线错误,看看能否让总线恢复正常。 结果测试发现,如果总线出现错误,并且打开了CAN错误中断处理的话,通过仿真器调试发现CPU一直在处理CAN错误中断,其他程序得不到处理而呈死机状态。 先是怀疑CAN控制器因为各类错误条件而进入错误中断后,虽在错误中断里清除了相关中断状态标志,但由于计数器值没有清零的原因,马上又产生新的错误中断,这样循环反复,导致其他程序得不到调度。

然后继续做实验,将CAN_IER寄存器中的LECIE和EWGIE这两种中断使能关闭掉,发现还是有这个问题。 客户觉得这样有点奇怪。

从客户粗略描述的现象来看,很像没有清除中断标志导致中断没完没了。经进一步的沟通了解,客户除了开启相关收发中断外,还使能了LECIE、EWGIE、EPVIE、BOFIE、ERRIE跟出错有关的中断,当然SLKIE和WKUIE没有使能。

结合CAN_IER和CAN_ESR寄存器的相关描述,可以看出即使关闭了LECIE、EWGIE两个出错条件,但还有EPVIE、BOFIE两种情形可能导致CAN出错中断。

  

  

 

跟CAN出错中断有关的寄存器主要涉及到3个,分别是CAN主控状态寄存器CAN_MSR,CAN中断使能寄存器CAN_IER,CAN错误状态寄存器CAN_ESR. 说实在的,这个跟CAN出错中断有关的东西还是有点复杂。看看下图,蓝色方框里的是各种错误中断的使能位,红色方框里的是各类出错条件或状态变化条件。请注意图中的与逻辑符号&和或逻辑符号+。

 

     上图中下方与CAN_MSR相关的两类中断触发源跟本话题无关,就不提了,重点看看上方那四个与CAN出错有关的中断源。

细心的人会发现,其实CAN_IER中的ERRIE位是一个CAN出错中断总开关,只有当它被使能的前提下,EWG、EPV、BOF、LEC四个中的一个或几个出错事件配合各自的中断使能位才能产生出错中断,并统一将CAN_MSR中的错误中断请求ERRI位置1,从而申请CAN错误中断。显然,CAN错误中断的请求标志位是ERRI@CAN_MSR,而不是CAN_ESR中的EWGF\EPVF\BOFF的任一位。 

聊到这里,我们基本对CAN出错中断相关的寄存器和相关标志有了大致的了解。要把握一点,CAN出错中断有个总使能位ERRIE,其它几个出错事件配合该总使能位最终产生错误中断请求,置位ERRI@CAN_MSR。

回到上面的话题,当查看客户的CAN错误中断处理程序时,发现他在中断程序里的确是做了些标志的清除【本意是想清除中断请求标志】。遗憾的是全是对CAN_ESR寄存器中的相关错误标志进行清零,即对LEC\EWGF\EPVF\BOFF这几个东西清零,偏偏没有对ERRI@CAN_MSR的清零。关键的东西成了漏网之鱼。

还有,他对EWGF\EPVF\BOFF这几个标志清零是无效的,因为这几个标志位是只读的,置1或清零是硬件根据TEC/REC的值动态处理的。
 
 

最后让客户把CAN出错中断代码做些调整,在进入CAN出错中断后将CAN_MSR中的ERRI位清0,确实可以解决错误中断循环往复的问题。

小结下,MCU中断行为一般涉及到使能标志、请求标志和触发源。应用中偶尔会出现有人把中断使能标志和中断请求标志弄混的情况。不过相比之下,这里谈到的CAN出错中断相比ST MCU其它外设的中断应用就要复杂或啰嗦些,尤其那个出错中断请求标志感觉有点隐晦。上面提到的案例,当事人可能没弄清CAN出错中断请求标志位到底是哪个,导致进入中断服务程序后清除动作无效,使得出错中断服务程序没完没了,而且还会影响到其它进程正常运行进而导致其它连锁异常。


推荐阅读

史海拾趣

HBControls公司的发展小趣事
如果以上检查均正常,但问题仍未解决,建议联系松下售后或专业维修人员进行检修。
AEC Design公司的发展小趣事
在初步获得市场认可后,AEC Design公司开始积极拓展国内外市场。通过与各大电商平台和实体零售商建立合作关系,公司的产品线逐渐覆盖更广泛的消费群体。同时,公司还积极参加各类行业展会和论坛,与业界同行交流学习,不断提升自身的品牌影响力和市场竞争力。
广东长利光电(Changli Optoelectronic)公司的发展小趣事

在广东长利光电的发展历程中,公司始终注重企业文化建设和社会责任履行。公司倡导“以人为本、诚信务实、创新进取”的价值观,为员工提供了良好的工作环境和培训机会。同时,公司还积极参与社会公益事业,为社区的发展和环境保护做出了贡献。这些举措不仅提升了公司的品牌形象,还增强了员工的归属感和凝聚力。

以上五个故事,展现了广东长利光电在电子行业的发展历程和取得的成就。从初创时期的坚持与创新,到质量管理的突破,再到市场拓展与全球化布局,以及技术升级与产品创新,最后到企业文化建设与社会责任履行,每一个阶段都充满了挑战与机遇。广东长利光电正是凭借着对LED技术的深刻理解和市场需求的敏锐洞察,不断创新和发展,成为了电子行业中的佼佼者。

CalRamic Technologies Llc公司的发展小趣事

在巩固了国内市场地位后,CalRamic Technologies开始将目光投向国际市场。公司积极参加各类国际电子元器件展览会,与多家国际知名企业建立了合作关系。通过与国际大厂的深入交流,公司不仅拓宽了销售渠道,还引进了国际先进的生产技术和管理经验,进一步提升了自身的竞争力。

Analog公司的发展小趣事

随着科技的进步,客户对电子元器件的性能要求也越来越高。CalRamic Technologies意识到,要想在激烈的市场竞争中脱颖而出,必须不断进行技术创新。因此,公司投入大量资源进行产品研发,特别是在陶瓷电容器领域取得了显著的技术突破。他们开发的新型陶瓷电容器不仅体积更小,性能也更加稳定,很快就受到了市场的热烈欢迎。

Anders DX公司的发展小趣事

为了保证产品质量的稳定性和可靠性,CalRamic Technologies在公司成立不久后,就开始着手建立严格的质量管理体系。他们引入了国际先进的质量管理理念和方法,对每一个生产环节进行严格把控。这一举措大大提高了产品的合格率和客户满意度,为公司的长期发展奠定了坚实基础。

问答坊 | AI 解惑

模电仿真软件proteus7.2 sp6破解版

与朋友一起分享proteus 7.2 sp6 破解版, 可进行 模电数电 单片机的仿真…

查看全部问答>

空气电池

体 积轻薄的电池对各项应用来说,有着关键性的影响。以电动车为例,就必须在有限的体积内,尽可能的增加电池密度,才能够提高电动车的行驶距离。而麻省理工学院的几个华人学生,研发出一种空气锂电池(lithium-air battery),将有望一举突破目前的 ...…

查看全部问答>

关于信道

我现在在学CC2510,在配置RF的时候碰到信道的概念,在上网查,看到这么一句话不理解。 “常用的IEEE 802.11b/g工作在2.4~2.4835GHz频段,这些频段被分为11或13个信道。” 我想问的是频段被分为11或13个信道,这意思是把频段划分为11或13个通道每 ...…

查看全部问答>

帮忙看个程序。急用!!!

大家好:    为什么实型变量输出时报错?如下程序。 #include #include #define PI 3.14 double b; main() { SCON=0X50; TMOD=0X20; TH1=0X3f; TR1=1; TI=1; b=4.678; printf(\"%f\",b); 我使用keil c编程的,有用请 ...…

查看全部问答>

关于lower significance bit

在一个文档里看见,LSB,MSB,和 lower significance bit. 这个lower significance bit不太明白,有清楚的大虾吗?在线等。…

查看全部问答>

dbgview中出现Buffered packet. can't write back :-\

捕捉不到dbgprint的内容,怎么办?…

查看全部问答>

一个关于avrstudio和GCCAVR的奇怪问题,请大家帮帮我!

大家好:     我现在用的Atmel16单片机,开发软件是基于avrstudio和GCCAVR,我在调试以下程序时,提示:“Conflicting the type of wr(void)”的错误!     void mian(void)    {      unsi ...…

查看全部问答>

st-linkII可以仿真大容量的stm32吗

                                 需要有什么特殊的设置吗…

查看全部问答>