我玩单片机的过程中大大小小肯定都会遇到一些问题,不遇到问题是不可能的,出现问题肯定是板子某一个部分出了问题;单片机出现死机的情况也分为很多种,电压的地不稳定、元器件干扰、短路、断路等都会导致单片机故障程序无法运行。下面几种现象都是会造成单片机出问题的故障。

1.出现“跑飞”这种情况是因为程序有一定的隐患或被外部元器件干扰造成的错误动作,导致单片机被写入“出界”数据,程序跑到了RAM区或者跑到了FLASH的空白区。如果PC指向了FLASH空白区,则可以事先将所有FLASH空白区填入某个你想要的数据,迫使程序译码器在这里翻译出你想要的指令,按照我们想要的方式去处理。如果单片机指向了RAM区,那情况就会不一样;因为程序译码器可能得到任意译码结果。

2.“死机”是指单片机进入了“死循环”,或者是MCLK等于近似为零的值。此时,要想救活MCU,就只有复位。这时我们就需要用看门狗了,看门狗的作用是:当程序在某种意外情况下,这时就没办法去”喂狗“,一旦持续某个门槛时间(比如20ms)还没有”喂狗“,那么看门狗就把单片机复位。

程序运行过程中,如果MCU电源出现问题(电源供电问题,或其它外部电路引起的电源扰动),比较容易出现“跑飞”现象。程序跑飞应该是单片机出错了;软件和硬件都可能出这样的问题。

死机一般情况下是CPU根本没有运行,很大的概率是硬件方面的问题造成的,如果复位不成功,430比较容易出现掉电不完全后重新上电。

死机我们通常是指CPU的程序指针进入一个死循环,无法按照我们编入的逻辑执行正常的程序流程。我们直接观察到的现象是:正常功能丧失,按键无反应,显示进入定格状态。单片机死机后,只有复位才能走出死循环,执行正常的程序流程。玩单片机的都知道解决死机的最有效手段是加看门狗(WatchDog)。

目前用得最广泛的看门狗实际上是一个特殊的定时器DogTimer。DogTimer按固定速率计时,计满预定时间就发出溢出脉冲使单片机复位。如果每次在DogTimer溢出前强行让DogTimer清零,就不会发出溢出脉冲。清零脉冲由CPU发出,在单片机程序中每隔一段语句放一个清DogTimer的语句–FeedDog语句,以保证程序正常运行时DogTimer不会溢出。

不是说加了看门狗,单片机就不会死机具体要看你怎么去用。实际上,看门狗有时间会完全失效。当程序进入某个死循环,而这个死循环中又包含FeedDog语句,这时DogTimer始终不会溢出,单片机始终得不到复位信号,程序也就始终跳不出这个死循环。

双时限看门狗有两个定时器;一个为短定时器,一个为长定时器。短定时器定时为T1,长定时器定时为T2,0。当程序进入某个死循环,如果这个死循环包含短定时器FeedDog语句而不包含长定时器FeedDog语句,那么长定时顺终将溢出,使单片机复位。通过编写程序安排长定时器FeedDog语句的位置,可保证出现死机的概率很低。

定时复位看门狗就是定时地让单片机强行复位。这样,即使装置死机,其最大死机时间也不会大于定时器定时时间。只要硬件没有出现问题,看门狗就可以保证单片机不会长时间死机。

希望以上的知识能够给大家提供帮助,这期我们先分享到这里,觉得有用的可以给华维点个赞关注一下!

想要一起学习单片机的朋友,评论”我要入门“,有惊喜,加入我们,就可以与导师一对一互动,快速成长

加客服微信:qiushu0517,开通VIP下载权限!