0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

STM32硬件錯誤的調(diào)試技巧

小麥大叔 ? 來源:小麥大叔 ? 作者:小麥大叔 ? 2022-07-21 14:39 ? 次閱讀

在用KeilSTM32的程序進(jìn)行仿真時程序有時會跑飛,停止仿真程序會停在HardFault_Handler函數(shù)里的死循環(huán)while(1)中。

這說明STM32出現(xiàn)了硬件錯誤。

4651ec2c-08a8-11ed-ba43-dac502259ad0.png

硬件錯誤中斷

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

數(shù)組越界操作;

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

堆棧溢出,程序跑飛;

中斷處理錯誤;

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

方法1:

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

466c27d6-08a8-11ed-ba43-dac502259ad0.png

示例

1.2 在Keil菜單欄點擊View——Registers Window,在寄存器查看窗口查找R14(LR)的值。

如果R14(LR) = 0xFFFFFFE9,繼續(xù)查看MSP(主堆棧指針)的值;如果R14(LR) = 0xFFFFFFFD,繼續(xù)查看PSP(進(jìn)程棧指針)的值;

我的程序R14(LR) = 0xFFFFFFF9,接下來以此為例。

467999d4-08a8-11ed-ba43-dac502259ad0.png

寄存器信息

1.3 在Keil菜單欄點擊“View”——“Memory Windows”——“Memory1”;

在“Address”地址欄中輸入MSP的值:0x20001288,然后在對應(yīng)的行里找到地址。

地址一般以0x08開頭的32位數(shù)。本例中,地址為0x08003CB9。

4691ad3a-08a8-11ed-ba43-dac502259ad0.png

內(nèi)存信息

1.4 在Keil菜單欄點擊View——Disassembly Window,在Disassembly窗口中右擊,在下拉菜單中選擇Show Disassemblyat Address...。

在彈出框Show Code atAdress的地址框中輸入地址0x08003CB9進(jìn)行搜索,然后就會找到相對應(yīng)的代碼。這里的代碼就是進(jìn)入循環(huán)中斷之前的情況。

仔細(xì)查看附近區(qū)域的相關(guān)代碼來排查錯誤具體原因。

46b206c0-08a8-11ed-ba43-dac502259ad0.jpg

方法2:

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

46d05efe-08a8-11ed-ba43-dac502259ad0.jpg

CallStack

2.2 在Keil菜單欄點擊View——Call Stack Window彈出Call Stack + Locals對話框。

然后在對話框中右鍵選擇Show Caller Code,就會跳轉(zhuǎn)到出錯之前的函數(shù)處,仔細(xì)查看這部分函數(shù)被調(diào)用或者數(shù)組內(nèi)存使用情況。

審核編輯 :李倩

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • STM32
    +關(guān)注

    關(guān)注

    2270

    文章

    10904

    瀏覽量

    356374
  • 硬件
    +關(guān)注

    關(guān)注

    11

    文章

    3341

    瀏覽量

    66263
  • 函數(shù)
    +關(guān)注

    關(guān)注

    3

    文章

    4333

    瀏覽量

    62700

原文標(biāo)題:簡單實用!STM32硬件錯誤的調(diào)試技巧

文章出處:【微信號:knifewheat,微信公眾號:小麥大叔】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。

