早就聽說過ARM的各種牛逼,可是一看那密密麻麻的引腳就退縮了,一直停留在單片機層次上。這次自己畫了一塊STM32芯片的PCB板,想自己學習一下。
芯片型號:STM32F103C8T6,Cortex-M3系列,支持ISP串口燒寫,支持單線調試SWD和JTAG接口。
封裝:LQFP48
原理圖如下:
設計時考慮以兩種方法燒寫程序:一、串口接口P4接TTL轉USB直接接電腦,用mcuisp軟件下載程序;二、SWD接口P5接某寶上購來的jlink ob ARM下載器,用SEGGER J-Link ARM軟件或keil下載。
焊接後發現SWD無法下載。
設備管理器中“通用串行總線控制器”下出現J-Link driver標識,J-Link Commander軟件能夠正常識別芯片,J-Flash軟件可以正常執行Target下Connect、Unsecure
chip等軟件,但執行Program或Auto(F7)命令時報錯:
-connecting....
--connected successfully,
--ERASING affecttd secttor.....
-ERROR:RAM check failed @ADDRESS 0x20000000
在網上查詢後,一般認爲是以下問題:
1、STM32芯片電源引腳電壓不夠
2、jlink下載線過長,干擾太大
3、復位腳被拉低
4、SEGGER J-Link ARM軟件版本過老
5、焊接問題與接線問題
6、BOOT0和BOOT1設置問題
7、PCB板上電路干擾
J-Link Commander軟件能夠正常識別芯片能正確識別芯片,說明接線和焊接沒有什麼問題。jlink ob ARM下載線長不到30cm。SEGGER J-Link ARM軟件版本V4.40。BOOT0和BOOT1都接100k接地。
反覆嘗試確定問題後,檢查芯片所有引腳,電源引腳和GND引腳電壓正常,正常時NRST引腳電壓爲2V左右,被拉低,重新檢查復位電路,發現復位電容C22 104電壓確實爲2V左右,網上有人將復位電阻R26調節至1K並調節復位電容C22。
去掉復位電容C22後,發現NRST引腳電壓仍爲2V左右,然後將復位電阻R2改爲470R,發現電壓升至3.3V,重新下載程序,發現回覆正常,反覆下載後,一切正常。