国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

STM32開發(fā)時HardFault錯誤的排查

這篇具有很好參考價值的文章主要介紹了STM32開發(fā)時HardFault錯誤的排查。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

STM32開發(fā)時HardFault錯誤的排查

本篇是 嵌入式開發(fā)-STM32硬件I2C驅(qū)動OLED屏 一文的擴展。
把相關的問題記錄一下,給遇到HardFault_Handler問題的朋友做個參考。

故障現(xiàn)象

做STM32開發(fā),經(jīng)常遇到HardFault錯誤,也就是程序不會正常運行,此時若停止程序運行,會發(fā)現(xiàn)跳轉(zhuǎn)到下面的程序段,并死循環(huán)運行,也就是著名的HardFault錯誤

void HardFault_Handler(void)
{
  /* USER CODE BEGIN HardFault_IRQn 0 */

  /* USER CODE END HardFault_IRQn 0 */
  while (1)
  {
    /* USER CODE BEGIN W1_HardFault_IRQn 0 */
    /* USER CODE END W1_HardFault_IRQn 0 */
  }
}

故障原因

常見故障有
1 數(shù)組越界
2 內(nèi)存溢出
3 堆棧溢出
4 數(shù)據(jù)類型出錯
等等

問題分析

在下圖處打斷點,等到運行到這個位置時會暫停,如下圖:
void hardfault_handler(void),嵌入式開發(fā),stm32,單片機,嵌入式硬件,arm開發(fā),mcu

在Call Stack Window頁面,可以看到如下信息:
void hardfault_handler(void),嵌入式開發(fā),stm32,單片機,嵌入式硬件,arm開發(fā),mcu

箭頭所指,就是進入HardFault_Handler之前的函數(shù)。
這個調(diào)試窗口展示的是從main開始運行時,逐次調(diào)用函數(shù)的一個過程,
下圖就是兩個函數(shù)循環(huán)調(diào)用,但還沒有堆棧溢出的情況,發(fā)展下去,肯定是堆棧溢出。
檢查相關代碼,可以發(fā)現(xiàn)問題。
void hardfault_handler(void),嵌入式開發(fā),stm32,單片機,嵌入式硬件,arm開發(fā),mcu

void oled_write_onebyte(u8 data, u8 cmd)
{
  u32 ret;
  ret = HAL_I2C_Mem_Write(&hi2c2, OLED_ADDR, 0, I2C_MEMADD_SIZE_8BIT, &data, 1, 1000);
  if(ret!=0)
  {
    oled_init();
    OLED_DisPlay_Off();
    HAL_Delay(10);
    OLED_DisPlay_On();
  }
}

在oled_init()這個函數(shù)中,調(diào)用了oled_write_onebyte()這個函數(shù),但是當oled_write_onebyte函數(shù)出錯時,又會調(diào)用oled_init這個函數(shù),于是形成嵌套,最終是堆棧資源耗完,溢出,然后進HardFault_Handler。
可以改為

If(ret!=0)
	i2c_err_flag = 1;

然后在主循環(huán)中,操作i2c相關函數(shù)時,檢查i2c_err_flag的值,再進行相關處理即可。文章來源地址http://www.zghlxwxcb.cn/news/detail-723810.html

到了這里,關于STM32開發(fā)時HardFault錯誤的排查的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權(quán),不承擔相關法律責任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經(jīng)查實,立即刪除!

領支付寶紅包贊助服務器費用

