STM32如何快速定位HardFault異常

2021-10-02 03:08:56 字數 984 閱讀 8881

stm32程式設計中,hardfault是比較常見的異常,如何快速定位問題在除錯時非常重要。

開啟debug模式,全速執行,如果mdk在遇到hardfault異常時沒有自動停止,則手動按下stop,這時軟體自動跳轉到hardfault中斷的while處。

返回位址

psrn為此時sp的值。

lr(鏈結暫存器)用於函式或子程式呼叫時返回位址的儲存。

所以在處理器發生異常,又不知道異常**在什麼位置時,首先要找的是此時堆疊中儲存的lr值為多少。

cortex-m處理器復位後,預設使用msp堆疊,如果沒有通過control特殊暫存器進行控制,psp棧指標將會是0,這裡msp的值為0x200005c0,這是此時棧頂的位址,在memory window中輸入msp的值,定位到該堆疊記憶體

從0x200005c0往高位址數第5個字的內容就是處理器在進入異常之前lr的值0x08000835,即斷點位址。

這時可以從disassembly視窗中直接定位到斷點處,在disassembly視窗上滑鼠右擊,選擇show disassembly at address

這裡是因為將null指標的判斷直接注釋掉了,導致訪問了null指標觸發了hardfault異常,有時候問題並沒有這麼簡單,但是只要找到與問題相關的**,一步步往上查詢總能找到問題的根源。

STM32 快速上手SPI

基本的部分前文 stm32 spi 已經介紹過了,這裡只記怎麼用。stm32f103zet6的三個spi的引腳分別為 spi1在apb1時鐘下,spi2和spi3在apb2時鐘下。void spi i2s deinit spi typedef spix void spi init spi typed...

stm32如何執行軟復位 STM32啟動檔案

我們日常使用的嵌入式應用程式開發中都是編寫c c 語言,我們平時編輯乙個工程的話,只用從main函式開始編輯,微控制器程式也是從這個函式開始進行執行的。但是微控制器上電後是如何尋找到並執行main函式的呢?我們其實都會在心裡有乙個答案 啟動檔案 還記得我們當初配置第乙個stm32工程的時候在工程中新...

STM32 快速上手PWM輸出

在前面文章 stm32 一文搞懂通用定時器捕獲 比較通道 已經詳細介紹了輸入stm32的捕獲 比較通道,這邊文章來寫比較通道的pwm的應用。初始化io口為復用功能輸出 重對映相關引腳為pwm輸出 初始化定時器 主要是配置arr和psc 初始化通道x輸出比較引數 使能通道x預裝載暫存器 使能定時器 修...