收藏 人收藏

    評論

    相關(guān)推薦

    如何進(jìn)行硬件調(diào)試?

    硬件調(diào)試硬件系統(tǒng)設(shè)計、開發(fā)和制造過程中不可或缺的一環(huán),旨在對可能出現(xiàn)的問題進(jìn)行分析和解決。以下是進(jìn)行硬件調(diào)試的一般步驟和方法: 一、準(zhǔn)備階
    的頭像 發(fā)表于 11-10 10:17 ?726次閱讀
    如何進(jìn)行<b class='flag-5'>硬件</b><b class='flag-5'>調(diào)試</b>?

    socket編程中的錯誤處理技巧

    錯誤處理能夠確保程序在遇到異常情況時不會崩潰,而是能夠優(yōu)雅地處理問題。 提升用戶體驗 :通過適當(dāng)?shù)?b class='flag-5'>錯誤處理,可以給用戶提供清晰的錯誤信息,避免用戶感到困惑。 便于調(diào)試和維護(hù) :良好
    的頭像 發(fā)表于 11-01 17:47 ?878次閱讀

    第三篇-V1.5 TB6612電機(jī)pwm控制STM32智能小車 STM32F103C8T6單片機(jī)

    通過合理的硬件設(shè)計和詳細(xì)的視頻筆記介紹,硬件使用STM32F103主控資料多方便學(xué)習(xí),通過3萬字筆記、12多個小時視頻、20多章節(jié)代碼手把手教會你如何開發(fā)和調(diào)試。
    的頭像 發(fā)表于 08-12 18:29 ?1640次閱讀
    第三篇-V1.5 TB6612電機(jī)pwm控制<b class='flag-5'>STM32</b>智能小車 <b class='flag-5'>STM32</b>F103C8T6單片機(jī)

    開發(fā)攻略之STM32調(diào)試端口的映射

    最近有一個項目用到了STM32F103RB系列單片機(jī),由于引腳數(shù)量較少,不得不使用到了單片機(jī)的PB3和PB4兩個引腳。而這兩個引腳剛好又是STM32系列的JTAG調(diào)試引腳,如果要用于普通IO的功能
    的頭像 發(fā)表于 08-03 08:11 ?463次閱讀
    開發(fā)攻略之<b class='flag-5'>STM32</b><b class='flag-5'>調(diào)試</b>端口的映射

    說說硬件調(diào)試中發(fā)現(xiàn)的那些低級錯誤

    說說硬件調(diào)試中發(fā)現(xiàn)的那些低級錯誤 2024-07-03 11:47**·**一博高速先生 高速先生成員--周偉 最近遇到很多debug相關(guān)的咨詢,曾經(jīng)我們說過,我們做過的板子越多,遇到問題的概率也
    發(fā)表于 07-03 12:02

    說說硬件調(diào)試中發(fā)現(xiàn)的那些低級錯誤

    硬件調(diào)試中會經(jīng)常遇到各種意想不到的問題,有些調(diào)試花了幾個月,各種能想到的辦法都嘗試了,最后發(fā)現(xiàn)卻是一個非常低級的錯誤,有多低級?請看今天的內(nèi)文介紹。
    的頭像 發(fā)表于 07-03 12:00 ?354次閱讀
    說說<b class='flag-5'>硬件</b><b class='flag-5'>調(diào)試</b>中發(fā)現(xiàn)的那些低級<b class='flag-5'>錯誤</b>

    STM32F103用CAN調(diào)試器接到該板子后給其發(fā)消息,調(diào)試器會顯示總線數(shù)據(jù)錯誤的原因?

    項目里有個CAN收發(fā)相關(guān)的板子,用的是STM32F103芯片。在與上位機(jī)的CAN交互過程中經(jīng)常會出現(xiàn)通訊錯誤的情況,表現(xiàn)在上位機(jī)發(fā)送報文后沒有收到回復(fù)。用CAN調(diào)試器接到該板子后給其發(fā)消息,調(diào)
    發(fā)表于 05-27 07:42

    stm32f030的硬件i2c中斷方式讀寫數(shù)據(jù),為什么調(diào)試不出來?

    有沒有哪位大神用過stm32f030的硬件i2c中斷方式讀寫數(shù)據(jù)的?看文檔感覺可以用的,但是怎么就是調(diào)試不出來呢。
    發(fā)表于 05-11 08:02

    ucosiii的串口打印輸出遇到了硬件錯誤怎么解決?

    我練兩天調(diào)試了ucos-iii之前是應(yīng)為一些問題發(fā)現(xiàn)系統(tǒng)運(yùn)行錯誤,但是到了第二天打開工程從新編譯下載程序測試,發(fā)現(xiàn)一剛剛開始打印串口消息就出現(xiàn)了硬件錯誤(段
    發(fā)表于 04-24 06:03

    stm32cubeIDE移植的UCOSIII,定義float變量后進(jìn)入硬件錯誤怎么解決?

    如題:stm32cubeIDE移植的UCOSIII,STemwin,用的stm32407芯片,定義float變量后進(jìn)入硬件錯誤 之前是Keil5移植的時候也遇到了這個問題,然后是在啟動
    發(fā)表于 04-12 06:09

    stm32cubemx生成的can代碼,運(yùn)行調(diào)試顯示顯性位錯誤的原因?

    stm32cubemx生成的can代碼,運(yùn)行調(diào)試顯示顯性位錯誤,找不到原因,芯片是stm32f103z,求助各位。
    發(fā)表于 04-07 07:56

    用CUBE生成STM32H743工程,用iar編譯器進(jìn)入硬件錯誤是哪里的問題?

    最近在用CUBE 生成STM32H743工程,用iar編譯器進(jìn)入硬件錯誤,用MDK就沒問題,STM32H743只能用MDK嗎?
    發(fā)表于 04-07 06:07

    STM32 USART中斷與ADC DMA中斷沖突造成硬件錯誤的原因?

    開啟時會造成硬件錯誤HardFault_Handler?分開使用時沒有問題,USART中斷優(yōu)先級比DMA的高,有沒有人知道什么原因啊
    發(fā)表于 04-02 06:26

    stm32l051 hal庫如何使用硬件i2c從機(jī)?

    stm32l051 hal庫如何使用硬件i2c從機(jī),有沒有相關(guān)參考程序?,F(xiàn)在調(diào)試過程中一直進(jìn)入AF錯誤,是什么原因?qū)е碌模?/div>
    發(fā)表于 03-27 08:24

    STM32F429使用外部SPI flash,只要執(zhí)行Bitmap::cache(id)就進(jìn)入硬件錯誤怎么解決?

    ,就進(jìn)入硬件錯誤。 執(zhí)行Bitmap::cacheAll()函數(shù)也會進(jìn)入硬件錯誤。 正常執(zhí)行cache函數(shù)之后會進(jìn)入TouchGFXHAL::blockCopy()函數(shù),然后執(zhí)行自定義
    發(fā)表于 03-27 07:39