我們有時(shí)候會(huì)碰到各種問(wèn)題導(dǎo)致STM32或者STM8的程序突然就下載不進(jìn)去板子了。可以按照以下步驟來(lái)解決。
一、下載方法步驟:
- 1、將板子供電全部斷開(kāi),這里包括3.3V電源供電和JLINK等所有能給開(kāi)發(fā)板供上電的設(shè)備全斷開(kāi)。
- 2、找到BOOT0引腳,將BOOT0拉高。
??方法:在板子上找一個(gè)高電平引腳,手動(dòng)用導(dǎo)線將BOOT0連接到該引腳上即可。
??(注意:我的STM32板子供電是3.3V的,所以我找了一個(gè)3.3V的引腳,用導(dǎo)線連接到了BOOT0上,千萬(wàn)別弄錯(cuò)了,電平接高了不小心可是要燒壞板子的?。?/em>
- 3、BOOT0拉高以后,保持這個(gè)姿勢(shì)不要?jiǎng)樱?strong>打開(kāi)電源,重新給板子上電。
- 4、插上JLink或者STLink,下載程序。一般這次肯定可以下載進(jìn)去了。下載完成以后,就可以斷開(kāi)BOOT0了,讓他恢復(fù)低電平。
OK到這里就全部完成了,板子肯定也回復(fù)正常了,繼續(xù)嗨吧。
二、上述方法原因解釋
開(kāi)發(fā)板默認(rèn)JTAG和SWD接口都是打開(kāi)的,BOOT0是低電平,當(dāng)把BOOT0置高時(shí),給板子上電,板子啟動(dòng)的時(shí)候程序會(huì)卡住,也就是內(nèi)部flash的程序并未執(zhí)行,這個(gè)時(shí)候SW和JTAD接口都是出于默認(rèn)打開(kāi)的狀態(tài)。然后下載一個(gè)不關(guān)閉JTAG或者SW接口的程序,覆蓋之前flash中的程序就好了。
所以先將板子供電全部斷開(kāi)(這里包括3.3V電源供電和JLINK等所有能給開(kāi)發(fā)板供上電的設(shè)備全斷開(kāi)),再將開(kāi)發(fā)板的BOOT0拉高,重新給開(kāi)發(fā)板上電,把程序中關(guān)閉JTAG或者SW的程序刪掉,然后下載到開(kāi)發(fā)板中,程序下載完成就好了。
三、SWD和JTAG被關(guān)閉原因
正搞板子發(fā)現(xiàn)程序下載不進(jìn)去了,到處查找原因,發(fā)現(xiàn)自己在程序中不小心把STM32的SWD和JTAD接口都給關(guān)了,如下就是關(guān)掉這兩個(gè)接口的兩句程序:
GPIO_PinRemapConfig(GPIO_Remap_SWJ_JTAGDisable,ENABLE);//關(guān)掉JTAG,不關(guān)SW
GPIO_PinRemapConfig(GPIO_Remap_SWJ_Disable, ENABLE);//關(guān)掉SW
所以,當(dāng)程序跑起來(lái),兩句執(zhí)行完以后,兩個(gè)接口都關(guān)了,然后程序就再也下載不進(jìn)去了。~~~
想要恢復(fù)正常,我們需要做的事就是想辦法打開(kāi)這兩個(gè)接口中的任意一個(gè),也就是下載一套不關(guān)閉程序下載接口的代碼到板子中。
所以,我們要么將程序中上述語(yǔ)句刪掉第二句,只保留第一句,重新編譯,也就是只關(guān)閉JTAG,打開(kāi)SW,要么重新找一個(gè)不關(guān)閉JTAG或者SW接口的代碼重新下載到板子中即可。
|