弄清USART串口的使能位(UE、TCIE、RXNEIE)和标志位(TC、RXNE)

2023-05-16

下面通过485半双工的通信过程,记录USART串口的几个使能位、标志位。

 

说明:USART_IT_TC 和 USART_IT_RXNE是一个常量,并不代表(TC、RXNE)这两位。

   #define USART_IT_TC                          ((uint16_t)0x0626)
   #define USART_IT_RXNE                        ((uint16_t)0x0525)

 

一、以发送多个字符为例:

       1. 初始化串口(UE使能位)

由于这个程序非常通用,也比较长。 

注意的一点,初始化中,对UE进行使能; 即USART模块可以被使用。

 

     

 2. 使能(USART)的发送或接收中断位(TCIE、RXNEIE)

通过对485的使能脚的高、低电平的控制,达到串口分别收、发的控制。

 

以上,1-2步,主要是对USART的控制寄存器(CR)的3个使能位进行设置。

 

3. 将需要发送的数据放到USART->DR中,触发中断

当需要发送一组字符时,首先将第一个字符放到USART->DR中,然后开启发送使能中断。

USART就会将该字符发送出去。

 

  4. 发送完1个字节之后,进行入中断服务, 进入中断服务函数USARTx_IRQHandler(TC、RXNE)

当第一个字符被发送完之后,DR(数据寄存器)为空,此时,TC被硬件置位,产生中断。

在中断函数里面,再次调用字符(字节)发送函数,并且清除TC标志位。

不停地触发发送中断,直到所有字符被发送完。    

 

以上3-4步,涉及对状态寄存器(USART_SR)的标志位的操作。

对SR操作的函数: 

        1. USART_ClearITPendingBit(USART2, USART_IT_TC)  //清除待处理的发送完成中断标志位

         2. USART_ClearFlag(USART3,USART_FLAG_TC);      //清除发送完成标志位

          

         3. USART_ClearITPendingBit(USART2, USART_IT_RXNE) //清除待处理的接收完成中断标志位

         4. USART_ClearFlag(USART3,USART_FLAG_ RXNE);    //清除接收完成标志位

注意:1和2 , 3和4的作用完全一样;只是名称不同,在不同场合中应用更加明确。

 

 

二、接收数据的过程,是一样的。只是不需要第3步。

(初始化---使能接收----接收到数据,触发中断---中断服务程序)

 

三、补充一点

有时候,我们会遇到下面的代码:(这个代码和上面的代码不在一个工程里面)

上述代码是通过串口1,发送一串字符,例如: char *s = "hello."

一定要注意: 这里并不需要配置: 

这时因为,上述的发送函数,使用的while(),读取的是 USART->SR中的TC位。

这个TC位,是由硬件置位的。每次发送完1个字符后,硬件自动置位为1.

 

 

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

