STM32 CubeIDE無法進行除錯的問題

2021-10-03 12:47:48 字數 2424 閱讀 8023

解決了由於乙個很容易忽視的細節最終導致系統配置存在錯誤造成stm32 cubeide無法進行除錯的問題;

在享受cubeide快速和便捷的服務之後,生成了乙個stm32的工程開始進行系統開發,一如既往的builddebug,就在開始進行除錯的時候,不幸發生了,main()函式很簡單,幾乎一窮二白,如下所示;

瞬間一頭霧水;

難道是**器壞了?

但是,換了**器依然如故。

難道是晶元壞了?

換了板子,依然如故。

那麼又會是什麼問題呢?於是冷靜下來,開始打斷點,發現進入hal_init函式之後,在執行完hal_mspinit函式直接就掛掉了;函式原型如下所示;

hal_statustypedef hal_init

(void

)

於是象徵性地開啟了hal_mspinit函式,

這個函式居然是空的,有點不可思議,你確定你不是在玩我?

/**

* @brief initialize the msp.

* @retval none

*/__weak void

hal_mspinit

(void

)

忽然思路一轉,不對,這個是弱定義,於是搜尋了一下整個工程。

關於weak,可以參考一下《c:attributeweak 的作用》

搜尋了整個工程,果然不出我所料,找到了多處定義,如下所示;

最終找到了罪魁禍首,__hal_afio_remap_swj_disable();,sw-dp和jtag-dp居然被禁用了,這就很難受了。於是直接將該函式__hal_afio_remap_swj_disable();注釋即可。

函式原型如下所示;

/**

* initializes the global msp.

*/void

hal_mspinit

(void

)

但是回想起來,我什麼也沒做,軟體就給我禁用掉了?進入cubemx,發現預設配置sysno debug模式,如下圖所示;

果然是大意失荊州,這裡使用swd需要選擇serial wire選項,最終重新生成**,發現問題解決了。

ide帶來傻瓜式便捷的同時,也埋下了很多坑,在這個過程中遮蔽了很多細節,雖然說沒有必要做到面面俱到,但是有必要去了解,這樣可以把握每乙個細節,當初makefile都是要手動一行一行擼出來,現在點幾下就搞定了,還是妙哉。

STM32CubeIDE入坑指南

stm32cubeide使用筆記 01 基礎說明與開發流程 stm32cubeide使用筆記 02 stm32cubemx配置與 生成 stm32cubeide使用筆記 03 使用st link除錯程式 stm32cubeide使用筆記 04 雜項記錄 要點 方法 技巧等等 stm32cubeide...

STM32CubeIDE 介紹及安裝

安裝官網位址 stm32cubeide是乙個多功能的整合開發工具,整合了truestudio和stm32cubemx,它是stm32cube軟體生態系統的一部分。stm32cubeide是乙個先進的c c 開發平台,具有stm32微控制器的ip配置,生成,編譯和除錯功能。它基於eclipse cdt...

STM32CubeIDE 多通道ADC DMA轉換

1 adc1引數設定如下,本歷程開啟了9路adc通道 2 設定dma 3 設定dma資料寬度,把資料寬度有預設的half word改為word,否則兩路的adc值會合併成乙個資料 採集 如下 user code begin header starttaskchecktemp uint32 t adc...