日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

STM32硬件错误HardFault_Handler的处理方法

發(fā)布時(shí)間:2025/6/15 编程问答 20 豆豆
生活随笔 收集整理的這篇文章主要介紹了 STM32硬件错误HardFault_Handler的处理方法 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

在用KeilSTM32的程序進(jìn)行仿真時(shí)程序有時(shí)會跑飛,停止仿真程序會停在HardFault_Handler函數(shù)里的死循環(huán)while(1)中。這說明STM32出現(xiàn)了硬件錯(cuò)誤。



???? ???STM32出現(xiàn)硬件錯(cuò)誤可能有以下原因:

???? ???(1)數(shù)組越界操作;

????????(2)內(nèi)存溢出,訪問越界;

???? ???(3)堆棧溢出,程序跑飛;

???? ???(4)中斷處理錯(cuò)誤;

???? ???遇到這種情況,可以通過以下2種方式來定位到出錯(cuò)代碼段。


方法1

??????1.1在硬件中斷函數(shù)HardFault_Handler里的while(1)處打調(diào)試斷點(diǎn),程序執(zhí)行到斷點(diǎn)處時(shí)點(diǎn)擊“STOP”停止仿真。



??????1.2?Keil菜單欄點(diǎn)擊“View”——“Registers Window”,在寄存器查看窗口查找R14(LR)的值。如果R14(LR) = 0xFFFFFFE9,繼續(xù)查看MSP(主堆棧指針)的值,如果R14(LR) = 0xFFFFFFFD,繼續(xù)查看PSP(進(jìn)程棧指針)的值。我的程序R14(LR) = 0xFFFFFFF9,接下來以此為例。



??????1.3?Keil菜單欄點(diǎn)擊“View”——“Memory Windows”——“Memory1”,在“Address”地址欄中輸入MSP的值:0x20001288,然后在對應(yīng)的行里找到地址。地址一般以0x08開頭的32位數(shù)。本例中,地址為0x08003CB9



??????1.4?Keil菜單欄點(diǎn)擊“View”——“Disassembly Window”,在“Disassembly”窗口中右擊,在下拉菜單中選擇“Show Disassemblyat Address...”。在彈出框“Show Code atAdress”的地址框中輸入地址0x08003CB9進(jìn)行搜索,然后就會找到相對應(yīng)的代碼。這里的代碼就是進(jìn)入循環(huán)中斷之前的情況。仔細(xì)查看附近區(qū)域的相關(guān)代碼來排查錯(cuò)誤具體原因。

?


方法2

??????2.1在硬件中斷函數(shù)HardFault_Handler里的while(1)處打調(diào)試斷點(diǎn),程序執(zhí)行到斷點(diǎn)處時(shí)點(diǎn)擊“STOP”停止仿真。

?

??????2.2?Keil菜單欄點(diǎn)擊“View”——“Call Stack Window”彈出“Call Stack + Locals”對話框。然后在對話框中右鍵選擇“Show Caller Code”,就會跳轉(zhuǎn)到出錯(cuò)之前的函數(shù)處,仔細(xì)查看這部分函數(shù)被調(diào)用或者數(shù)組內(nèi)存使用情況。

總結(jié)

以上是生活随笔為你收集整理的STM32硬件错误HardFault_Handler的处理方法的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。