stm32h7串口发送寄存器空中断

news2025/2/25 1:19:06

关于stm32串口的发送完成中断UART_IT_TC网上资料挺多的,但是使用发送寄存器空中断UART_IT_TXE的不太多

UART_IT_TC 和 UART_IT_TXE区别

UART_IT_TC 和 UART_IT_TXE 是两种不同的 UART 中断源,用于表示不同的发送状态。它们的主要区别如下:

UART_IT_TC (Transmission Complete)
定义: UART_IT_TC 是发送完成中断(Transmission Complete Interrupt)。
触发条件: 当所有数据都发送完成,包括移位寄存器中的数据发送完毕,并且标志位 TC(Transmission Complete)被置位时触发。
典型用途: 通常用于指示整个数据包已经完全发送完毕,适合于某些需要知道整个数据传输结束的场景。例如,在全双工通信中,确保在发送下一组数据之前当前发送的数据已经完全传输完毕。
示例: 当发送缓冲区为空且传输已完成,通常设置这个中断来执行某些后续操作,比如通知主机传输完毕。

UART_IT_TXE (Transmit Data Register Empty)
定义: UART_IT_TXE 是发送数据寄存器空中断(Transmit Data Register Empty Interrupt)。
触发条件: 当发送数据寄存器(TDR)为空,即刚写入的数据已被移到移位寄存器,并且 TDR 可以接受新的数据时触发。
典型用途: 常用于准备下一个要发送的数据,适合于需要实现串口发送的持续填充过程。例如,在发送数据时确保发送缓存不会溢出。
示例: 当 TDR 为空且可以写入新的数据时,通常设置这个中断来连续发送数据。

串口配置

串口配置,这个不多介绍
在这里插入图片描述
在代码生成中,我把 中断回调函数去掉了
在这里插入图片描述
然后生成的代码就会是这样子,就是中断函数由自己来写了。
在这里插入图片描述

代码

在main.c中,串口初始化后,使能串口的发送寄存器空中断
在这里插入图片描述
然后在stm32h7xx_it.c文件中的,写USART2_IRQHandler函数。
我这里简单测试是发送"hello,world!\r\n"

void USART2_IRQHandler(void)
{

  /* USER CODE BEGIN USART2_IRQn 0 */
  //发送数据 
  static uint8_t transmit_data[] = "hello,world!\r\n";
  static uint8_t i = 0;
  //发送寄存器空中断
    if ((__HAL_UART_GET_IT_SOURCE(&huart2, UART_IT_TXE)!= RESET)
        &&(__HAL_UART_GET_FLAG(&huart2, UART_FLAG_TXE)!= RESET)){

        huart2.Instance->TDR = (uint8_t)transmit_data[i++];
        if(i >= sizeof(transmit_data)){
            i = 0;
        }
        // 清除TXE中断标志
        __HAL_UART_CLEAR_FLAG(&huart2, UART_FLAG_TXE);

    }
  /* USER CODE END USART2_IRQn 0 */
  /* USER CODE BEGIN USART2_IRQn 1 */

  /* USER CODE END USART2_IRQn 1 */
}

我是通过huart2.Instance->TDR = (uint8_t)transmit_data[i++];直接往TDR寄存器,也就是发送数据寄存器写数据,串口会自动的把数据从发送寄存器拿到移位寄存器里。

当然也可以通过HAL_UART_Transmit(&huart2, (uint8_t*)&“a”, 1, 0);这个函数来实现。

在 HAL_UART_Transmit 函数中,发送数据的过程如下:
函数将数据逐字节或逐字(根据配置)写入 TDR 寄存器。
写入 TDR 寄存器后,UART 外设会自动将数据从 TDR 移到移位寄存器,然后通过串行通信接口发送出去。
然后这个函数会等待传输完成标志 UART_FLAG_TC 置位,保证所有数据发送完毕,并且发送移位寄存器中的数据也已发送完毕
在这里插入图片描述

所以我们要注意,如果使用这个函数,最后一个参数等待时间一定要设为0。不然程序会一直在发送数据,跳不出中断,while(1)中的程序无法执行。中断里本就不允许有延时操作。

我的main.c里的大循环while(1)里只做了点灯操作
在这里插入图片描述

效果

烧录下载,就可以看到打印效果了。同时led灯正常闪烁。
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1954149.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

安卓单机游戏:龙之矛内置菜单,【免费分享】白嫖!

龙之矛是一款传统的横版卷轴RPG游戏。在游戏中玩家将探索被梦魇蹂躏的世界,和朋友一起猎杀强大的BOSS,如果你杀死了boss,那么你可以制作具有boss力量的装备。游戏内所有装备都有独特的外观,你可以用各种华丽的装备打扮你的角色。英…

并发基础——Java全栈知识(37)

1、并发基础 1、进程和线程的区别 程序由指令和数据组成,但这些指令要运行,数据要读写,就必须将指令加载至 CPU,数据加载至内存。在指令运行过程中还需要用到磁盘、网络等设备。进程就是用来加载指令、管理内存、管理 IO 的。当…

【LLM】-10-部署llama-3-chinese-8b-instruct-v3 大模型

目录 1、模型下载 2、下载项目代码 3、启动模型 4、模型调用 4.1、completion接口 4.2、聊天(chat completion) 4.3、多轮对话 4.4、文本嵌入向量 5、Java代码实现调用 由于在【LLM】-09-搭建问答系统-对输入Prompt检查-CSDN博客 关于提示词注入…

GPT-4o Mini 模型的性能与成本优势全解析

GPT-4o Mini 模型的性能与成本优势全解析 📈 🌟 GPT-4o Mini 模型的性能与成本优势全解析 📈摘要引言正文内容GPT-4o Mini 模型简介 🚀性能测试与对比 📊应用场景 🌐自然语言处理对话系统内容生成 ✍️ &am…

