在stm32程式開發過程中,原本**正常,為了實現接下來的功能,增加了乙個結構體陣列後,除錯過程中遇到32宕機的情況。後來通過逐步排查發現注釋了結構體陣列,程式執行正常,於是將結構體陣列換成若干個陣列替代,發現又出現了問題,這次是在串列埠除錯過程中,顯示了莫名其妙的結果。
我們結構體及結構體定義陣列定義如下:
#define max 100
struct m_data
;m_data data[max]
;
想要替換的陣列定義如下:
float data[max]=;
float temp[max]=;
u8 compute_flag[max]
=;
由於每次問題的出現都是在我們定義了乙個陣列(無論是結構體陣列還是普通陣列)後出現的,我就開始思考是不是陣列定義的有什麼問題呢,乙個陣列除了型別是我們自己定義的以外,還有乙個引數是我們定義的,沒錯就是陣列的大小。
後來,經過在網上查資料可以發現stm32的棧區大小只有1024kb,在我們stm32的啟動檔案中我們可以看到棧區大小的定義:
當我們定義上述陣列時,由於占用記憶體空間過大,導致棧無法存放我們的陣列和臨時變數,所以出現了宕機和莫名其妙輸出的情況。
將陣列大小變小一點即可,例如:將陣列大小修改為20
#define max 20
float data[max]=;
float temp[max]=;
u8 compute_flag[max]
=;
STM32 軟體重啟導致宕機的情況分析
在乙個專案中需要用到看門狗和軟體重啟,但是在工作過程中發現存在一種情況會導致stm32宕機,經過分析是軟體重啟過程中復位訊號被外部電路強制拉高,無法在復位後4個時鐘拉低復位管腳,因此,將該復位引腳斷開和外部連線即可正常執行。現將該除錯記錄如下。看門狗餵狗週期初始化為10s。測試了四種情況 1 res...
STM32標準庫的介紹以及使用
因為基於cortex系列晶元採用的核心都是相同的,區別主要為核外的片上的差異 片上外設主要有晶元生產商來定 這些差異卻導致軟體在同核心,不同外設的晶元上移植困難。為了解決不同晶元廠商生產的cortex微控制器軟體的相容性問題,arm與晶元廠商建立了cmsis標準。cmsis層位於硬體層和使用者層之間...
STM32 緩上電導致宕機的問題分析
3.解決方法 在一些供電比較特殊的場合,如太陽能供電,電池供電等,可能會導致穩壓晶元輸出的3.3v 上公升緩慢。在這種供電情況下,會導致mcu宕機,讓人感覺的程式沒有跑起來。在此情況下,mcu 為什麼跑不起來呢,筆者以stm32l072 晶元為例,具體的分析一下。我們先了解 stm32電源控制中有三...