在硬件中断函数HardFault_Handler是
如果上电后, 在调试时, 执行单步, 会在不确定位置的地方产生HardFault_Handle, 检查一下时钟配置(外部晶振频率, SysTemInit/PLLConfig相关函数以及晶振频率宏定义)。
STM32出现硬件错误可能有以下原因:
(1)数组越界操作;
(2)内存溢出,访问越界;
(3)堆栈溢出,程序跑飞;
(4)中断处理错误;
通过断点代码跟踪,在进入fun1(buf);函数时,发现SP指向了数组data所开辟的空间,同时PC、等寄存器值压入栈,在循环执行data =buf;的时候修改了压入栈的数据,导致在退出函数fun1(buf);时PC指向了错误的位置。
硬件相关的可以检查一下你的晶振值和你RCC设置,看看 PLL的工作频率是不是超范围了,重新选择一下倍频分频设置!还有FLASH_Leacny改成3试试
软件的话就是你的启动代码(ASM)能有问题
常规的指针错误,数组下标溢出你应该都知道了,我遇到过你说的这种调试时定位到了错误的函数,是因为编译器你选择了优化,建议遇到这种问题时不要优化编译,那么调试时就是准确的定位,下图所示,但愿能解决你的问题。
这个问题不一定是死机,建议考虑是否出现了硬件错误从而进入了,default hard error中断。
你说的是不是,姓错误时跳到了这个中断HardFaultException()。如果是,那么一般情况下是你的数组定义太大了。按你题目的意思,你在接收数据的时候,发现错误,是不是你没对错误数据进行正确处理,导致数组溢出。
本文标签:stm32硬件错误中断导致原因