stm32_断点调试无法进入串口接收中断

先说结果,可能是stm32调试功能/keil软件/调试器(试过STLINK和JLINK两种)的问题,不是代码;

1、入坑

配置完串口后,可以发送数据到串口助手,但不能接收数据并做处理,所以第一步,想确定有没有接收到单个字节进入中断。

开始打断点调试,发现串口数据寄存器DR能收到数据,串口状态寄存器SR也有标志的变化,但就是进不了中断服务函数的判断,反复检查配置、各种百度、直到替换为最简单的工程只保留串口,仍然不能解决。

2、串口状态寄存器

串口状态寄存器,显示了串口是否发送完成、接收到数据等,就是我们主要观察的寄存器。

3、具体现象

3.1、初始状态

断点打在判断是否收到数据的if语句,此时,状态寄存器SR=0xC0 ,未收到数据,数据寄存器DR=0x00;

3.2、进不去接收判断

通过串口助手发送0x01,状态寄存器SR=0xF0,表示收到数据RXNE=1,DR=0x01,收到数据和发送数据一致。

此时一切正常,理论上单步执行后,应该进入if的内容执行接收数据的操作,但是直接跳到了else,再看状态寄存器SR=0xC0,接收数据的标志没了RXNE=0,所以无法接收数据。

为什么RXNE标志位被清掉了呢?

看手册有两种情况,一是读数据寄存器,二是写0。

但是我们既没有去读DR,更没有写0,只是单步执行就自动被清掉了。

3.3、修改断点位置,正常进入接收

通过串口助手发送0x02,状态寄存器SR=0xF0,表示收到数据RXNE=1,DR=0x02,收到数据和发送数据一致,并且进入if判断内部,可正常接收数据。

4、反思

配置出问题,可第一时间从单个功能的工程入手,直接在现有代码上调试会有更多不确定的因素,更浪费时间精力。

不要太相信打断点调试,可能会有些代码不能正常执行,尤其是遇到和手册中描述不一致的地方,奇奇怪怪的时候。

相关推荐
工业胶粘剂技术17 分钟前
科耀K-8095M 单组分耐高温环氧 电机磁钢/新能源汽车高温结构粘接技术参数与选型
单片机·嵌入式硬件·汽车
李永奉5 小时前
中科蓝讯SDK开发-BT893x 面条耳机连接vivo手机后连接APP端,最后手机端设置页面手动断开蓝牙连接,此时耳机端假断开
c语言·开发语言·嵌入式硬件·物联网·智能手机·电脑
大爱编程♡5 小时前
STM32-DMA
stm32·单片机·嵌入式硬件
云泽8086 小时前
STM32 USART 详解(三):硬件架构、内部寄存器与物理层收发原理
stm32·嵌入式硬件·硬件架构
天空'之城7 小时前
单片机基础核心知识点汇总(三十三)
数据库·单片机·嵌入式硬件
数字新视界8 小时前
机房动环监控的智能化管理与安全提升探索
嵌入式硬件·物联网·数据中心·数据中心基础设施管理·dcim管理系统
@嵌入式扫地僧9 小时前
TFLite Micro STM32/ESP32 开箱即用推理骨架 + INT8 量化脚本实战:零调试跑通端侧 AI 推理完整步骤
人工智能·嵌入式硬件·tinyml·端侧ai·tflite micro
自小吃多10 小时前
高云FPGA ModelSim中的仿真
笔记·嵌入式硬件·fpga开发
单片机仿真设计10 小时前
基于 STM32 的家庭环境监测与火灾报警灭火系统(Proteus 仿真)
stm32·单片机·嵌入式硬件·proteus·毕设
深圳市恒锐丰科技杨生10 小时前
EG4321 锂电池 CC‑CV 充电管理控制器|屹晶 EGmicro
嵌入式硬件·硬件工程