STM32中关于串口中断的调试(不断进入发送中断的原因)

2023-05-16

说来惭愧,前日在调试stm32f10系列的单片机的时候,想做一个关于串口发送的状态机,每隔100毫秒发送一次命令。没有用DMA,就是想单纯的使用发送中断来数据,结果在调试的时候一直死在了串口中断那里,然后查看sr寄存器,发现是TC位只要打开发送中断就会被置位,看到这里我嘴角微微上扬,轻蔑一笑,(ˉ▽ ̄~) 切~~清掉标志位就好啦。

事实证明,我是愚蠢的,我在中断那里TC位清零后,再次仿真,呃,怎么还不出去?_?

好吧,我在使能发送中断之前清一下好吧。~~(╯﹏╰)b,还不走……

三板斧耍完了,(~ ̄▽ ̄)~ ,度娘,你在哪?

百度关键字“STM32发送中断”,哈,一堆的人有和我一样的问题。问题总该迎刃而解了吧。

度娘出来的答案好多,总结一下有这么几个原因。

1、发送中断打开就会一直进入中断啊,要用的时候再打开就好了。

我的想法:好像很有道理的样子,但是,(╯‵□′)╯︵┻━┻这不是我要的答案啊。

2、打开发送中断前将标志位清零啊,不然会一直进入的,在中断里面也要将标志位清零。

我的想法:(╯‵□′)╯︵┻━┻我不就是这么做的吗,不行啊。

3、用DMA啊,为什么一定要用发送中断,DMA只要进两次中断就好了,占用的cpu时间更少。

我的想法:(╯‵□′)╯︵┻━┻,老子就是要用发送中断

4、用轮询啊,为什么一定要……巴拉巴拉

我的想法:(  ̄ ▽ ̄)o╭╯☆#╰ _─﹏─)╯


第一个原因的论调比较多人支持,我个人猜测是第二原因,然后到处去把标志位清除,在开启中断前清除,不信;在开启中断后清除,不行;在中断里面清除,不行;

……深受打击,这明明很简单的问题,为什么就是解决不了呢?

痛腚思痛,我去找大神,datasheet

