勒布朗 发表于 2013-9-7 12:17:25

stm32程序停在void HardFault_Handler(void)

程序停在void HardFault_Handler(void),求大神啊,快苦恼死了

Chris-392747 发表于 2013-9-7 23:30:36

RE:stm32程序

问题太不详细了吧:funk:

沐紫 发表于 2013-9-9 11:30:31

RE:stm32程序停在void HardFault_Handler(void)

楼主把代码贴出来,大伙帮你看看吧

wenshijian 发表于 2013-9-9 12:35:58

RE:stm32程序停在void HardFault_Handler(void)

一般是FLASH访问错误,估计是你的指针指向的地址超出了地址区间。
不过也可能是其他原因,具体问题具体分析

fengye5340 发表于 2013-9-10 15:27:09

RE:stm32程序停在void HardFault_Handler(void)

这个问题在使用F3F4的时候经常碰到,有时候能够很快就解决了,有时候也无法找到原因。
   在打开FPU功能后,需要确认 系统启动文件里面是否开启了FPU功能,预定义里面是否加入FPU功能的编译码,还有,初始化变量最好设置为0,别空。
   总体来说,出现这个错误主要是两个方面:
1、内存溢出或者访问越界
2、堆栈溢出。增加堆栈的大小。
   
出现问题时排查的方法:(建议参考一下)
1、发生异常之后可首先查看LR寄存器中的值,确定当前使用堆栈为MSP或PSP,然后找到相应堆栈的指针,并在内存中查看相应堆栈里的内容。由于异常发生时,内核将R0~R3、R12、Return address、PSR、LR寄存器依次入栈,其中Return address即为发生异常前PC将要执行的下一条指令地址,因此在堆栈中反数第三个字即为出错位置。
2、默认的HardFault_Handler处理方法是B .将它改成BX LR直接返回的形式。然后在这条语句打个断点,一旦在断点中停下来,说明出错了,然后再返回,就可以返回到出错的位置的下一条语句那儿。
这个有时候可能需要在反汇编模式下调试,因为可以是程序跑飞一会儿才出现HardFault_Handler。
3、还是将中断函数修改,打印中断时的一些信息:
HardFault_Hander()定义如下:
view plaincopyprint?
    void HardFault_Handler(void)
    {
    uint32_t r_sp ;
    r_sp = __get_PSP(); //获取SP的值
    PERROR(ERROR,Memory Access Error!);
    Panic(r_sp);
    while (1);
    }

xiahouzuoxin 发表于 2013-10-12 00:19:38

回复:stm32程序停在void HardFault_Handler(void)

一般可能是指针使用的问题,调试方法请参考我在CSDN的博文http://blog.csdn.net/xiahouzuoxin/article/details/10068455

jsan123 发表于 2013-10-12 23:18:19

回复:stm32程序停在void HardFault_Handler(void)

 检查一下数据类型
页: [1]
查看完整版本: stm32程序停在void HardFault_Handler(void)