公司产品STM32 B错误排查分析

近期原本好好的产品,突然上电不久MCU就卡住。调试发现跳到default_handler错误,也就是B错误

根据网上获取的信息,有2个原因

1、没有相关中断

2、没清除标志

我看了下,串口2的中断函数USART2_IRQHandler已经有了,并且清除中断标志也有,不明白为什么还会出现错误

后面我试过把其他串口初始化注释掉,还是不行,最后把串口2 deiinit,就没问题了,于是还是定位串口2异常

后面经过2个小时的分析对比,看到下面这句话,这里是使能了DMA的中断

然后对比网上的DMA教程,发现我用了DMA接收,然后只弄了串口2的中断函数,没有弄DMA的中断处理函数。

于是加入了下面这个中断处理,然后就正常了,断点测试,确实会跳转到下面的这个中断中

void DMA1_Channel6_IRQHandler(void)

{
    if(DMA_GetFlagStatus(DMA1_FLAG_TC6)==SET)
    {
        DMA_ClearFlag(DMA1_FLAG_TC6);//清中断标志,否则会一直中断
    }
}

之所以困扰我2个小时,是因为我一直都写少了这个DMA中断处理,但是用了2个星期都是没问题,仅在今天才开始出现问题。一直对比SVN排查最近的修改,找其他问题。

所以移植和复制代码真的要小心谨慎,不然少点东西,就要排查很久。
 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值