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

这篇具有很好参考价值的文章主要介绍了stm32_断点调试无法进入串口接收中断。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

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

1、入坑

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

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

2、串口状态寄存器

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

stm32 串口中断进不去,STM8/STM32,通信协议,stm32,单片机,嵌入式硬件

3、具体现象

3.1、初始状态

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

stm32 串口中断进不去,STM8/STM32,通信协议,stm32,单片机,嵌入式硬件

3.2、进不去接收判断

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

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

stm32 串口中断进不去,STM8/STM32,通信协议,stm32,单片机,嵌入式硬件

stm32 串口中断进不去,STM8/STM32,通信协议,stm32,单片机,嵌入式硬件

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

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

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

stm32 串口中断进不去,STM8/STM32,通信协议,stm32,单片机,嵌入式硬件

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

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

stm32 串口中断进不去,STM8/STM32,通信协议,stm32,单片机,嵌入式硬件

 4、反思

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

不要太相信打断点调试,可能会有些代码不能正常执行,尤其是遇到和手册中描述不一致的地方,奇奇怪怪的时候。文章来源地址https://www.toymoban.com/news/detail-715675.html

到了这里,关于stm32_断点调试无法进入串口接收中断的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • STM32(HAL)串口中断接收

    目录 1、简介 2 基础配置 2.1.1 SYS配置  2.1.2 RCC配置 2.2 串口外设配置  2.3 项目生成  3、KEIL端程序整合 本文对HAL串口中断函数进行介绍。 2.1.1 SYS配置  2.1.2 RCC配置 首先在main.c文件中进行接受变量声明。  接着在主函数的while循环中进行接收中断,如下所示:  最后在主函数

    2024年02月14日
    浏览(42)
  • 【STM32】HAL库 串口中断发送与接收

    【STM32】HAL库 新建MDK工程 【STM32】HAL库 串口轮询发送 使用stm32串口中断发送和中断接收 在主函数前开启中断,接受字节数为5 接受5个字节后,进入中断接收完成回调函数,重新再开启中断,并把接收到的数据返回 修改接收数组长度,改为开启串口空闲中断 接收事件回调函数

    2024年02月08日
    浏览(50)
  • STM32 HAL库 串口中断接收数据包

    目录 一、CUBEmx配置 1.设置系统时钟,配置SYS,配置时钟树  ​编辑  2.配置串口USART1 3.配置NVIC,开启串口中断 ​编辑4.点击GENERATE CODE输出文件即可 二、代码部分 0.串口重定向——printf 1.关于舵机 2.开启串口中断函数 3.编写串口回调函数 4.主函数部分 三、实验现象: 四、总

    2024年02月04日
    浏览(35)
  • STM32用FreeRTOS串口中断接收卡死问题

    现在意法半导体的配套软件做得很全面了,简直可以说是保姆式的服务。从芯片选型,引脚定义,到代码模板生成,一条龙服务,很方便。但是方便也有方便的坏处,那就是有些细节的规则会造成天然的bug。 比如,在stm32cubeIDE里新建工程的时候,如果勾选了FREERTOS 那么,程序

    2024年02月15日
    浏览(32)
  • 【STM32】HAL库——串口中断只接收到两个字符

    环境:STM32CubeMX(6.7.0)+MDK-ARM(V5.36.0.0)+STM32F103C8T6 使用XCOM发送字符串(总共8个字符),单片机进行解析为ModBus协议失败,只接收到前两个字节的数据。 原串口中断回调函数: 去掉串口中断回调函数的printf函数即可 在嵌入式系统中,将printf函数直接放在串口中断服务程序(ISR)中

    2024年01月22日
    浏览(36)
  • STM32实战(三):利用空闲中断从串口接收任意长数据

    “ 想起密码了,终于想起密码了(´・ω・`) ” 这次我们利用STM32F103的UART内部的空闲中断来实现对串口任意长数据的接收,通过简洁的手段解决了接收端在事前无法得知数据长度的问题。本次教程我们需要一块STM32核心板与一个USB转TTL工具。 STM32的异步串口接收寄存器可以存放

    2024年02月13日
    浏览(34)
  • STM32无法正常进入外部中断的问题

           本人在使用外部中断读取键值的时候遇见了无法进入外部中断的问题,我的问题是这样的:一开始想用STM32F103C8T6的PB12和PB14读取两个按键的状态,并且是使用外部中断读取,但是总是遇到一个按键的状态可以读取(即按键按下,GPIO口的电平发生跳变,然后进入对应

    2024年02月11日
    浏览(31)
  • 解决STM32在延时时无法进入中断的问题

    问题: 在使用zigbee模块时,使用串口作为无线收发的载体,与stm32通信,使用DHT11作为简单的受控源,出现了bug: 当在while(1)里使用delay函数,或者使用DHT11_Read_Data函数时,程序无法进入串口接收中断,无法使用远程控制 其中的while函数为: 解决思路: 检查接线之后,我首

    2024年02月12日
    浏览(30)
  • stm32串口通信(PC--stm32;中断接收方式;附proteus电路图;开发方式:cubeMX)

     单片机型号STM32F103R6: 最后实现的效果是,开机后PC内要求输入1或0,输入1则打开灯泡,输入0则关闭灯泡,输入其他内容则显示错误,值得注意的是这个模拟的东西只能输入英文 之所以用2个LED灯是因为LED电阻粗略一算就是100欧姆,所以懒得再去画其他的东西,真是天助我也

    2024年02月11日
    浏览(42)
  • 基于STM32F1以及STM32CubeMx实现串口中断通讯(字符串发送与接收)

    首先选好自己的板子并打开软件设置,本实验基于STM32F103ZET6实现,打开软件后如图: 打开外部高速晶振,然后接着配置时钟: 将时钟频率修改为72MHz,接着设置接线方式为SW 接下来需要使用串口中断通讯,打开我们的串口设置并打开中断 这里波特率设置为115200,数据位为

    2024年02月09日
    浏览(37)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包