OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 4323|回复: 14

引脚初始化的时候发生硬件错误-跳入HardFault_Handler

[复制链接]

4

主题

18

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
316
金钱
316
注册时间
2018-4-4
在线时间
30 小时
发表于 2018-7-17 10:13:32 | 显示全部楼层 |阅读模式
20金钱
本帖最后由 肥油玉帝 于 2018-7-17 10:15 编辑

程序如下:[mw_shl_code=c,true]static OS_STK  StartTaskStk[TASK_STK_SIZE];
int main(void)
{        
    BSP_Init();//错误在这个函数里面
    OSInit();
    OSTaskCreate(StartTask,(void *)0,
                        &StartTaskStk[TASK_STK_SIZE-1],0);
    OSStart();
    return 0;
}[/mw_shl_code]

函数BSP_Init具体内容如下:
[mw_shl_code=c,true]void BSP_Init(void)
{
    LED_GPIO_Config();  /* LED 端口初始化 *///错误在这个函数里面
    LCD_Init();         /* LCD初始化 */
    Key_GPIO_Config();  /* KEY初始化 */
    Usart3_Config();
    SystemInit();                /* 配置系统时钟为72M */        
    SysTick_init();                /* 初始化并使能SysTick定时器 */        
}[/mw_shl_code]
函数LED_GPIO_Config具体内容如下:
[mw_shl_code=c,true]void LED_GPIO_Config(void)
{
    GPIO_InitTypeDef GPIO_InitStructure;
    RCC_APB2PeriphClockCmd( RCC_APB2Periph_GPIOC, ENABLE);//错误就发生在这

    GPIO_InitStructure.GPIO_Pin   = GPIO_Pin_0|GPIO_Pin_1|GPIO_Pin_2|GPIO_Pin_3 ;        
    GPIO_InitStructure.GPIO_Mode  = GPIO_Mode_Out_PP;      
    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
    GPIO_Init(GPIOC, &GPIO_InitStructure);
        
    GPIO_SetBits(GPIOC, GPIO_Pin_0 | GPIO_Pin_1 | GPIO_Pin_2 | GPIO_Pin_3);         // turn off all led
}[/mw_shl_code]

在每一行前面加断点,进行一步步调试的时候

加入了断点

加入了断点

发现运行过
[mw_shl_code=c,true]RCC_APB2PeriphClockCmd( RCC_APB2Periph_GPIOC, ENABLE);[/mw_shl_code]
之后就会进入到HardFault_Handler死循环里,这时候的Registers和Call Stack+Locals分别如下

Registers

Registers

Call Stack+Locals

Call Stack+Locals

但是奇怪的是当我全速运行到 RCC_APB2PeriphClockCmd( RCC_APB2Periph_GPIOC, ENABLE);之前,然后使用Step one line就没事了,但是下载到板子上还是不能运行


补充内容 (2018-7-25 08:26):
我去,他解决的不是我的问题啊,为什么会出现“被解决”得情况,这.......莫名其妙

最佳答案