弄清USART串口的使能位(UE、TCIE、RXNEIE)和标志位(TC、RXNE) 的相关文章

  • 「STM32入门」USART串口通信

    通信 通信的目的 xff1a 将一个设备的数据传送到另一个设备 xff0c 扩展硬件系统 通信协议 xff1a 制定通信的规则 xff0c 通信双方按照协议规则进行数据收发 STM32常见的通信协议 本文将介绍USART 概念解释 TX R
  • 树莓派3 B+ 的串口(USART)使用问题 (也是用C写的)

    这个也是用C写的 摘自 xff1a https www cnblogs com uestc mm p 7204429 html 树莓派3 B 43 的串口 xff08 USART xff09 使用问题 转载 xff1a http ukonl
  • STM32库USART_ITConfig的坑

    USART ITConfig只能使用一个中断标志 xff01 看看中断参数的定义 xff1a define USART IT PE uint16 t 0x0028 define USART IT TXE uint16 t 0x0727 de
  • 第20章 USART—串口通讯—零死角玩转STM32-F429系列

    第20章 USART 串口通讯 全套 200 集视频教程和 1000 页 PDF 教程请到秉火论坛下载 xff1a www firebbs cn 野火视频教程优酷观看网址 xff1a http i youku com firege 本章参考
  • STM32的USART注意

    在USART的发送端有2个寄存器 xff0c 一个是程序可以看到的USART DR寄存器 另一个是程序看不到的移位寄存器 对应USART数据发送有两个标志 xff0c 一个是TXE 61 发送数据寄存器空 xff0c 另一个是TC 61 发
  • STM32 USART 一些问题

    SECTION 1 1 2 3 4 5 6 7 8 9 10 11 12 13
  • USART---串口发送数据

    xfeff xfeff while USART1 gt SR amp 0X40 61 61 0 等待发送结束 解析 xff1a USART1 gt SR xff1a 串口 状态 寄存器 USART1 gt SR amp 0X40 即串口状态
  • STM32 第11讲 正点原子SYSTEM文件夹介绍及使用(sys/delay/usart)

    文章目录 sys文件夹delay文件夹函数简介Systick定时器工作原理寄存器函数介绍 usart文件夹printf函数输出流程printf函数的使用printf函数支持微库法代码法 SYSTEM 文件夹里面的代码由正点原子提供 xff0
  • 【STM32学习】——串口通信协议&STM32-USART外设&数据帧/输入数据策略/波特率发生器&串口发送/接受实操

    文章目录 前言一 串口通信1 通信接口2 串口通信 xff08 1 xff09 串口简介 xff08 2 xff09 串口硬件电路 xff08 3 xff09 串口软件部分 二 STM32的USART外设1 USART简介2 图示详解 三
  • 串口、UART、USART、COM、USB、TTL、RS232、RS485、RS422简介

    串口 COM口 USB口是指的物理接口形式 xff08 硬件 xff09 xff1b TTL RS 232 RS 485 USB电平是指的电平标准 xff08 电信号 xff09 串口 UART口 USART口 COM口 USB口 xff0
  • 笔记(STM32篇)day13——USART串口与PC通信实例

    USART 常用来实现控制器与电脑之间的数据传输 这使得我们调试程序非常方便 xff0c 比如我们可以把一些变量的值 函数的返回值 寄存器标志位等等通过 USART 发送到串口调试助手 xff0c 这样我们可以非常清楚程序的运行状态 xff
  • 【STM32】串口通讯USART串口中断配置

    目录 STM32 USART 简介 程序编写 硬件接线 实际波形 STM32 USART 简介 STM32的USART通用同步异步收发器是一个串行通信设备 xff0c 可以灵活的与外部设备进行全双工数据交换 有别于USART xff0c 还
  • STM32 USART 串口DMA收发注意事项

    正常情况这里不介绍 目录 1 低波特率情况 xff0c 接收信号可能会出现干扰 2 波特率300时 xff0c DMA接收无法工作 3 波特率1200时DMA发送 4 具体现象如下 环境 xff1a 主频72M STM32F103C8 注意
  • usart串口发送与接收问题

    项目场景 xff1a 串口通信可以说很常用的一种通信方式 xff0c 例如 蓝牙通信 openmv 与串口 通信 等等 问题描述 1 我们在进行数据传输过程中数据不时出现丢失的情况 xff0c 偶尔会丢失一部分数据 xff0c 导致数据部分
  • STM32F30X USART串口初始化顺序

    void InitUart void GPIO InitTypeDef GPIO InitStructure if 1 USART USED 61 61 USART1 RCC AHBPeriphClockCmd RCC AHBPeriph
  • STM32的USART中RTS、CTS的作用和意义

    USART中RX和TX这两个引脚的功能 xff0c 这两个引脚是USART串行通信最常见和必不可少的两个引脚 但我们在手册中会发现关于USART的其他引脚 xff1a USART CK USART RTS USART CTS xff0c 如
  • STM-32:USART串口协议、串口外设—数据发送/数据发送+接收

    目录 一 串口通信1 1通信接口1 2串口通信1 2 1简介1 2 2硬件电路1 2 3串口参数及时序 二 STM32的USART外设2 1USART简介2 2USART框图 三 数据传输3 1数据帧3 2输入数据策略3 2 1起始位侦测3
  • USART与UART的区别

    USART universal synchronous asynchronous receiver and transmitte 通用同步异步收发器 USART是一个串行通信设备 可以灵活地与外部设备进行全双工数据交换 UART unive
  • 串口的单线半双工模式(stm32f10x系列)

    关注 星标公众号 及时获取更多技术分享 作者 冰茶奥利奥 微信公众号 嵌入式电子创客街 这两天折腾CTS RTS硬件流控 看到说232协议的CTS RTS只是用来做半双工换向使用的 正好手头上有块stm32的板子 看了看stm32的Usar
  • STM32 上的 ADC 单次转换

    我正在研究 STM32 F103x 上的 ADC 编程 并从最简单的情况 单次转换开始 测量内部温度传感器 连接到 ADC1 的值 并使用 USART 将其发送到 COM 端口 目标似乎很明确 但是当我尝试将源代码下载到闪存时 它不会向 C

