自制STM32F4最小系统烧写出现cannot reset error的解决方法

来源:互联网 发布:全民淘宝客能挣钱吗 编辑:程序博客网 时间:2024/05/04 02:37

最近做了一个项目用到STM32F405RGT6,板子开始能够正常烧写,后来出现问题,总是提示:internal command error或者cannot reset target 等等错误。

1.一次尝试:开始怀疑是复位电路的问题,把复位电路电容104改成了10μf,然而并没有啥用。

2.二次尝试:上网查了相关问题的解决方法,说是因为目标板的芯片处于休眠的状态,在尝试连接目标板时候也会出现报错Internal command error Flash download failed target dll has been can的现象,解决办法是使目标板退出休眠,即按住reset键再下载程序,看到USB通讯灯闪后一小会儿(自己把握)后放开reset就能看到程序下载进去了,不行就多试几次,成功一次后面就正常了”,然而楼主画的最小系统并没有设置复位键/(ㄒoㄒ)/~~,另外看有些人采用这种方法也没有解决问题。但是芯片处于休眠状态这点是正确的,下面再详细谈。
3.三次尝试:因为是烧写不了程序,但原来的程序还能正常运行,因此楼主相信单片机还没挂(不信也得信啊)。于是从SWD接口找原因。这一下还真找到了点问题!楼主发现用万用表量Pin46:SWDIO跟Pin47:Vcap_2竟然会响,于是乎觉得是两个脚短接了。因为是自己焊的电路,觉得出现虚焊也算正常,于是用烙铁烫了一把这两个脚,重新测量万用表不响了。楼主以为万事大吉了。接下来程序能正常烧写了,楼主很兴奋,开始了愉快的仿真,突然,梦魇一般的cannot reset target再次跳出。楼主很慌,插拔仿真器和断电重新启动板子都不能解决问题,于是重新开始debug.
4.四次尝试:经过一系列仔细检查,发现还是Pin46:SWDIO跟Pin47:Vcap_2的问题,万用表测二者,仍然会响!我再次烫了一下这两个脚,又开始重复3中的问题,一遍又一遍的cannot reset target夹杂internal command error骤雨般袭来,敲打着楼主内心的脆弱。一个本该愉快的周日在凄风苦雨中熬到了第二天的凌晨。带着郁闷和不甘,楼主回到了宿舍。
5.五次尝试:今天早上,楼主有了新的发现。正常的46、47脚间阻值为MΩ级,但烧写不进去时万用表虽然响,但还是有60Ω阻值的!每次烫完46,47脚又恢复了正常。楼主非常郁闷,显然所有的引脚跟电路都接触良好,以前的片子能正常烧写……楼主不由地怀疑是芯片自身坏了!但是规律闪动的LED提醒着我不要轻易下结论。又是一个早上……

6.六次尝试:期间想了各种方法,想联系意法半导体的技术支持,没有电话未果。网上没有明确的答案,于是楼主开始了回忆,想到以前无意中的那几次尝试……如下图:


楼主想到曾经的板子对新的MCU做过全片擦出,于是抱着试试看的心态在第若干次烫引脚后来了次全片擦除。如下图所示,10几秒钟的等待换来一个期待已久的结果:换回上楼图中第二个Erase Sectors烧写模式,芯片可以正常擦除了!为了验证准确性,楼主进行了几十次的反复烧写,片子一切正常,并不出现原来烧写几次就不行的情况。7.最终结论:烧写不了的原因:单片机flash写保护了。解决方案:烙铁烫46,47脚,在单片机能够烧写的有限几次中进行全片Flash擦除,如上图所示。提醒大家全新的单片机最好要在开始的几次烧写中选择全片擦除!!另外在使用STM32F4的时候一定要注意Vcap和STM32F1Vss的重大区别!!Vcap接电容后接地,而Vss直接接地!楼主吃过亏!!

NVFR~J5)WD{P2EYH70NKC$D.png

_G_Y]V@XDP[K2)`A[@5`Y52.png

1 0
原创粉丝点击