你的浏览器版本过低,可能导致网站不能正常访问!为了你能正常使用网站功能,请使用这些浏览器。
仿çç»æ
ç¨åºä»£ç
举报
__asm void wait() { BX lr }
void HardFault_Handler(void) { /* Go to infinite loop when Hard Fault exception occurs */ wait(); }
小贾-370388 发表于 2014-11-18 10:07 STM32出现HardFault_Handler故障的原因主要有两个方面: 1、内存溢出或者访问越界。这个需要自己写程序的 ...
int main(void)
{
u8 t=0;
u8 tt='A';
u8 aa;
//u16 times=0;
delay_init(); //延时函数初始化
//NVIC_Configuration(); //设置NVIC中断分组2:2位抢占优先级,2位响应优先级
uart_init(9600); //串口初始化为9600
LED_Init(); //LED端口初始化
KEY_Init(); //初始化与按键连接的硬件接口
USART_ClearFlag(USART1,USART_FLAG_TC);
for(t=0;t<5;t++)
{
aa=tt+t;
USART_SendData(USART1, aa);//向串口1发送数据
while(USART_GetFlagStatus(USART1,USART_FLAG_TC)!=SET);//等待发送结束
}
}
软件仿真串口输出是ABCDEABCDEABCDE,求解?
STM32出现HardFault_Handler故障的原因主要有两个方面:
1、内存溢出或者访问越界。这个需要自己写程序的时候规范代码,遇到了需要慢慢排查。
2、堆栈溢出。增加堆栈的大小。
出现问题时排查的方法:
发生异常之后可首先查看LR寄存器中的值,确定当前使用堆栈为MSP或PSP,然后找到相应堆栈的指针,并在内存中查看相应堆栈里的内容。由于异常发生时,内核将R0~R3、R12、LR、PC、XPRS 寄存器依次入栈,其中LR即为发生异常前PC将要执行的下一条指令地址。
注意:寄存器均是32位,且STM32是小端模式。(参考Cortex-M3权威)
楼主可以尝试这个方法将HardFault_Handler函数添加BX LR语句直接返回的形式。然后在这条语句打个断点,一旦在断点中停下来,说明出错了,然后再返回,就可以返回到出错的位置的下一条语句那儿
__asm void wait()
{
BX lr
}
void HardFault_Handler(void)
{
/* Go to infinite loop when Hard Fault exception occurs */
wait();
}
请问那个汇编写在哪个文件里面呀?