文章目录
- 前提
- 现象:
- debug:
- 原因
- 总结
前提
为了张流量券多加更一篇,是我2月份遇到的问题的总结,在我的笔记中,一直没发
现象:
已经配置好串口但不打印输出(printf指向串口1 的SR寄存器,其他引脚和usart配置无问题)
debug:
先运行,无error无warning
进行debug查询问题所在,发现串口初始化usart_init(115200);都没走到就卡死在如图下所示的 B .位置
经过这个现象,再去寻找答案
原因
程序卡死在B .处,说明有中断没处理
比如,启用了某个类型的中断,但是没有对应的中断处理函数,则会出现这种问题
知道是中断的原因后,我第一个想法是关于串口配置的中断,因为我现在做的是串口功能,检查串口中断服务函数和中断配置位置。
检查后并无发现有问题
继续debug
在初始化发现根本还没来得及串口初始化便卡死在B.也就是说是串口之前的初始化工作中的中断出了问题,继续debug
发现在sys_init();函数中卡死
卡在126行,但是125是赋值,所以我当时并不能确定是126行的错误,也不能说是125行(126还没运行,卡死的是125,但是125没有写逻辑只是进行了赋值)
我们就知道是SYS_TICK()出了问题,结合前面卡在B.位置,大约已经能够确定是系统初始化的中断没有打开,在stm32f4xx_it.c文件中找到了我们需要的函数
默认情况下该函数是被屏蔽的,打开问题解决,串口打印也成功。
总结
.B处一般是中断配制出错的问题
检查之后没有出错
可以看看是不是systick_handler是不是初始化了
本篇文章仅供解决问题参考。