微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > ARM技术讨论 > STM32单片机用JLINK仿真程序正常,拔下仿真器后芯片不工作

STM32单片机用JLINK仿真程序正常,拔下仿真器后芯片不工作

时间:10-02 整理:3721RD 点击:
   晚上,一同事在修理机器,说STM32单片机在仿真状态一切正常,拔下仿真后芯片不工作。之后几个人一起找原因,查电压、换线束,其中另一同事曾经碰到过相似问题,说应该是复位电路的事。就用镊子将复位引脚触了一下地,没想到程序开始跑了,芯片工作了。断电,重新上电,芯片仍不工作,用镊子短路后恢复正常。
  仔细查看复位电路,采用RC复位电路,3.3V接10K上拉电阻,再在复位引脚上放一只0.1uF电容。单片机是低电平复位,怀疑电容太小,上电后充电过快,低电平时间太短,单片机不复位,程序不正常。更换为1uF电容后,芯片正常工作。
  其实,也有太多不可思义的地方,公司一个系列的单片机都是用这个电路,从没出过问题,但这个就是不行,也许以后做复位电路真的要把电容选大一点,给复位留下充足的时间。
   都是复位电路惹的祸!

这个问题依然是个谜

顶顶呀

复位啊,这个要学习一下

你可以看下STM32里的复位功能模块,看你把代码烧录到那个存储里面了!复位模块里面说的很清楚!

学习

我们老师说可能是没下载到flash里!但是我还没去找原因。

太好了,刚刚碰到这种问题了,现在去试试,谢谢小编。

我以前也碰到过这个问题,复位电路很重要呀。

电容的值误差很大的,用1微法的电容不就得了

谢谢小编分享

其实是因为system_stm32f10x.c程序里面有这么一行:while((HSEStatus == 0) && (StartUpCounter != HSEStartUp_TimeOut));
这行的作用是判断在规定的时间内晶振是否正常起振,不正常则死循环。呵呵,很低级的写法吧。所以,产品中,不正常起振时,让MCU自动软重启更可靠些。或者进入内部晶振模式再做判断。
而为什么小编加大电容就正常了呢,可以这样理解,假设第一次上电,程序开始跑了,但晶振在规定的时间内还没起振,然后死机了。短接一下复位电路,等于让程序重新开始跑,当然因为已经上电一段时间了,这时晶振也准备好了,可以正常运行。加大电容的作用也一样,上电后,先让晶振准备一段时间,复位电路才工作,这时程序跑到判断是否起振那段时,就不会死循环了。
当然,简单点的方法,直接在程序里把HSEStartUp_TimeOut的值改大些就好了。

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top