大家好,今天小编来为大家解答51单片机系统每隔一段时间失效,重启又正常疑问这个问题,单片机死机的解决办法很多人还不知道,现在让我们一起来看看吧!
本文目录
stm32死机的原因有哪些
Stm32出现死机,程序跑飞这类的问题,我之前在开发过程中就遇到过,造成这种不良,有很多可能的原因,软件硬件都有可能,需要从几个方面去排查
硬件方面:
1stm32的供电电压是否稳定,是否在正常工作电压范围内。电源文波大小一定要小,一般Ldo供电在3.3v在几个ma,在stm32的vdda和vssa引脚一定要接磁珠,各个电源硬件要接滤波电容
2晶振以及旁路电容,一定要尽可能的靠近单片机,整个电路中是否有裸露的接口如usbio口这类的接口,因为冬天人体或者其他物体静电很大,当瞬间大静电通过接触,传导给单片机时,很容易引起单片机复位或者死机,所以有这样的接口需要做防静电电路,或者专用防静电芯片在保护单片机不死机。
3单片机复位电路,一定在设计的时候需要加旁路电容,同时需要保证复位电路电源稳定,这个与第一点原因说明一样。
4无线射频信号,当电路中有无线类如蓝牙wifigsm等无线射频信号时,也很容易因为无线辐射干扰造成单片机死机,这个就需要找专业测试天线的公司或者设备或者人员去测试辐射状态。无线射频的电线一定要匹配好,否则很容易会有无法预测的不良状态出现。
硬件是软件运行的载体,需要在设计时候就考虑好,增加抗干扰因素,
硬件可以通过静电台空气放电一万伏,接触式采用八千伏,使用一定数量的机器,一定次数的测试,如果不出现死机情况,就说明硬件基本没有问题。
软件方面
1考虑堆栈,编译器默认启动文件中,有堆栈设置的代码,一般官方默认的堆栈设置的比较小,当你的项目代码量大的时候,需要调整这个文件里面堆栈大小
2检查代码,是否有不合理死循环,检查是否有定义的数组溢出,造成程序跑飞
3是否有使用内部flash存储,当不合理的flash内存操作时,也会造成死机.经过批量试产,机器死机问题得到解决.
4不合理的中断,当有多个中断处理时候,一定要设置清晰各个中断不同的中断优先级,不合理的中断设置,也有可能造成死机情况的出现。
5定义的数组不合理,在使用的过程中出现溢出,结果程序就在使用不可知的某一个flash位置的数据进行处理,所以这点也很重要。
以上是我根据自身项目经验,对stm32死机问题的分析与处理。
想了解更多电子元器件,电子开发设计,嵌入式编程,研发相关管理知识或者观点,请记得加【关注】
欢迎您转发,谢谢您
51单片机系统每隔一段时间失效,重启又正常疑问
很正常的,电磁铁吸合关闭会有电磁信号的串入。
直接导致你的单片机死机,昨天说了,要是带动线圈类或,大电流的,还会有其它问题出现。这就是其中一种。电磁干扰单片机,使之死机。好几种,建议全部用上最保险。1,开关闭合后,触发继电器吸合,改为,开关闭合后延时500ms然后再出发继电器,这时为了解除电磁铁吸合后干扰信号导致单片机误动作。
2,P2.0到三机关之间加装光耦,防止继电器吸合断开打火干扰;
3,继电器到电磁铁处加装固态继电器,彻底隔绝电磁铁吸合断开后对电源的干扰;
4,加上看门口电路,防止程序长时间运行导致的不确定问题发生。
ATMega单片机的复位方式有哪几种
单片机复位就两种方式,一个是硬件复位,一个是软件复位。 硬件复位就是靠外部的硬件强行把复位管教置为低电平,例如上电的时候,还有按键。 上电之所以要复位是因为在接通电源的一瞬间,给单片机的电压是不稳定的,电压不稳定就会导致程序跑飞,从而出现意想不到的情况。而常用的阻容复位(就是一个电阻和电容串联,电阻接VCC,电容接地,复位管教接中间的那种。),当上电的时候,电源经电阻向电容充电,电容看作短路,所以复位管教为低电平,使得单片机在这段时间内不停的复位。当电源稳定后,电容已经充电完成,相当于开路,复位管教为高电平,单片机正常运行程序。 软件复位就是利用单片机内部的看门狗来防止程序跑飞,看门狗就是个定时器,每个机器周期,它就加一,当它记满时,就会让单片机复位。所以要要定时重装看门狗。正常情况下,不能让他溢出。这叫喂狗。当单片机受到外界的干扰,使得程序跑飞,跑出while(1)大循环的时候,由于无法执行喂狗的动作,单片机就会复位,从而不会出现单片机死机的情况。
电机干扰,导致STM32死机,求帮助
中断最好不要弄太多,你可以试试STM32的SLEEPMODE,先挂起SYSTICK,然后调用进入SLEEP的函数,这时候单片机会休眠,任意中断可以唤醒,让程序继续往下执行,这种方法可以让你的代码全部写在主循环里,不写在中断里,可以保证不在中断处理函数里面触发其他的中断,也许可以提高程序的稳定性
OK,本文到此结束,希望对大家有所帮助。