Lesson 51 A pleasant climate

Lesson 51 A pleasant climate 词汇 Greece n. 希腊 Greek a. 希腊的,希腊语 搭配:Greek gift 不怀好意的礼物 例句:他的电脑是不怀好意的礼物。    His computer is a Greek gift. climate n. 气候 长时间,不容易更改的 we…

生成式AI和LLM的革命:Transformer架构

近年来,随着一篇名为“Attention is All You Need”论文的出现,自然语言处理(NLP)领域经历了一场巨大的变革。2017年,在谷歌和多伦多大学发表了这篇论文后,Transformer架构出现了。这一架构不仅显著提升了N…

.net 连接达梦数据库开发环境部署

.net 开发环境部署 1. 环境准备 测试工具 Visual Studio2022 数据库版本 dm8 2. 搭建过程 1 )创建新项目 2 )选择创建空项目 3 )配置新项目 4 )右键 DM1 新建一个项 5 )加 载 驱 动 , 新 建 …

移动恶意软件的崛起

一.介绍 随着手机的出现,我们的日常生活发生了变化,无论是我们的工作方式还是我们过去相互交流的方式,一切都随着移动技术的进步而改变。但是,随着技术的进步,恶意软件也被引入,随着时间的推移它也变得更加…

用excel能做出这些报表吗?

用excel能做出这些报表吗? 有什么办法不安装OFFICE也能显示出来?

免费【2024】springboot 城市交通管理系统的设计与实现

博主介绍:✌CSDN新星计划导师、Java领域优质创作者、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和学生毕业项目实战,高校老师/讲师/同行前辈交流✌ 技术范围:SpringBoot、Vue、SSM、HTML、Jsp、PHP、Nodejs、Python、爬虫、数据可视化…

labview四字节转浮点数

1.labview四字节转浮点数 2.Labview怎么把串口接收到的数据转换成浮点数? Labview怎么把串口接收到的数据转换成浮点数?

SeaCMS海洋影视管理系统远程代码执行漏洞复现

SeaCMS海洋影视管理系统远程代码执行漏洞复现 Ⅰ、环境搭建Ⅱ、漏洞复现Ⅲ、漏洞分析 免责声明:请勿利用文章内的相关技术从事非法测试,由于传播、利用此文所提供的信息或者工具而造成的任何直接或者间接的后果及损失,均由使用者本人负责&…

maven引入了jar包但在class文件里找不到jar包里的类

在工作当中遇到的这个问题,别人引入的jar包,我代码里报错 maven clean 和 maven install 都不管用 检查过了pom文件 检查了maven仓库路径下是否有这个cn.hutool的jar包 都没有找到问题 最终解决办法是手动引入 步骤一:点击左上角file->…

湖仓一体架构解析:数仓架构选择(第48天)

系列文章目录 1、Lambda 架构 2、Kappa 架构 3、混合架构 4、架构选择 5、实时数仓现状 6、湖仓一体架构 7、流批一体架构 文章目录 系列文章目录前言1、Lambda 架构2、Kappa 架构3、混合架构4、架构选择5、实时数仓现状6、湖仓一体架构7、流批一体架构 前言 本文解析了Lambd…

【leetcode】两数之和【简单】( 注释详解:C++map/ C哈希表)

本题为函数题&#xff0c;函数头固定如下&#xff1a; C: vector<int> twoSum(vector<int>& nums, int target)C: int* twoSum(int* nums, int numSize, int target, int* returnSize) 下面是时间复杂度为O&#xff08;n&#xff09;的代码 CAC代码&#x…

大厂面试官问我:ConcurrentHashMap底层原理?【后端八股文十五:Java集合合集】

本文为【Java集合 合集】初版&#xff0c;后续还会进行优化更新&#xff0c;欢迎大家关注交流~ hello hello~ &#xff0c;这里是绝命Coding——老白~&#x1f496;&#x1f496; &#xff0c;欢迎大家点赞&#x1f973;&#x1f973;关注&#x1f4a5;&#x1f4a5;收藏&#…

IDEA Maven使用国内镜像,解决Could not transfer artifact org.xxx问题

文章目录 一、前言二、遇到问题三、分析问题四、使用国内镜像五、重新编译验证 一、前言 遇到这个问题&#xff0c;有两种解决办法 IDEA Maven使用HTTP代理&#xff0c;解决Could not transfer artifact org.xxx问题IDEA Maven使用国内镜像&#xff0c;解决Could not transfer …

数据结构——链式二叉树(C语言版)

链式二叉树的结构 ⽤链表来表⽰⼀棵⼆叉树&#xff0c;即⽤链来指⽰元素的逻辑关系。 通常的⽅法是链表中每个结点由三个域组成&#xff0c;数据域和左右指针域&#xff0c;左右指针分别⽤来给出该结点左孩⼦和右孩⼦所在的链结点的存储地址。 由上图可见&#xff0c;链式二叉树…

详细介绍BIO、NIO、IO多路复用(select、poll、epoll)

BIO、NIO、IO多路复用 BIO(Blocking IO)NIO(Non-blocking IO) 同步非阻塞IOIO多路复用selectpollepoll Redis的IO多路复用 BIO(Blocking IO) 最基础的IO模型&#xff0c;当进行IO操作时&#xff0c;线程会被阻塞&#xff0c;直到操作完成。 比如read和write&#xff0c;通常IO…

string indices must be integers

string indices must be integers 目录 string indices must be integers 【常见模块错误】 【解决方案】 常见原因及解决方法 具体案例分析 总结 欢迎来到英杰社区https://bbs.csdn.net/topics/617804998 欢迎来到我的主页&#xff0c;我是博主英杰&#xff0c;211科班出…