之前網上買了個STM32的最小系統開發板,由於最近換了筆記本,爲了測試重新搭建的開發環境是否能用,用st-link v2燒寫這塊開發板,發現居然提示
Reason: (4) No device found on target.
把板子側的管腳定義,st-link側的管腳定義,連接杜邦線的連通性都測了,居然還是不行,見鬼了。。。
上網查了下,有人說到買的一個開發板有類似的情況,客服讓他把BOOT0短接3.3V,再燒寫就可以工作了。嗯?BOOT0短接3.3V不是用於串口下載麼,SWD按理說可以無視BOOT0配置,這是什麼思路。測試了以下,居然還真的好用了,而且之後再用SWD燒錄,無需再短接3.3V和BOOT0。
好奇心被成功勾起,再次網上搜索,直到發現有人說了這樣一段話(特意把作者論壇id截圖了,以示敬意)
OK,這個應該就是正解了。板子裏燒的是出廠程序,我買了後沒有新燒錄(懶。。。買了有一年多。。。一直沒用。。。)。原來的程序不知道是什麼樣的,但是猜測應該是把SWD調試接口禁用了,這樣SWD的引腳就可以用作普通GPIO使用,這樣下載完第一次程序後,如果從flash啓動(BOOT0==0)則無法繼續使用SWD接口重新下載程序或者調試,BOOT0拉高,可以讓STM32從RAM啓動,這樣就可以重新使用SWD下載程序。後面由於我下載的程序裏使能了SWD接口,所以不用BOOT0拉高也可以燒寫。
OK,用CubeIDE測試一下猜測,禁掉SWD接口,燒錄,再次燒錄,復現了之前的問題,猜測正確。
更坑的一點是,現在CubeMX默認是把SWD調試關閉的(No Debug),這就導致如果沒注意這一點,燒進程序後,BOOT0拉低(STM32推薦的正常工作狀態),SWD再次燒寫就會失敗。