随机推荐

  • 27从零开始学Java之详解复杂的二维数组与多维数组

    作者 xff1a 孙玉昌 xff0c 昵称 一一哥 xff0c 另外 壹壹哥 也是我哦 千锋教育高级教研员 CSDN博客专家 万粉博主 阿里云专家博主 掘金优质作者 前言 在前几篇文章中 xff0c 壹哥给大家介绍了Java里的一维数组 x
  • 28从零开始学Java之面向对象和面向过程到底有哪些区别?

    作者 xff1a 孙玉昌 xff0c 昵称 一一哥 xff0c 另外 壹壹哥 也是我哦 千锋教育高级教研员 CSDN博客专家 万粉博主 阿里云专家博主 掘金优质作者 前言 壹哥相信 xff0c 经过你对前面文章中技术点的学习 xff0c 现
  • 29从零开始学Java之如何正确创建Java里的类?

    作者 xff1a 孙玉昌 xff0c 昵称 一一哥 xff0c 另外 壹壹哥 也是我哦 千锋教育高级教研员 CSDN博客专家 万粉博主 阿里云专家博主 掘金优质作者 前言 在上一篇文章中 xff0c 壹哥给大家介绍了面向对象和面向过程的概念
  • 全面图解路由器接口及连接(图)

    路由器所在的网络位置比较复杂 xff0c 既可是内部子网边缘 xff0c 也可位于内 外部网络边缘 同时为了实现强大的适用性 xff0c 它需要连接各种网络 xff0c 这样 xff0c 它的接口也就必须多种多样 对于这些 xff0c 不要
  • blktrace,blkparse,btt工具的制作和使用

    1 软件包交叉编译安装 1 1 blktrace源码下载路径 https git kernel dk cgit blktrace 1 2 源码安装 tar zxvf blktrace 1 2 0 tar gz cd blktrace 1 2
  • cartographer之ceres编译

    1 首先下载ceres xff1b 2 进入ceres目录 xff1b 3 mkdir build amp amp cd build 4 cmake DEIGENSPARSE 5 make 6 sudo make install
  • 一个空文件夹和空文件占多少空间?

    用于显示文件夹和文件大小的命令 span class token function du span h 显示目前在 Linux 系统上的文件系统磁盘使用情况统计 span class token function df span i 一 问
  • 虚拟地址如何访问到物理地址

    环境 xff1a 32bit CPU 一 通过二级页表映射的方式访问物理地址 1 取一级页表的基地址Abase1 2 取虚拟地址的前12bit 31 20 地址O1 3 计算得到新地址Apgd 61 Abase1 amp 0xFFFFF00
  • 添加自定义的section

    一 基本知识点 编译出来的程序 xff08 o so exe ko等等 xff09 都是以elf格式进行排列保存的 elf文件分析情况 xff1a https blog csdn net edonlii article details 87
  • 如何打印堆栈

    一 打印堆栈可以方便问题定位 xff0c 找到具体的函数调用流程 二 打印堆栈的方法 2 1 用户态 include lt stdio h gt include lt stdlib h gt include lt stddef h gt i
  • 内存飞踩问题的几点思考

    1 程序编译 xff0c 链接后生成二进制可执行程序 二进制可执行文件以elf格式实现排列 可以通过readelf S xxxx查看具体section的划分 xff0c 粗略划分如下图所示 在这些section中 xff0c 代码段是只读的
  • CFS调度算法

    1 CFS调度算法 xff0c 顾名思义就是完全公平调度策略 比方说 xff0c 调度延迟时间是10ms xff0c 存在两个进程A和B xff0c 那么两个进程分别占用CPU的时间是5ms 然而 xff0c 阶级总是存在的 xff0c 毕
  • ARM处理器的异常模式

    1 ARM处理器有各种异常模式 xff0c 用于应对ARM出现的不同状态 出现异常时 xff0c 会随即进入相关的异常向量 xff0c 同时CPSR的寄存器也会设置成具体的模式 例 xff1a 当出现中断时 xff0c 不管是哪种中断 xf
  • 内核态和用户态相关的内存泄漏

    应用程序通过系统调用进入内核态代码 假如内核态代码存在内存泄漏 xff0c 此内存泄漏属于内核态还是用户态 xff1f 查看内核态和用户态的统计信息
  • 为什么在telnet登入界面下没有日志输出?

    1 每个进程的输入输出导向目标都可以在进程号下的fd软链接上查看 如 569号进程的输出目标是 dev console xff0c 即串口 其中0是标准输入 xff0c 1是标准输出 xff0c 2是标准错误输出 2 因此我们只需要查看te
  • 【无标题】

    1 将虚拟地址传入到内核态 xff0c 借助内核态中mm struct结构体的pgd页表基地址成员 xff0c 经过查页表的方式最终获取到物理地址 这种方法虽然很直观 xff0c 但是一会内核态 xff0c 一会用户态 xff0c 操作起来
  • C#串口=>发送和接收

    作用 xff1a 串口发送命令后 xff0c 等待下位机应答帧 代码 xff1a 一旦读取到数据就立即返回给上层 public string TXandRX byte buffer string data 发送 RS485专用 start
  • kprobe功能的代码实现

    1 可以借助 sys kernel debug tracing目录下的文件 xff0c linux提供了kprobes功能 xff0c 抓取内核函数中的入参和返回值 kprobes xff0c 强大的调试工具 sydyh43的博客 CSDN
  • 上位机使用C++通过ADS协议与倍福PLC通信例程-通过变量名方式读写浮点数

    前言 建议初学者先看这一章节内容 xff0c 里面包括一些基础的环境配置和项目建立流程 xff0c 以后开发项目这些流程是通用的 xff0c 务必掌握并熟练 链接 上位机使用C 43 43 通过ADS协议与倍福PLC通信例程 布尔变量的读取
  • 弄清USART串口的使能位(UE、TCIE、RXNEIE)和标志位(TC、RXNE)

    下面通过485半双工的通信过程 xff0c 记录USART串口的几个使能位 标志位 说明 xff1a USART IT TC 和 USART IT RXNE是一个常量 xff0c 并不代表 xff08 TC RXNE 这两位 define