看完后,我真想说一句,ヾ(。`Д´。)shit。

老子打开了发送寄存器空检测中断,不是打开发送完成检测中断,寄存器一直就是空的,当然就会一直进入中断啊。


对比英文版的,我发现讲的其实不够透彻,起码“空”这个字眼我就没看到。


我打开串口调试窗口看一下,╮(╯▽╰)╭,就是这货“TXEIE”被使能了,导致程序一直进入中断, 我需要的是发送完成中断,不是发送缓冲区中断。MCU是没错的,错的是我。


人家说的很明白,寄存器空了就进去中断,而这个碗一直就是空的,怎么会不进呢。

以后第一时间还是看看手册,百度不一定找得到,找到的不一定对,对的不一定看得懂,看得懂的不一定是我要的。


写于2016年10月8日夜

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

STM32中关于串口中断的调试(不断进入发送中断的原因) 的相关文章

  • c项目makefile多重定义错误

    这个问题是一个对应于创建的repexthis问题 在我的嵌入式 C 项目中 我有两个独立的板 我想为每个板创建两个 c 文件 master c 和 Slave c 其中包含自己的特定main 功能 我使用 stm32cumbemx 生成带有
  • 在 MCU 内部 FLASH 中从一个固件跳转到另一个固件

    我目前正在开发针对 STM32F030C8 的引导加载程序固件应用程序 我在分散文件中指定引导加载程序应用程序将占用主内存位置 0x08000000 到 0x08002FFF 扇区 0 到扇区 2 我还编写了一个主固件应用程序 存储在0x0
  • 如何让printf在STM32F103上工作?

    我是 STM32F103 世界的新手 我有一个STM32F103的演示代码 我正在使用arm none eabi来编译它 我尝试了在谷歌上可以找到的内容 但到目前为止没有任何效果 我已经花了三天时间来解决这个问题 任何人都可以给我一个运行良
  • 140-基于stm32单片机智能晾衣杆控制系统Proteus仿真+源程序

    资料编号 140 一 功能介绍 1 采用stm32单片机 LCD1602显示屏 独立按键 DHT11传感器 ds1302时钟 光敏传感器 蜂鸣器 LED灯 制作一个基于stm32单片机智能晾衣杆控制系统Proteus仿真 2 通过光敏传感器
  • 匹配 STM32F0 和 zlib 中的 CRC32

    我正在研究运行 Linux 的计算机和 STM32F0 之间的通信链路 我想对我的数据包使用某种错误检测 并且由于 STM32F0 有 CRC32 硬件 并且我在 Linux 上有带有 CRC32 的 zlib 所以我认为在我的项目中使用
  • STM32用一个定时器执行多任务写法

    文章目录 main c include stm32f4xx h uint32 t Power check times 电量检测周期 uint32 t RFID Init Check times RFID检测周期 int main Timer
  • 物联网网关

    物联网网关是 连接物联网设备和互联网的重要桥梁 它负责将物联网设备采集到的数据进行处理 存储和转发 使其能够与云端或其它设备进行通信 物联网网关的作用是实现物联网设备与云端的无缝连接和数据交互 物联网网关功能 数据采集 物联网网关可以从物联
  • SHT10温湿度传感器——STM32驱动

    实验效果 硬件外观 接线 3 3V供电 IIC通讯 代码获取 查看下方 END
  • 解决KEIL编译慢问题

    两种方案 使用v6版本的ARM Compiler 如果v6版本编译不过 必须使用v5版本的 则可以勾选掉Browse Information选项 提升很明显 1分多钟能优化到几秒 看代码量 但是这个有个弊端 在KEIL中会影响函数跳转 建议
  • 跟着野火学FreeRTOS:第一段(任务定义,切换以及临界段)

    在裸机系统中 系统的主体就是 C P U CPU CP U 按照预先设定的程序逻辑在 m a i n
  • 最终启动顺序错误 - STM32L476 的 Eclipse System Workbench 调试

    我正在尝试调试和运行 STM32L476 的简单汇编代码 我已经设置了 Eclipse Oxygen 在 Eclipse 中安装了最新版本的 System Workbench 插件并安装了 ST Link 驱动程序 IDE 成功构建了程序
  • 擦除后无法写入闪存

    所以我不能在擦除后直接写入内部闪存 如果写操作之前没有擦除操作 那么我可以 有什么想法吗 编程函数返回 成功写入 值 但查看内存时 没有写入任何数据 这是代码 uint32 t pageAddress 0x08008000 uint16 t
  • 串口通讯第一次发送数据多了一字节

    先初始化IO再初始化串口 导致第一次发送时 多出一个字节数据 优化方案 先初始化串口再初始化IO 即可正常通讯
  • 串口通讯第一次发送数据多了一字节

    先初始化IO再初始化串口 导致第一次发送时 多出一个字节数据 优化方案 先初始化串口再初始化IO 即可正常通讯
  • 1.69寸SPI接口240*280TFT液晶显示模块使用中碰到的问题

    1 69寸SPI接口240 280TFT液晶显示模块使用中碰到的问题说明并记录一下 在网上买了1 69寸液晶显示模块 使用spi接口 分辨率240 280 给的参考程序是GPIO模拟的SPI接口 打算先移植到FreeRtos测试 再慢慢使用
  • 毕设开题分享 单片机智能教室系统(智能照明+人数统计)

    1 简介 Hi 大家好 今天向大家介绍一个学长做的单片机项目 单片机智能教室系统 智能照明 人数统计 大家可用于 课程设计 或 毕业设计 项目分享 https gitee com feifei1122 simulation project
  • STM32 上的位置无关代码 - 指针

    我已成功在 STM32 上构建并运行位置无关的代码 向量表和 GOT 已修补 一切正常 但我对这样的代码有问题 double myAdd double x return x 0 1 double ptrmyAdd double myAdd
  • PWM DMA 到整个 GPIO

    我有一个 STM32F4 我想对一个已与掩码进行 或 运算的 GPIO 端口进行 PWM 处理 所以 也许我们想要 PWM0b00100010一段时间为 200khz 但随后 10khz 后 我们现在想要 PWM0b00010001 然后
  • STM32F0、ST-link v2、OpenOCD 0.9.0:打开失败

    我在用着发射台 http www ti com ww en launchpad about htmlgcc arm none eabi 4 9 2015q2 为 STM32F0 进行编译 现在我想使用该集合中的 arm none eabi
  • 使用 STM32 USB 设备库将闪存作为大容量存储设备

    我的板上有这个闪存IC 它连接到我的STM32F04 ARM处理器 处理器的USB端口可供用户使用 我希望我的闪存在通过 USB 连接到 PC 时被检测为存储设备 作为第一步 我在程序中将 USB 类定义为 MSC 效果很好 因为当我将主板

随机推荐

  • STM32F103之点亮LED二、结构体封装寄存器

    提示 xff1a 文章写完后 xff0c 目录可以自动生成 xff0c 如何生成可参考右边的帮助文档 点亮LED二 xff1a 合封寄存器之结构体 前言一 基地址分析二 结构体封装寄存器三 引用结构体总结 前言 外设寄存器的地址都是基于外设
  • 彻底解决cmake编译过程中fatal error: OpenNI.h: 没有那个文件或目录

    环境 xff1a ubuntu20 04 在cmake编译过程中 xff0c 最常见的莫过于fatal error xxxx h 没有那个文件或目录 这个问题困扰着很多初学者 xff0c 原因是没有找到某个头文件 xff0c 小白版的解决方
  • 【Ubuntu20.04网络配置--设置静态IP ping通开发板 】

    Ubuntu20 04网络配置 设置静态IP ping通开发板 环境准备windows 主机网络配置开发板 ping Windows主机ubuntu 网络配置配置ubuntu网络设置静态IP 修改IP配置文件让设置的静态IP配置生效查看配置
  • 在ros2 foxy安装镭神M10激光雷达

    前言 记录ros2 机器人开发历程 xff0c 全当做个笔记 xff0c 以后用到好查找 xff0c 也给后来者留下一些脚印 提示 xff1a 以下是本篇文章正文内容 xff0c 下面案例可供参考 一 环境 环境 xff1a ubuntu
  • Authentication认证和Authorization授权的作用

    认证 Authentication xff1a 你是谁 授权 Authorization xff1a 你有权限干什么 认证意味着确认自己的身份 xff0c 而授权意味着授予对系统的访问权限 简单来说 xff0c 认证是验证身份的过程 xff
  • 51单片机串口通信的原理及使用方法(附串口收发数据例程代码)

    温馨提示 xff1a 本篇文章详细介绍了串口的原理及使用方法 xff0c 涉及的内容较多 xff0c 但也较为全面 xff0c 学者若想充分掌握串口通信的原理和具体使用方法 xff08 部分限于51单片机 xff09 xff0c 请静下心来
  • RoboMaster大疆开发板C型入门学习(1)配置加流水灯(循环亮灯

    cubeMX新建工程 xff0c 这里我们假设已经安装好了cubeMX 我们本次使用Clion进行相关操作 在这里我们使用STM32F407IGHx芯片 在System Core下选择RCC选项 xff0c 在RCC mode and Co
  • 如何使用cvx工具箱求解凸优化问题呢?

    以下是一个简单的MATLAB求解凸优化问题的案例 xff0c 使用cvx 工具箱求解 xff1a 1 导入cvx工具箱 addpath 39 cvx 39 2 定义问题 n 61 2 变量数量 x 61 sym 39 x 39 n 1 定义
  • 基于stm32单片机智能导盲拐杖源程序Proteus仿真设计

    功能介绍 xff1a 采用stm32单片机作为主控CPU xff0c 采用srf05超声波模块测量障碍物距离 xff0c LCD1602显示屏显示当前的障碍物距离 xff0c 通过传感器测量障碍物的距离的远近来进行相关报警 xff0c 距离
  • virtualbox上安装ubuntu20.04清华源镜像

    一 下载Ubuntu镜像文件 这里我选择国内清华源下载ubuntu镜像文件 步骤一 xff1a 清华源下载地址 xff1a Index of ubuntu releases 20 04 清华大学开源软件镜像站 Tsinghua Open S
  • 计算机视觉(一):初识OpenCV,更好更快掌握OpenCV

    计算机视觉 xff08 一 xff09 xff1a 初识OpenCV 近几个月 xff0c 也是一直在寻找自己以后的方向 xff0c 一直在迷茫中 xff0c 但也在不断得探索着 觉得自己最感兴趣的还是计算机技术这一块 xff0c 尤其是计
  • 虚拟机扩容(超详细实测好用步骤)

    第一步 xff1a 把虚拟机关机 第二步 xff1a 点击编辑虚拟机设置 xff0c 选择硬盘 xff0c 点击扩展 xff0c 如下图 xff1a 第三步 xff1a 输入你现在想要的磁盘大小 xff08 如果你原来是200G xff0c
  • 结构体的对齐规则(结构体的计算)

    1 第一个成员在与结构体变量偏移量为0的地址处 2 其他成员变量要对齐到某个数字 xff08 对齐数 xff09 的整数倍的地址处 对齐数 61 编译器默认的一个对齐数 与 该成员大小的较小值 3 结构体总大小为最大对齐数 xff08 每个
  • hostapd 配置项解析

    hostapd 配置项解析 1 interface2 wps state3 hw mode4 channel5 beacon int6 max num sta 1 interface 一般默认interface 61 wlan0 注 xff
  • 滑动窗口算法总结

    算法目的 滑动窗口法 xff0c 也叫尺取法 xff08 可能也不一定相等 xff0c 大概就是这样 61 61 xff09 xff0c 可以用来解决一些查找满足一定条件的连续区间的性质 xff08 长度等 xff09 的问题 由于区间连续
  • linux软链接的创建、删除和更新

    大家都知道 xff0c 有的时候 xff0c 我们为了省下空间 xff0c 都会使用链接的方式来进行引用操作 同样的 xff0c 在系统级别也有 在Windows系列中 xff0c 我们称其为快捷方式 xff0c 在Linux中我们称其为链
  • 进程、线程、多进程、多线程的优缺点和区别

    进程 xff1a 是并发执行的程序在执行过程中分配和管理资源的基本单位 xff0c 是一个动态概念 xff0c 竞争计算机系统资源的基本单位 线程 xff1a 是进程的一个执行单元 xff0c 是进程内科调度实体 比进程更小的独立运行的基本
  • Postman 汉化(Postman中文版)

    1 首先从官网下载postMan安装包 postman官网下载地址 Download Postman Get Started for Free 2 下载postMan 汉化包 app zip postman汉化包 Releases hlmd
  • UDP的客户端和服务器端的实例(VC6.0实现)

    服务器端程序 xff1a UdpServer cpp Defines the entry point for the console application include 34 stdafx h 34 include lt stdio h
  • STM32中关于串口中断的调试(不断进入发送中断的原因)

    说来惭愧 xff0c 前日在调试stm32f10系列的单片机的时候 xff0c 想做一个关于串口发送的状态机 xff0c 每隔100毫秒发送一次命令 没有用DMA xff0c 就是想单纯的使用发送中断来数据 xff0c 结果在调试的时候一直