STlink无法下载?解决过程记录。

先分析一波

现象

stlink直接下载失败,要么no target connected,要么internal command error,要么stlink connect error。

设备管理器里,stlink是黑色,运行正常。说明电脑的stlink驱动正常。

按住复位键,下载,1秒松开,下载成功,说明stlink本身没问题。问题在stm32。

IO口接LED,亮度非常微弱,闪烁频率不正常。

一直按住复位键,keil就能检测并连接到stlink。

猜测

有可能是stm32进入了睡眠模式

也可能是占用了PC13导致的,听说PC13是啥电源端口,我没管。

可能是板子中的芯片写保护了,可能是因为电压不稳的问题,回想一下,这次故障就是从连接一个电路图开始的。

排查

关于在keil里的那些各种设置更改,比如改为under reset啊,依旧没用。

还有什么SW口被占用,c8t6调试口就是PA13和14。额,没被占用。

重启,重新拔插之类的不用说了,没用。

用Utility,更新stlink固件,不过要一直按住复位键,更新后依旧无用。

最后,想到了可能是读保护,因为连接那个电路的时候,wifi模块的RST引脚接到PB8又接到了VCC,由于我用的面包板,这里我就用一个1k电阻直接接到了面板板的正极,面包板本身的电就来自stm32的输出脚,这一下又直接经过电阻回到了PB8,也许是电流过大?我猜芯片就自动开启了读保护。我的就是这样。

我的解决办法

总之,成功解决了,先接好usb转串口(额,搞了一天搞混了,usb转串口好像不用,哎呀,不管了),打开Utility,一直按住复位键,快速按那个插头图标,连接到target后,马上点击橡皮擦,擦除stm32所有存储。最后拔掉stlink重新插,问题解决。

 

再次失败

就在我以为成功之时,准备睡觉,又发现擦除后只能下载一次,后面又回到了解放前,服了……

又尝试了重映射配置,依旧没用。

boot解释

将boot配置为1,从系统存储器(ROM)启动,STM32在出厂时,由ST厂家在这个区域内部预置了一段BootLoader,也就是我们常说的ISP程序,无法修改,我们选用这种启动模式时,是为了从串口下载程序,因为在厂家提供的BootLoader中,提供了串口下载程序的固件,可以通过这个BootLoader将程序下载到系统的Flash中。

BOOT1=x   BOOT0=0   从用户闪存启动,这是正常的工作模式。
BOOT1=0   BOOT0=1   从系统存储器启动,这种模式启动的程序功能由厂家设置。
BOOT1=1   BOOT0=1   从内置SRAM启动,这种模式可以用于调试。

第一种启动方式是最常用的用户FLASH启动,正常工作就在这种模式下,STM32的FLASH可以擦出10万次,所以不用担心芯片哪天会被擦爆!

第二种启动方式是系统存储器启动方式,即我们常说的串口下载方式(ISP),不建议使用这种,速度比较慢。STM32 中自带的BootLoader就是在这种启动方式中,如果出现程序硬件错误的话可以切换BOOT0/1到该模式下重新烧写Flash即可恢复正常。

第三种启动方式是STM32内嵌的SRAM启动。该模式用于调试。

stlink下载

当boot0设为1时,keil可以检测到SWDIO,用stlink下载好后,将跳线帽接回原状,即boot0和boot1都为0,然后按复位,程序运行。但是keil又无法连接到SWDIO。回到起点了。。。。。。也可以用线将boot0中间的针脚引导3.3正极与负极,与跳线帽一样现象。

串口下载

再尝试用flymcu串口下载,usb转串口的RX接到PA9,TX接到PA10,boot0置1,flymcu选择 DTR 的低电平复位,RTS 高电平进 BootLoader,下载成功,但想开始运行得boot0置0,于是又连接不到SWDIO。失败。

下午四点,即使是boot0置1也无法识别SWDIO,无法下载。观察到reset复位键松动。

补发的stm32到了,依旧无法连接到swdio,万用表测得原来的stm32未复位时复位键电位为0.4V,新到的stm32未按下时复位键电位为2V,不过,两个stm32按下复位键都会变为低电平,一直不松就一直为低电平2V。

发现stlink灯无法亮起。也许是stlink坏了,检测stlink晶振,stlink插入电脑测得晶振引脚电压0.06v,断电测电阻。为无穷大。

最后插上单独供电。诶,一下就好了,stlink灯常亮,连接SWDIO成功,下载程序成功,过了一会儿,stlink蓝灯开始闪烁,再次连接不上SWDIO,额……,我猜应该是电压问题,等我研究一下,现在基本断定,问题出在stlink供电上,并且之前万用变测得stm32的VCC和GND之间只有2v,单独供电后就有3.28v。

总的来说,虽然问题还没解决,但过程中也学到了很多知识。我将进一步尝试解决。

将供电线和下载线的usb口对换了一下,再次正常,stlink也不闪烁。

下载进程序后,拔掉stlink,程序依然能运行。

突然发现…..,从开始外接电源那里,BOOT0是置1的,我没注意到,置0后,又连接不到SWDIO了,cao……,至少置1能下载了,哎。

吃完饭回来,重新插上。欸。又可以了,stlink蓝灯常亮,keil里检测到SWDIO。而且boot都为0,yes,解决。

物联沃分享整理
物联沃-IOTWORD物联网 » STlink无法下载?解决过程记录。

发表评论