STM32单片机用JLINK仿真程序正常,拔下仿真器后芯片不工作
时间:10-02
整理:3721RD
点击:
晚上,一同事在修理机器,说STM32单片机在仿真状态一切正常,拔下仿真后芯片不工作。之后几个人一起找原因,查电压、换线束,其中另一同事曾经碰到过相似问题,说应该是复位电路的事。就用镊子将复位引脚触了一下地,没想到程序开始跑了,芯片工作了。断电,重新上电,芯片仍不工作,用镊子短路后恢复正常。
仔细查看复位电路,采用RC复位电路,3.3V接10K上拉电阻,再在复位引脚上放一只0.1uF电容。单片机是低电平复位,怀疑电容太小,上电后充电过快,低电平时间太短,单片机不复位,程序不正常。更换为1uF电容后,芯片正常工作。
其实,也有太多不可思义的地方,公司一个系列的单片机都是用这个电路,从没出过问题,但这个就是不行,也许以后做复位电路真的要把电容选大一点,给复位留下充足的时间。
都是复位电路惹的祸!
仔细查看复位电路,采用RC复位电路,3.3V接10K上拉电阻,再在复位引脚上放一只0.1uF电容。单片机是低电平复位,怀疑电容太小,上电后充电过快,低电平时间太短,单片机不复位,程序不正常。更换为1uF电容后,芯片正常工作。
其实,也有太多不可思义的地方,公司一个系列的单片机都是用这个电路,从没出过问题,但这个就是不行,也许以后做复位电路真的要把电容选大一点,给复位留下充足的时间。
都是复位电路惹的祸!
这个问题依然是个谜
顶顶呀
复位啊,这个要学习一下
你可以看下STM32里的复位功能模块,看你把代码烧录到那个存储里面了!复位模块里面说的很清楚!
学习
我们老师说可能是没下载到flash里!但是我还没去找原因。
太好了,刚刚碰到这种问题了,现在去试试,谢谢小编。
我以前也碰到过这个问题,复位电路很重要呀。
电容的值误差很大的,用1微法的电容不就得了
谢谢小编分享
其实是因为system_stm32f10x.c程序里面有这么一行:while((HSEStatus == 0) && (StartUpCounter != HSEStartUp_TimeOut));
这行的作用是判断在规定的时间内晶振是否正常起振,不正常则死循环。呵呵,很低级的写法吧。所以,产品中,不正常起振时,让MCU自动软重启更可靠些。或者进入内部晶振模式再做判断。
而为什么小编加大电容就正常了呢,可以这样理解,假设第一次上电,程序开始跑了,但晶振在规定的时间内还没起振,然后死机了。短接一下复位电路,等于让程序重新开始跑,当然因为已经上电一段时间了,这时晶振也准备好了,可以正常运行。加大电容的作用也一样,上电后,先让晶振准备一段时间,复位电路才工作,这时程序跑到判断是否起振那段时,就不会死循环了。
当然,简单点的方法,直接在程序里把HSEStartUp_TimeOut的值改大些就好了。