硬汉嵌入式论坛

 找回密码
 立即注册
查看: 8088|回复: 12
收起左侧

[STM32H7] 求助:Reset上电后直接进入HardFault,无法进入C环境的main函数

[复制链接]

25

主题

72

回帖

147

积分

初级会员

积分
147
QQ
发表于 2020-4-23 12:46:03 | 显示全部楼层 |阅读模式
非常奇怪的一个问题:Reset上电后直接进入HardFault,无法进入C环境的main函数。

2020-04-23_124104.jpg 2020-04-23_124202.jpg

进入调试时,发现执行到“startup_stm32h743xx.s”文件中的Reset_Handler中的:BX      R0,立即进入HardFault。
回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
115490
QQ
发表于 2020-4-23 13:02:24 | 显示全部楼层
不使用SystemInit也行?

执行下看看
回复

使用道具 举报

25

主题

72

回帖

147

积分

初级会员

积分
147
QQ
 楼主| 发表于 2020-4-23 13:37:26 | 显示全部楼层
eric2013 发表于 2020-4-23 13:02
不使用SystemInit也行?

执行下看看

我是用寄存器开发的,在main函数中,再设置时钟,所以不使用SystemInit: 2020-04-23_133232.jpg
回复

使用道具 举报

25

主题

72

回帖

147

积分

初级会员

积分
147
QQ
 楼主| 发表于 2020-4-23 13:40:03 | 显示全部楼层
另外,我查到是由于新加某个解码函数造成的:

屏蔽解码函数,就可以正常进入main函数;加入解码函数,编译正常,可以下载到STM32H743,但就会发生以上错误。
回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
115490
QQ
发表于 2020-4-23 13:54:56 | 显示全部楼层
pnhywyb 发表于 2020-4-23 13:37
我是用寄存器开发的,在main函数中,再设置时钟,所以不使用SystemInit:

SystemInit就是寄存器的,这也不是设置时钟,这个是复位时钟。现在时钟配置都是在main里面实现的。。。

  /* Reset the RCC clock configuration to the default reset state ------------*/
  /* Set HSION bit */
  RCC->CR |= RCC_CR_HSION;

  /* Reset CFGR register */
  RCC->CFGR = 0x00000000;

  /* Reset HSEON, CSSON , CSION,RC48ON, CSIKERON PLL1ON, PLL2ON and PLL3ON bits */
  RCC->CR &= 0xEAF6ED7FU;

  /* Reset D1CFGR register */
  RCC->D1CFGR = 0x00000000;

  /* Reset D2CFGR register */
  RCC->D2CFGR = 0x00000000;

  /* Reset D3CFGR register */
  RCC->D3CFGR = 0x00000000;

  /* Reset PLLCKSELR register */
  RCC->PLLCKSELR = 0x00000000;

  /* Reset PLLCFGR register */
  RCC->PLLCFGR = 0x00000000;
  /* Reset PLL1DIVR register */
  RCC->PLL1DIVR = 0x00000000;
  /* Reset PLL1FRACR register */
  RCC->PLL1FRACR = 0x00000000;

  /* Reset PLL2DIVR register */
  RCC->PLL2DIVR = 0x00000000;

  /* Reset PLL2FRACR register */

  RCC->PLL2FRACR = 0x00000000;
  /* Reset PLL3DIVR register */
  RCC->PLL3DIVR = 0x00000000;

  /* Reset PLL3FRACR register */
  RCC->PLL3FRACR = 0x00000000;

  /* Reset HSEBYP bit */
  RCC->CR &= 0xFFFBFFFFU;

  /* Disable all interrupts */
  RCC->CIER = 0x00000000;
回复

使用道具 举报

6

主题

34

回帖

52

积分

初级会员

积分
52
发表于 2020-4-27 21:11:51 | 显示全部楼层
有中断使能,但是未处理。
回复

使用道具 举报

25

主题

72

回帖

147

积分

初级会员

积分
147
QQ
 楼主| 发表于 2020-4-29 11:03:43 | 显示全部楼层
lixin91985 发表于 2020-4-27 21:11
有中断使能,但是未处理。

你好,程序是加了某个音频解码库,并加上演示的解码函数,就不能进入main函数了。

没加音频解码库前的编译情况: 2020-04-29_102506.jpg

加了音频解码库后的编译情况:
2020-04-29_103928.jpg

编译都能正常通过,但加了音频解码库后,就不能进入main函数了,直接HardFault。
回复

使用道具 举报

23

主题

96

回帖

165

积分

初级会员

积分
165
发表于 2020-7-24 13:23:18 | 显示全部楼层
pnhywyb 发表于 2020-4-29 11:03
你好,程序是加了某个音频解码库,并加上演示的解码函数,就不能进入main函数了。

没加音频解码库前的 ...

我也遇到,一上电就进入hardFault,甚至Reset_Handler都没有进入
回复

使用道具 举报

0

主题

2

回帖

2

积分

新手上路

积分
2
发表于 2020-8-1 22:39:45 | 显示全部楼层
特意注册的,刚开始学这个,不知道掌握之后有没有用。 我用的keil,勾了Use MicroLIB就不这样了,没勾的话,在进入main那步就直接跳转hardFault
回复

使用道具 举报

0

主题

2

回帖

2

积分

新手上路

积分
2
发表于 2020-8-1 22:40:04 | 显示全部楼层
特意注册的,刚开始学这个,不知道掌握之后有没有用。 我用的keil,勾了Use MicroLIB就不这样了,没勾的话,在进入main那步就直接跳转hardFault
回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
115490
QQ
发表于 2020-8-2 09:05:53 | 显示全部楼层
7698521 发表于 2020-8-1 22:39
特意注册的,刚开始学这个,不知道掌握之后有没有用。 我用的keil,勾了Use MicroLIB就不这样了,没勾的话 ...

将你main函数里面所有内容都注释掉,全编译,然后调试,看看是否还会进
因为不勾选这个,使用的是C标准库,如果使用C标准库的话,且用户调用到了一些C库函数,特别是printf这些,要做重定向。
回复

使用道具 举报

6

主题

34

回帖

52

积分

初级会员

积分
52
发表于 2024-9-23 18:10:52 | 显示全部楼层
今天我也遇到了这个问题。根据我的推测很可能是flash超额使用了。
可我128K的flash 才使用了64K.就这个样子了。

上电复位是可以正常运行,如果软件复位就不行了。hardfault 报错BKPT
我都凌乱了。

回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
115490
QQ
发表于 2024-9-24 09:48:13 | 显示全部楼层
lixin91985 发表于 2024-9-23 18:10
今天我也遇到了这个问题。根据我的推测很可能是flash超额使用了。
可我128K的flash 才使用了64K.就这个样 ...

配置400MHz主频肯定没问题的
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|小黑屋|Archiver|手机版|硬汉嵌入式论坛

GMT+8, 2025-4-29 02:13 , Processed in 0.613895 second(s), 27 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

快速回复 返回顶部 返回列表