你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

stm32调试时进入HardFault_Handler中断

[复制链接]
涯之彼端 提问时间:2014-11-14 00:55 /
用的是st-link/v2仿真器

仿真结果

仿真结果

程序代码

程序代码

收藏 1 评论21 发布时间:2014-11-14 00:55

举报

21个回答
ljmf5 回答时间:2016-1-22 22:31:29
我是在串口程序里面出现这个问题
int main(void)
{               
        u8 t=0;
        u8 tt='A';
        u8 aa;       
        //u16 times=0;
        delay_init();                     //延时函数初始化          
        //NVIC_Configuration();          //设置NVIC中断分组2:2位抢占优先级,2位响应优先级
        uart_init(9600);         //串口初始化为9600
        LED_Init();                             //LED端口初始化
        KEY_Init();          //初始化与按键连接的硬件接口
         USART_ClearFlag(USART1,USART_FLAG_TC);
         for(t=0;t<5;t++)
                {       
                        aa=tt+t;       
                        USART_SendData(USART1, aa);//向串口1发送数据
                        while(USART_GetFlagStatus(USART1,USART_FLAG_TC)!=SET);//等待发送结束
                }
}


软件仿真串口输出是ABCDEABCDEABCDE,求解?
小贾-370388 回答时间:2014-11-18 10:07:13
本帖最后由 小贾-370388 于 2014-11-18 10:16 编辑

STM32出现HardFault_Handler故障的原因主要有两个方面:

1、内存溢出或者访问越界。这个需要自己写程序的时候规范代码,遇到了需要慢慢排查。

2、堆栈溢出。增加堆栈的大小。



出现问题时排查的方法:

发生异常之后可首先查看LR寄存器中的值,确定当前使用堆栈为MSP或PSP,然后找到相应堆栈的指针,并在内存中查看相应堆栈里的内容。由于异常发生时,内核将R0~R3、R12、LR、PC、XPRS 寄存器依次入栈,其中LR即为发生异常前PC将要执行的下一条指令地址。

注意:寄存器均是32位,且STM32是小端模式。(参考Cortex-M3权威)
楼主可以尝试这个方法HardFault_Handler函数添加BX LR语句直接返回的形式。然后在这条语句打个断点,一旦在断点中停下来,说明出错了,然后再返回,就可以返回到出错的位置的下一条语句那儿

__asm void wait()
{
      BX lr
}


void HardFault_Handler(void)
{
    /* Go to infinite loop when Hard Fault exception occurs */
       wait();
}

uCOS+LwIP 回答时间:2015-4-13 12:54:24
在有OS的以太网串口服务器单向传输一点问题都没有,双向传时会不定时进入HardFault_Handler(void) 搞好几天“百度了几夜”都没找是跑到那才进入HardFault_Handler(void) 的,那位大侠有这方面的经验交流一下。。。。。感激不尽。。。。
涯之彼端 回答时间:2014-11-14 00:56:00
这个问题困扰了好久都没解决
llailmw 回答时间:2014-11-14 01:51:12
谢谢楼主,问题已解决
涯之彼端 回答时间:2014-11-14 09:51:53
楼上是怎么解决的??
沐紫 回答时间:2014-11-14 13:30:21
这么混乱,楼主的问题帮助3楼解决了自己的问题?
arm8686 回答时间:2014-11-14 14:14:31
时钟的初始化不对劲?超频了?
duanks 回答时间:2014-11-14 20:42:56
HardFault_Handler里加return,看看是执行完什么指令后进去的
黄小狼 回答时间:2015-1-16 14:50:21
LZ,请问你这个问题是怎么解决的?
木易-357428 回答时间:2015-1-16 17:31:14
楼主,怎么执行完复位GPIO就没程序了呢?至少也应该有个while(1)吧?要不好像就跑飞了吧。。。
黄小狼 回答时间:2015-1-18 19:41:42
小贾-370388 发表于 2014-11-18 10:07
STM32出现HardFault_Handler故障的原因主要有两个方面:

1、内存溢出或者访问越界。这个需要自己写程序的 ...

请问那个汇编写在哪个文件里面呀?
埃斯提爱慕 回答时间:2015-1-18 22:20:30
提示: 作者被禁止或删除 内容自动屏蔽
木木鱼 回答时间:2015-4-13 14:57:01
帮忙顶下
chendiand 回答时间:2015-5-6 15:39:48
楼主的中怎么解决的
12下一页

所属标签

相似问题

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
st-img 微信公众号
st-img 手机版