问题及现象描述: STM32H730VBT6做的电机驱动控制器,主频550MHZ,使能ICAHCE/DCACHE,在空载运行时可以持续运行(目前测试12H持续运行无问题),在带载40A(2KW)运行时,基本10min以内会出现hardfault,详见下列截图
图1 进入硬件错误中断,错误原因为执行未定义指令
图2 读取栈帧,查看进入错误中断前的状态
图3 栈帧中对应的LR地址和FLASH中存储的程序指令
图4 栈帧中对应的PC地址
图5 MPU配置
图1 进入硬件错误中断,错误原因为执行未定义指令 图2 读取栈帧,查看进入错误中断前的状态 图3 栈帧中对应的LR地址和FLASH中存储的程序指令 图4 栈帧中对应的PC地址 图5 MPU配置
由上述截图可了解到
1、图1,在进入hardfault_handler是因为触发了 执行未定义指令的故障,
2、图2,栈帧显示LR值为0x08007D27,即PC是执行的0x08007D22中的指令,机器码为F002FD01,即跳转到0x0800A728,且Flash中0x08007D22中存储的指令正确(图3),但是在栈帧中存储的PC值却是0x0802A728(与正确地址0x0800A728不一样,bit5意外翻转)
3、图4,栈帧中PC值0x0802A728地址处无任何代码,因此会出现 执行未定义指令故障
问题:
为什么0x08007D22地址中存储的代码正确F002FD01,但是在执行的时候,却出现了一个bit位的翻转?将0X0800A728翻译成了0x0802A728?是否跟CACHE配置有关?或者是否是因为电流太大导致MCU受到干扰,应该如何排查?
|