当前位置: 首页 > news >正文

STM32-USART时序与寄存器状态分析

一、时序分析

在UART(通用异步收发传输)通信中,信号线上的状态分为两种:逻辑1(高电平)和逻辑0(低电平)。在空闲状态下,数据线应保持逻辑高电平。UART协议中的各个信号位具有如下含义:

1)起始位(Start Bit):
  • 起始位用于标识数据传输的开始。通过将通信线路从其空闲状态(逻辑高电平)拉低(逻辑低电平)来表示数据的开始。
2)数据位(Data Bits):
  • 数据位是实际传输的数据部分,其长度可以是5到8位。例如,ASCII码使用7位数据位,而扩展BCD码则使用8位。数据位的具体长度取决于通信设置。
3)校验位(Parity Bit):
  • 校验位用于检测数据传输中的错误。它可以是偶校验(确保1的位数为偶数)或奇校验(确保1的位数为奇数)。校验位的存在与否以及其具体设置取决于协议的要求。
4)停止位(Stop Bit):
  • 停止位用于标识数据传输的结束。它可以是1位、1.5位或2位的逻辑高电平。停止位的长度也可以根据通信协议进行调整。
     

二、寄存器状态分析

1)数据寄存器(DR,Data Register)

数据寄存器(DR)既用于发送数据也用于接收数据。尽管其功能在不同操作模式下有所不同,但实际上它是同一个物理寄存器:

  • 发送数据寄存器(TDR):在写操作时,数据被写入USART_DR寄存器,以便发送。
  • 接收数据寄存器(RDR):在读操作时,从USART_DR寄存器中读取接收到的数据。
2)状态寄存器(SR,Status Register)

状态寄存器(SR)提供UART模块的状态信息和标志位,反映UART的当前状态,如接收和发送状态、中断标志等。

  • 状态检查:通过读取SR寄存器中的标志位,监测UART的当前状态。
  • 错误处理:检查和处理各种错误标志(如溢出错误、噪声错误、帧错误)。
3)常见标志位:
  • TXE(发送数据寄存器空标志)
  • 标志位USART_FLAG_TXE (Transmit Data Register Empty Flag)
  • 功能:当TXE标志被置位时,表示发送数据寄存器中没有数据,准备好接收新的数据以便发送。此标志通常用于触发发送操作或检查发送缓冲区是否已经空闲。
  • TC(发送完成标志)
  • 标志位USART_FLAG_TC (Transmission Complete Flag)
  • 功能:当TC标志被置位时,表示所有数据字节已经完全传输,并且所有的发送缓冲区也已清空。此标志用于确认数据传输的最终完成状态。
  • RXNE(接收数据寄存器非空标志)
  • 标志位USART_IT_RXNE (Receive Data Register Not Empty Interrupt)
  • 功能:当接收数据寄存器中有数据可以读取时,该标志被置位。该标志用于触发接收中断,表示数据可供读取。数据从RDR移位寄存器转移到USART_DR寄存器时,该位被硬件置位。
  • IDLE(空闲标志)

  • 标志位USART_IT_IDLE (Idle Line Detected Interrupt)
  • 功能:当数据线保持空闲状态(没有数据传输)时,IDLE标志被置位。该标志用于检测数据传输的结束或空闲状态,并触发空闲行中断。
  • ORE(溢出错误标志):当接收数据寄存器溢出(接收到的数据未能及时读取)时,该标志被置位。该标志需要被清除以防止错误的发生。
  • NF(噪声错误标志):当接收的数据包含噪声错误时,该标志被置位。通常需要进行错误处理。
  • FE(帧错误标志):当接收到的数据帧格式错误(如停止位缺失)时,该标志被置位。需要进行错误处理。
  • PE(校验错误标志):当数据传输过程中发生校验错误时,该标志被置位。需要进行错误处理。

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 【区块链+乡村振兴】森林食品认证溯源平台 | FISCO BCOS应用案例
  • Redis02——缓存(缓存更新策略、缓存穿透、缓存雪崩、缓存击穿、缓存工具封装)
  • Boost搜索引擎:项目整体代码及布局
  • 贝叶斯优化算法(Bo)与门控循环单元(GRU)结合的预测模型(Bo-GRU)及其Python和MATLAB实现
  • Haskell HTTP请求:如何解读响应状态
  • 片上POR和BOR的区别
  • 20240809 每日AI必读资讯
  • 大模型快速部署,以浪潮源2.0为例
  • linux中的库的概念、动态库与静态库
  • 如何在 Windows 11/10/8/7 中恢复已删除和未保存的记事本文本文件
  • 爬虫解析代码结构
  • 培训第二十一天(mysql用户创建与授权、角色创建)
  • 【踩坑】TypeScript 中使用 sass 动态设置样式
  • 李宏毅老师机器学习常见英语词汇
  • 数值分析【3】
  • 2017-09-12 前端日报
  • AHK 中 = 和 == 等比较运算符的用法
  • ES6 ...操作符
  • github从入门到放弃(1)
  • Git同步原始仓库到Fork仓库中
  • JavaScript HTML DOM
  • java小心机(3)| 浅析finalize()
  • Java应用性能调优
  • Shell编程
  • Vue 2.3、2.4 知识点小结
  • vue 配置sass、scss全局变量
  • Webpack 4 学习01(基础配置)
  • 初探 Vue 生命周期和钩子函数
  • 机器学习 vs. 深度学习
  • 今年的LC3大会没了?
  • 聚簇索引和非聚簇索引
  • 名企6年Java程序员的工作总结,写给在迷茫中的你!
  • 你不可错过的前端面试题(一)
  • 使用putty远程连接linux
  • 提醒我喝水chrome插件开发指南
  • 我看到的前端
  • 译米田引理
  • ionic入门之数据绑定显示-1
  • 第二十章:异步和文件I/O.(二十三)
  • 直播平台建设千万不要忘记流媒体服务器的存在 ...
  • ​2021半年盘点,不想你错过的重磅新书
  • ​数据链路层——流量控制可靠传输机制 ​
  • #Linux(帮助手册)
  • #微信小程序:微信小程序常见的配置传值
  • ( 用例图)定义了系统的功能需求,它是从系统的外部看系统功能,并不描述系统内部对功能的具体实现
  • ()、[]、{}、(())、[[]]等各种括号的使用
  • (07)Hive——窗口函数详解
  • (2024最新)CentOS 7上在线安装MySQL 5.7|喂饭级教程
  • (Matlab)遗传算法优化的BP神经网络实现回归预测
  • (TOJ2804)Even? Odd?
  • (层次遍历)104. 二叉树的最大深度
  • (第9篇)大数据的的超级应用——数据挖掘-推荐系统
  • (动态规划)5. 最长回文子串 java解决
  • (翻译)Entity Framework技巧系列之七 - Tip 26 – 28
  • (附源码)计算机毕业设计SSM疫情居家隔离服务系统