完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
之前有遇到过类似的问题,有两个原因可能会导致,你可以排查一下:
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()定义如下: void HardFault_Handler(void) { uint32_t r_sp ; r_sp = __get_PSP(); //获取SP的值 PERROR(ERROR,Memory Access Error!); Panic(r_sp); while (1); } 实际中Keil调试模式时,若已烧入stm32的代码与待调试的代码不一致,则调试时会异常进入硬件错误。 通常进入调试模式时会将待调试代码的.axf文件烧入stm32,但有时烧入不正确导致不一致。 |
|
|
|
重新烧录待调试代码生成的.axf文件
|
|
|
|
设计程序时候一定要规范。
|
|
|
|
是要慢慢查,写规范点比较容易避免这种问题。
|
|
|
|
你正在撰写答案
如果你是对答案或其他答案精选点评或询问,请使用“评论”功能。
2085 浏览 1 评论
AD7686芯片不传输数据给STM32,但是手按住就会有数据。
1924 浏览 3 评论
4518 浏览 0 评论
如何解决MPU-9250与STM32通讯时,出现HAL_ERROR = 0x01U
2069 浏览 1 评论
hal库中i2c卡死在HAL_I2C_Master_Transmit
2581 浏览 1 评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-22 02:29 , Processed in 0.617940 second(s), Total 79, Slave 63 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号