相關文章

  • stm32cube出現(xiàn)Hardfault的調(diào)試方法(emwin死機)

    stm32cube出現(xiàn)Hardfault的調(diào)試方法(emwin死機)

    在STM32芯片開發(fā)中,當程序運行時出現(xiàn)HardFault異常,通常是由于以下原因引起的: 程序中出現(xiàn)了無效的指令,比如指向不存在的內(nèi)存地址或未初始化的指針; 棧溢出,導致程序無法正常運行; 部分寄存器值異常,例如SP(棧指針)、PC(程序計數(shù)器)、LR(鏈接寄存器)等;

    2024年02月07日
    瀏覽(25)
  • JAVA開發(fā)(記一次504 gateway timeout錯誤排查過程)

    JAVA開發(fā)(記一次504 gateway timeout錯誤排查過程)

    一、問題與背景: 最近在發(fā)布一個web項目,在測試環(huán)境都是可以的,發(fā)布到生產(chǎn)環(huán)境通過IP訪問也是可以的,但是通過域名訪問就出現(xiàn)504 gateway timeout。通過postman去測試接口也是一樣。ip和端口都可以通,域名卻不行,百思不得其解。通過一頓百度搜索,解析說通過nginx配置文

    2024年02月11日
    瀏覽(31)
  • STM32 I2C OVR 錯誤

    STM32 I2C OVR 錯誤

    STM32 I2C 用作從機時,開啟如下中斷并啟用 callback 回調(diào)函數(shù)。 每一次復位后,從機都可以正常觸發(fā)地址匹配中斷ADDR,之后在該中斷的回調(diào)函數(shù)中啟用接收中斷去收取數(shù)據(jù)時,卻無法進入RXNE中斷,而是觸發(fā)了 OVR 錯誤中斷。 通過簡化代碼,棄用庫函數(shù),改用寄存器操作發(fā)現(xiàn)可

    2024年02月15日
    瀏覽(16)
  • [STM32] - STM32F407VET6使用STM32CubeMX配置FatFs,以及掛載時返回03錯誤碼問題的解決

    [STM32] - STM32F407VET6使用STM32CubeMX配置FatFs,以及掛載時返回03錯誤碼問題的解決

    為測試新買的開發(fā)板TF卡讀寫是否正常,使用STM32CubeMX(后簡稱CubeMX)進行代碼構(gòu)建。生成代碼后燒錄測試,發(fā)現(xiàn)在掛載TF卡時無法成功,返回值為錯誤3( FR_NOT_READY )。經(jīng)排查后問題已解決,遂記錄配置過程供大家參考,并講解掛載時返回錯誤3的解決方式。 ①為了輸出TF卡(

    2024年02月22日
    瀏覽(35)
  • STM32的UART檢測到上溢錯誤、一直進中斷

    STM32的UART檢測到上溢錯誤、一直進中斷

    做項目的時候,發(fā)現(xiàn)程序莫名的就會死掉,因為采用了串口通信,需要不斷的去接收數(shù)據(jù),而且頻率相對較快。 用JLink進行硬件調(diào)試,發(fā)現(xiàn)死在了串口中斷里面,不停的進入中斷,查看寄存器狀態(tài),發(fā)現(xiàn) ORE控制位被使能 ,查閱資料后發(fā)現(xiàn)是檢測到 上溢錯誤 ,才導致的這種問

    2024年02月12日
    瀏覽(16)
  • stm32通過STM32 ST-LINK Utility 下載程序,由于程序錯誤,造成芯片無法連接,解決辦法

    stm32通過STM32 ST-LINK Utility 下載程序,由于程序錯誤,造成芯片無法連接,解決辦法

    1 安裝 STM32 ST-LINK Utility 2 打開 3 沒有正確連接st-link 4 沒有正確連接芯片 5 芯片被讀保護,防止盜版 6 解除讀保護功能后 7 下載程序 8 下載中 9 下載成功 10 . 由于程序錯誤,造成芯片無法連接 請RST鍵接地,啟動連接,3秒鐘后,松開就能進入寫程序狀態(tài).

    2024年02月09日
    瀏覽(23)
  • stm32在SDIO模式下SD寫入錯誤的問題

    stm32在SDIO模式下SD寫入錯誤的問題

    1、問題描述 使用FAT32 f_write 多次執(zhí)行寫操作時,會報FR_DISK_ERR錯誤,而且是剛開始寫不報錯,寫幾次后會一直報錯。 設斷點跟蹤到HAL_SD_WriteBlocks中,在調(diào)用SDMMC_CmdWriteMultiBlock時,會報SDMMC_ERROR_TX_UNDERRUN,意思 是Transmit FIFO underrun 2、原因分析 如下圖所示,SDMMC開始寫操作時,首

    2023年04月24日
    瀏覽(31)
  • 解決keil5.38編譯stm32報四個錯誤問題

    解決keil5.38編譯stm32報四個錯誤問題

    ?以上為錯誤截圖,一下為錯誤信息 Start/core_cm3.c(445): error: non-ASM statement in naked function is not supported ? uint32_t result=0; ? ^ Start/core_cm3.c(442): note: attribute is here uint32_t __get_PSP(void) __attribute__( ( naked ) ); ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ^ Start/core_cm3.c(465): error: paramet

    2024年02月08日
    瀏覽(212)
  • Keil編譯STM32工程,提示__align(4)處語法錯誤

    Keil編譯STM32工程,提示__align(4)處語法錯誤

    好久沒有用Keil編程,因為別人的代碼是用Keil寫的,所以又得安裝起來,編譯時遇到__align(4)的錯誤提示。 這個問題主要是編譯器版本的問題,默認使用的是v6.19版本的編譯器,而工程原來使用的是v5版本的,兩個編譯器的指令有差別,這個可以在官方說明文檔里可以看到。 如

    2024年03月16日
    瀏覽(45)
  • STM32開發(fā) | Clion搭建STM32開發(fā)環(huán)境

    STM32開發(fā) | Clion搭建STM32開發(fā)環(huán)境

    做嵌入式開發(fā)的人對STM32這個平臺應該都是非常熟悉的,在國內(nèi)尤其流行,很多產(chǎn)品里面都是基于這個平臺做的方案。多數(shù)人在開發(fā)STM32的時候用的都是 Keil 這個老牌IDE,很大一部分原因是因為大多數(shù)人最初是從51單片機學習過來的,51就是基于Keil去開發(fā)的,然后遷移到STM32的

    2023年04月12日
    瀏覽(25)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領取紅包,優(yōu)惠每天領

二維碼1

領取紅包

二維碼2

領紅包