查看完整内容[请看2#楼]

解决了,它代码里有个数组的序号写错了
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

9

主题

796

帖子

1

精华

金牌会员

Rank: 6Rank: 6

积分
2038
金钱
2038
注册时间
2017-8-2
在线时间
522 小时
发表于 2018-7-17 10:13:33 | 显示全部楼层
肥油玉帝 发表于 2018-7-23 16:39
哈哈哈,解决了吗,找bug是真的难受(╯﹏╰)

解决了,它代码里有个数组的序号写错了
猪猪熊呢?
回复

使用道具 举报

4

主题

18

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
316
金钱
316
注册时间
2018-4-4
在线时间
30 小时
 楼主| 发表于 2018-7-17 10:27:29 | 显示全部楼层
本帖最后由 肥油玉帝 于 2018-7-17 10:28 编辑

网上总结的可能的原因有:
  • 内存溢出或者访问越界通常为数组结构体访问越界。
  • 堆栈溢出,增加堆栈的大小。
  • uCos-III系统中任务切换时关中断。
  • 没有打开相应的硬件模块但操作了相应的硬件而导致了错误
  • Jlink的问题,禁止用Jlink供电就可以了Jlink commander中输入power off
  • 程序在添加全局变量的时候会出现sprintf 输出的浮点数不正常,因此尽量不用sprintf函数。
情形3-6是可以排除的,但是1-2也没有发现有犯这样的错啊

回复

使用道具 举报

4

主题

349

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1046
金钱
1046
注册时间
2017-5-19
在线时间
335 小时
发表于 2018-7-17 10:42:34 | 显示全部楼层
[mw_shl_code=c,true]void BSP_Init(void)
{
    SystemInit();                /* 配置系统时钟为72M */      
    SysTick_init();                /* 初始化并使能SysTick定时器 */      
    LED_GPIO_Config();  /* LED 端口初始化 *///错误在这个函数里面
    LCD_Init();         /* LCD初始化 */
    Key_GPIO_Config();  /* KEY初始化 */
    Usart3_Config();
}[/mw_shl_code]
先配置时钟频率,再去使能时钟呢?
回复

使用道具 举报

4

主题

18

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
316
金钱
316
注册时间
2018-4-4
在线时间
30 小时
 楼主| 发表于 2018-7-17 11:00:02 | 显示全部楼层
wxjhby 发表于 2018-7-17 10:42
[mw_shl_code=c,true]void BSP_Init(void)
{
    SystemInit();                /* 配置系统时钟为72M */ ...

还是有问题,一开始就是先设置时钟的,我还以为是应该先把这些外设都初始化了,再开启系统时钟呢,结果还是不行。先开启时钟与后开启有什么讲究吗?
回复

使用道具 举报

4

主题

349

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1046
金钱
1046
注册时间
2017-5-19
在线时间
335 小时
发表于 2018-7-17 11:07:24 | 显示全部楼层
芯片型号选对了没有,下载例程有没有这样的问题?
回复

使用道具 举报

4

主题

18

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
316
金钱
316
注册时间
2018-4-4
在线时间
30 小时
 楼主| 发表于 2018-7-17 11:25:38 | 显示全部楼层
wxjhby 发表于 2018-7-17 11:07
芯片型号选对了没有,下载例程有没有这样的问题?

我之前做其他的实验都没有问题,使用的是同一个模板,就是现在添加了MODBUS协议时出了问题,但是之前的工程也是能正常运行的,所以不存在“芯片型号不对”这种情况。另外就是根本没有运行到新添加的MODBUS程序就出错了啊
回复

使用道具 举报

4

主题

349

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1046
金钱
1046
注册时间
2017-5-19
在线时间
335 小时
发表于 2018-7-17 13:24:34 | 显示全部楼层
肥油玉帝 发表于 2018-7-17 11:25
我之前做其他的实验都没有问题,使用的是同一个模板,就是现在添加了MODBUS协议时出了问题,但是之前的工 ...

一点点去掉东西,看去掉哪里变正常了
回复

使用道具 举报

9

主题

796

帖子

1

精华

金牌会员

Rank: 6Rank: 6

积分
2038
金钱
2038
注册时间
2017-8-2
在线时间
522 小时
发表于 2018-7-17 13:38:12 | 显示全部楼层
把 Key_GPIO_Config();放在  LED_GPIO_Config();前面,看看是否会在LED中的辅助时钟配置处进入硬件错误中断。。

有多余的板子的话,换一块试试?
猪猪熊呢?
回复

使用道具 举报

4

主题

18

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
316
金钱
316
注册时间
2018-4-4
在线时间
30 小时
 楼主| 发表于 2018-7-17 14:50:35 | 显示全部楼层
323232 发表于 2018-7-17 13:38
把 Key_GPIO_Config();放在  LED_GPIO_Config();前面,看看是否会在LED中的辅助时钟配置处进入硬件错误中断 ...

按你说的,把Key_GPIO_Config()放在  LED_GPIO_Config()前面,并且换了另一块板子,结果是,在运行Key_GPIO_Config函数里面的RCC_APB2PeriphClockCmd后,进入了HardFault_Handler。这是什么情况,调用库函数还出问题了!怎么办怎么办
回复

使用道具 举报

9

主题

796

帖子

1

精华

金牌会员

Rank: 6Rank: 6

积分
2038
金钱
2038
注册时间
2017-8-2
在线时间
522 小时
发表于 2018-7-17 14:53:08 | 显示全部楼层
拿掉MODBUS程序是好的吗?如果是好的说明MODBUS里设置辅助时钟那块有问题吧,应该是这样的
猪猪熊呢?
回复

使用道具 举报

9

主题

796

帖子

1

精华

金牌会员

Rank: 6Rank: 6

积分
2038
金钱
2038
注册时间
2017-8-2
在线时间
522 小时
发表于 2018-7-20 09:55:39 | 显示全部楼层
本帖最后由 323232 于 2018-7-20 09:56 编辑

楼主问题解决了吗,我这里之前也遇到了这样的问题,现在解决了,和你分享下。
1.堆栈大小问题。尝试把堆栈改大一点,堆栈大小在startup文件里改,改之前你需要把这个文件的只读属性去掉。
C:\Users\Administrator\Desktop\926TT]SCBH]%(}Q6%SGF}53.png

堆栈

堆栈

2.数据溢出
https://blog.csdn.net/u012075442/article/details/50931354直接用第二种方法找到出问题的句子,如果不是什么必要的句子直接注释,如必要,尝试修改
希望对你有用!

猪猪熊呢?
回复

使用道具 举报

4

主题

18

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
316
金钱
316
注册时间
2018-4-4
在线时间
30 小时
 楼主| 发表于 2018-7-23 11:29:40 | 显示全部楼层
323232 发表于 2018-7-20 09:55
楼主问题解决了吗,我这里之前也遇到了这样的问题,现在解决了,和你分享下。
1.堆栈大小问题。尝试把堆栈 ...

这个问题我有解决的办法,但是还没找到原因,已经放弃了。
方法:我有一个习惯,在修改程序之前,都会先备份一下。后面如果遇到解决不了的bug,就把之前的那份备份拿出来,重新开始,此法百试百灵。这次也是这样解决的,不求甚解不求甚解
回复

使用道具 举报

9

主题

796

帖子

1

精华

金牌会员

Rank: 6Rank: 6

积分
2038
金钱
2038
注册时间
2017-8-2
在线时间
522 小时
发表于 2018-7-23 12:35:28 | 显示全部楼层
肥油玉帝 发表于 2018-7-23 11:29
这个问题我有解决的办法,但是还没找到原因,已经放弃了。
方法:我有一个习惯,在修改程序之前,都会先 ...

       就在我回复完你帖子后两天   我也遇到这个情况了哈哈哈
猪猪熊呢?
回复

使用道具 举报

4

主题

18

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
316
金钱
316
注册时间
2018-4-4
在线时间
30 小时
 楼主| 发表于 2018-7-23 16:39:11 | 显示全部楼层
323232 发表于 2018-7-23 12:35
就在我回复完你帖子后两天   我也遇到这个情况了哈哈哈

哈哈哈,解决了吗,找bug是真的难受(╯﹏╰)
回复

使用道具 举报

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

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-7-14 23:06

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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