STM32 編譯后不能運行的幾個(gè)原因
二、仿真調試時(shí)沒(méi)有問(wèn)題,但通過(guò)JLink調試時(shí)出現如下提示:
"Flash Download Failed-"Cortex-M3" ,則可能的原因是:Option->Debug->Use Driver for Flash Programming->Setting->Flash Download->Programming Algotithm 或 Option->Utilities->Use Driver for Flash Programming->Setting->Flash Download->Programming Algotithm沒(méi)有添加相應類(lèi)型的芯片FLASH說(shuō)明,一般在這兩個(gè)選項卡中分別點(diǎn)擊ADD,添加STM32F10x High-density Flash 即可。
三、調試時(shí),程序總是停止在LDR
默認startup_stm32f10x_hd.s中 Stack_Size
四、調試時(shí),程序停止在HardFault_Handler的問(wèn)題(引用網(wǎng)上的總結)
原因有兩個(gè),堆棧溢出和數組越界,很不幸的是這兩種情況都被我碰到了。
startup_stm32f10x_md.s中修改“Stack_Size
“Stack_Size EQU
定義了一個(gè)數組ya[10],定義了一個(gè)計數變量count,由于沒(méi)有初始化count,導致count的值一開(kāi)始就大于數
組邊界,導致數組越界,初始化count=0后,程序正常。
我在調試的過(guò)程中,定義了兩個(gè)結構體的指針變量,然后對這兩個(gè)指針變量賦值,在執行第一個(gè)賦值語(yǔ)句的時(shí)候,程序停止在HardFault_Handler,最后的解決辦法是將結構體的指針變量改為普通變量,賦值過(guò)程不再出現意外。
評論