关于STM32运行时程序卡在B.处的解决方法

1 背景: 

程序运行时,发现程序卡死在B.处。

 2 分析(可忽略,只是想学习一下调试方法)

B是跳转指令,.据说是当前地址。所以结合起来就是跳转到当前地址,也就是在当前位置无限循环,进入死循环。

第一步:

右击Default_Handler,出现Show Caller Code,跳转到出现错误的代码处。 

然后

第二步

查找出现Fault的类型和代号。单击Peripherials->core Peripherials->Fault Reports。可以借助“Using Cortex M3 M4 M7 Fault Exceptions”这个文档去查找。虽然文档中没有找到Halted是什么错误,但是Halted是英文停止的意思。

 

 

出现

3 解决方法

程序卡死在B.处说明有中断没有处理,导致程序进入中断后无法跳出。

4 说明

查看程序发现,程序中定义了一个中断,但是之前一次偶然把中断处理程序屏蔽了,导致没有中断处理函数。

程序如下:

//开启了EXTI15_10_IRQn中断

void nirq_Init(void)
{
    GPIO_InitTypeDef GPIO_InitStructure;
 
 
    GPIO_InitStructure.Pin =GPIO_PIN_13;
    GPIO_InitStructure.Mode =GPIO_MODE_IT_FALLING ;
    GPIO_InitStructure.Pull  =GPIO_NOPULL;
    GPIO_InitStructure.Speed = GPIO_SPEED_FREQ_VERY_HIGH;
    HAL_GPIO_Init(GPIOC,&GPIO_InitStructure);
 
    HAL_NVIC_SetPriority(EXTI15_10_IRQn, 0, 0);
    HAL_NVIC_EnableIRQ(EXTI15_10_IRQn);
}

//不小心把中断函数屏蔽了,如下:

//void EXTI15_10_IRQHandler(void)
//{ 
//  HAL_GPIO_EXTI_IRQHandler(GPIO_PIN_13);
//}

把中断函数程序取消屏蔽后,程序正常运行了。

  • 0
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值