一旦有数据发送给STM32(哪怕只是几个字节),就会掉到这里: void HardFault_Handler(void) { /* Go to infinite loop when Hard Fault exception occurs */ while (1) { } } void uart_receive_input(unsigned char value) { if((queue_in > queue_out) && ((queue_in - queue_out) >= sizeof(wifi_queue_buf))) { } else if((queue_in < queue_out) && ((queue_out - queue_in) == 0)) { } else { if(queue_in >= (unsigned char *)(wifi_queue_buf + sizeof(wifi_queue_buf))) { queue_in = (unsigned char *)(wifi_queue_buf); } *queue_in ++ = value;//如果这句屏蔽就不会 } } 网上有关HardFault_Handler的述说也是有的,但我还是没弄清楚我这个是如何产生的及怎样解决。多谢大家的指教 |
desk(æ¹èªç©ºæ°ååå¨) - 0331 - AA.rar
下载4.37 MB, 下载次数: 2, 下载积分: ST金币 -1
仅作参考,STM32进入HardFault_Handler处理办法HardFault_Handler出现的情况一般有两种:
一种是:数组越界
一种是:堆栈溢出,程序指针指飞
1.在中断HardFault_Handler中的while()处打上断点,让程序执行到此处停止。
在Registers里面找到R14(LR)的值,我的这里是:0xFFFFFFF9
说明一下:
0xFFFFFFF9对应的是要看MSP寄存器
0xFFFFFFFD对应的是要看PSP寄存器
所以这里需要查找的内存地址是MSP的值:0x20008828
2.进入 HardFault_Handler 可以查看M3,4,0 的内核寄存器看是哪里的问题,把接收buffer改小一点试试
3.参考https://www.stmcu.org.cn/module/forum/thread-612166-1-1.html
评分
查看全部评分
评分
查看全部评分
评分
查看全部评分
*queue_in ++ = value;我已经知道它掉进HardFault_Handler前,就是运行到这里。(换言之,它如果运行到*queue_in ++ = value;就会掉进HardFault_Handler)。但为什会进去,大家能把问题的根源缩小下吗?