問題原因:
程式卡死在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 沒...