STM32开发时HardFault错误的排查

这篇具有很好参考价值的文章主要介绍了STM32开发时HardFault错误的排查。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

STM32开发时HardFault错误的排查

本篇是 嵌入式开发-STM32硬件I2C驱动OLED屏 一文的扩展。
把相关的问题记录一下,给遇到HardFault_Handler问题的朋友做个参考。

故障现象

做STM32开发,经常遇到HardFault错误,也就是程序不会正常运行,此时若停止程序运行,会发现跳转到下面的程序段,并死循环运行,也就是著名的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 数组越界
2 内存溢出
3 堆栈溢出
4 数据类型出错
等等

问题分析

在下图处打断点,等到运行到这个位置时会暂停,如下图:
void hardfault_handler(void),嵌入式开发,stm32,单片机,嵌入式硬件,arm开发,mcu

在Call Stack Window页面,可以看到如下信息:
void hardfault_handler(void),嵌入式开发,stm32,单片机,嵌入式硬件,arm开发,mcu

箭头所指,就是进入HardFault_Handler之前的函数。
这个调试窗口展示的是从main开始运行时,逐次调用函数的一个过程,
下图就是两个函数循环调用,但还没有堆栈溢出的情况,发展下去,肯定是堆栈溢出。
检查相关代码,可以发现问题。
void hardfault_handler(void),嵌入式开发,stm32,单片机,嵌入式硬件,arm开发,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()这个函数中,调用了oled_write_onebyte()这个函数,但是当oled_write_onebyte函数出错时,又会调用oled_init这个函数,于是形成嵌套,最终是堆栈资源耗完,溢出,然后进HardFault_Handler。
可以改为

If(ret!=0)
	i2c_err_flag = 1;

然后在主循环中,操作i2c相关函数时,检查i2c_err_flag的值,再进行相关处理即可。文章来源地址https://www.toymoban.com/news/detail-723810.html

到了这里,关于STM32开发时HardFault错误的排查的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • stm32cube出现Hardfault的调试方法(emwin死机)

    在STM32芯片开发中,当程序运行时出现HardFault异常,通常是由于以下原因引起的: 程序中出现了无效的指令,比如指向不存在的内存地址或未初始化的指针; 栈溢出,导致程序无法正常运行; 部分寄存器值异常,例如SP(栈指针)、PC(程序计数器)、LR(链接寄存器)等;

    2024年02月07日
    浏览(40)
  • JAVA开发(记一次504 gateway timeout错误排查过程)

    一、问题与背景: 最近在发布一个web项目,在测试环境都是可以的,发布到生产环境通过IP访问也是可以的,但是通过域名访问就出现504 gateway timeout。通过postman去测试接口也是一样。ip和端口都可以通,域名却不行,百思不得其解。通过一顿百度搜索,解析说通过nginx配置文

    2024年02月11日
    浏览(42)
  • STM32 I2C OVR 错误

    STM32 I2C 用作从机时,开启如下中断并启用 callback 回调函数。 每一次复位后,从机都可以正常触发地址匹配中断ADDR,之后在该中断的回调函数中启用接收中断去收取数据时,却无法进入RXNE中断,而是触发了 OVR 错误中断。 通过简化代码,弃用库函数,改用寄存器操作发现可

    2024年02月15日
    浏览(32)
  • [STM32] - STM32F407VET6使用STM32CubeMX配置FatFs,以及挂载时返回03错误码问题的解决

    为测试新买的开发板TF卡读写是否正常,使用STM32CubeMX(后简称CubeMX)进行代码构建。生成代码后烧录测试,发现在挂载TF卡时无法成功,返回值为错误3( FR_NOT_READY )。经排查后问题已解决,遂记录配置过程供大家参考,并讲解挂载时返回错误3的解决方式。 ①为了输出TF卡(

    2024年02月22日
    浏览(67)
  • STM32的UART检测到上溢错误、一直进中断

    做项目的时候,发现程序莫名的就会死掉,因为采用了串口通信,需要不断的去接收数据,而且频率相对较快。 用JLink进行硬件调试,发现死在了串口中断里面,不停的进入中断,查看寄存器状态,发现 ORE控制位被使能 ,查阅资料后发现是检测到 上溢错误 ,才导致的这种问

    2024年02月12日
    浏览(56)
  • stm32通过STM32 ST-LINK Utility 下载程序,由于程序错误,造成芯片无法连接,解决办法

    1 安装 STM32 ST-LINK Utility 2 打开 3 没有正确连接st-link 4 没有正确连接芯片 5 芯片被读保护,防止盗版 6 解除读保护功能后 7 下载程序 8 下载中 9 下载成功 10 . 由于程序错误,造成芯片无法连接 请RST键接地,启动连接,3秒钟后,松开就能进入写程序状态.

    2024年02月09日
    浏览(68)
  • stm32在SDIO模式下SD写入错误的问题

    1、问题描述 使用FAT32 f_write 多次执行写操作时,会报FR_DISK_ERR错误,而且是刚开始写不报错,写几次后会一直报错。 设断点跟踪到HAL_SD_WriteBlocks中,在调用SDMMC_CmdWriteMultiBlock时,会报SDMMC_ERROR_TX_UNDERRUN,意思 是Transmit FIFO underrun 2、原因分析 如下图所示,SDMMC开始写操作时,首

    2023年04月24日
    浏览(43)
  • 解决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日
    浏览(57)
  • Keil编译STM32工程,提示__align(4)处语法错误

    好久没有用Keil编程,因为别人的代码是用Keil写的,所以又得安装起来,编译时遇到__align(4)的错误提示。 这个问题主要是编译器版本的问题,默认使用的是v6.19版本的编译器,而工程原来使用的是v5版本的,两个编译器的指令有差别,这个可以在官方说明文档里可以看到。 如

    2024年03月16日
    浏览(37)
  • STM32开发 | Clion搭建STM32开发环境

    做嵌入式开发的人对STM32这个平台应该都是非常熟悉的,在国内尤其流行,很多产品里面都是基于这个平台做的方案。多数人在开发STM32的时候用的都是 Keil 这个老牌IDE,很大一部分原因是因为大多数人最初是从51单片机学习过来的,51就是基于Keil去开发的,然后迁移到STM32的

    2023年04月12日
    浏览(47)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包