stm32 debug時總是卡在B處

2021-10-08 15:55:05 字數 1275 閱讀 5036

問題原因:

程式卡死在b處說明有中斷沒有處理,導致程式進入中斷後無法跳出。

之後檢視程式發現,程式中定義了乙個中斷,但是之前一次偶然把中斷處理程式遮蔽了,導致沒有中斷處理函式

問題解決:

**卡死在systick_init()處

int main(void) }

/** * @brief us延時程式,10us為乙個單位

* @param

* @arg ntime: delay_us( 1 ) 則實現的延時為 1 * 10us = 10us

* @retval 無

*/void delay_us(__io u32 ntime)

/** * @brief 獲取節拍程式

* @param 無

* @retval 無

* @attention 在 systick 中斷函式 systick_handler()呼叫

*/void timingdelay_decrement(void)

}

閱讀**,發現中斷函式並未呼叫timingdelay函式

void timingdelay_decrement(void)

}

進入系統的中斷函式檔案:stm32f10x_it.c/h裡面,修改系統自帶的systick函式。這個函式要麼沒有宣告或是為空操作。這裡加入

定時延時裡的處理。即中斷後,全域性變數做個--處理即可。也即呼叫上圖的**。

在::stm32f10x_it.c裡修改如下:

新增外部的宣告:

extern void timingdelay_decrement(void);
修改這個函式: systick_handler,這是系統的關於systick_handler的中斷服務程式名,

在啟動檔案裡如:startup_stm32f10x_hd.s   有它的定義的名字。不要弄錯了。否則無法中斷處理。

void systick_handler(void)

以上,即定義配置好了systick定時器。如何使用呢?

很簡單。

delay_us(500);  即為延時500ms。

當然,使用前,需要先初始化:

systick_init();

否則無法使用並影響後續的程式執行,這個很重要,就像開啟了串列埠中斷,你不清標誌位,也同樣在接收字元後,cpu中斷在那裡,而不能繼續執行!。使用外設功能,需要初始化!

STM32 Debug無法新增斷點的解決方法

目錄 stm32 debug無法新增斷點的解決方法 1 run to main設定錯誤 2 generate assembler src file 設定錯誤 3 hex檔案命名錯誤 4 優化等級選擇錯誤 options debug選項中未設定 run to main 勾選後故障可排除。此外,燒寫器選...

stm32 非debug模式程式無法執行

最近負責乙個專案,用到stm32f4的一款高效能晶元。研發過程中遇到乙個很詭異的現象,前前後後折騰了兩三天,最後才搞定。由於是新手,經驗不足,排故過程很糾結 現象如下 2.通過jlink除錯程式,每次均正常執行。太詭異了!其次,考慮電源供電不穩定問題。通過萬用表測量各個模組電壓,發現電壓均正常值。那...

STM32 無法正常debug的解決方法

近日工程中遇到了stm32無法dubug 也無法正常執行的問題,現象如下 程式一直在反彙編中迴圈執行,無法將程式執行至main函式,更不用說斷點除錯了。檢視了網上的說法,可能的原因有 1 output 設定沒有選中 debug information 2 debug 選項 run to main 沒...