STM32 USART的字符编码(发送器的实现逻辑)

目录

概述

1 字符编码

1.1 USART 字符说明

1.2 字长编程

2 发送器

2.1 字符发送

2.2 可配置的停止位

2.3 配置停止位方法

3 单字节通信

4 中断字符

5 空闲字符


概述

本文主要讲述STM32 USART的发送端功能实现的原理,包括字节编码长度,发送器的波形特点,发送字节bit位的波形的变化特点,和中断相关的配置参数等内容。

1 字符编码

任何 USART 双向通信均需要至少两个引脚:接收数据输入引脚 (RX) 和发送数据引脚输出 (TX):

RX: 接收数据输入引脚就是串行数据输入引脚。过采样技术可区分有效输入数据和噪声从而用于恢复数据。


TX: 发送数据输出引脚。如果关闭发送器,该输出引脚模式由其 I/O 端口配置决定。如果使
能了发送器但没有待发送的数据,则 TX 引脚处于高电平。在单线和智能卡模式下,该 I/O用于发送和接收数据( USART 电平下,随后在 SW_RX 上接收数据)。

1.1 USART 字符说明

可通过对 USART_CR1 寄存器中的 M 位进行编程来选择 8 位或 9 位的字长。

TX引脚的电平:

起始位电平:

TX 引脚在起始位工作期间处于低电平状态

停止位电平:

停止位工作期间处于高电平状态。空闲字符可理解为整个帧周期内电平均为“1”(停止位的电平也是“1”),该字符后是下一个数据帧的起始位。

停止字符:

在一个帧周期内接收到的电平均为“0”。发送器在中断帧的末尾插入 1或 2 个停止位(逻辑“1”位)以确认起始位。

空闲字符:

整个帧周期内电平均为“1”(停止位的电平也是“1”),该字符后是下一个数据帧的起始位。

发送和接收由通用波特率发生器驱动,发送器和接收器的使能位分别置 1 时将生成相应的发送时钟和接收时钟。

1.2 字长编程

控制寄存器 1 (USART_CR1)
Control register 1
偏移地址: 0x0C
复位值: 0x0000 0000

位 12 M:字长 (Word length)
该位决定了字长。该位由软件置 1 或清零。
0: 1 起始位, 8 数据位, n 停止位
1: 1 起始位, 9 数据位, n 停止位


注意:

在数据传输(发送和接收)期间不得更改 M 位

1)9 位字长( M 位置 1), 1 个停止位

2)8 位字长( M 位复位), 1 个停止位

2 发送器

发送器可发送 8 位或 9 位的数据字,具体取决于 M 位的状态。发送使能位 (TE) 置 1 时,发送移位寄存器中的数据在 TX 引脚输出,相应的时钟脉冲在 SCLK 引脚输出。

2.1 字符发送

USART 发送期间,首先通过 TX 引脚移出数据的最低有效位。该模式下, USART_DR 寄存器的缓冲区 (TDR) 位于内部总线和发送移位寄存器之间。每个字符前面都有一个起始位,其逻辑电平在一个位周期内为低电平。字符由可配置数量的停止位终止。

USART 支持以下停止位: 0.5、 1、 1.5 和 2 个停止位。

注意:

数据发送期间不应复位 TE 位。发送期间复位 TE 位会冻结波特率计数器,从而将损坏 TX 引
脚上的数据。当前传输的数据将会丢失。使能 TE 位后,将会发送空闲帧。

2.2 可配置的停止位

可以在控制寄存器 2 的位 13 和 位 12 中编程将随各个字符发送的停止位的数量。
● 1 个停止位: 这是停止位数量的默认值。
● 2 个停止位: 正常 USART 模式、单线模式和调制解调器模式支持该值。
● 0.5 个停止位: 在智能卡模式下接收数据时使用。
● 1.5 个停止位: 在智能卡模式下发送和接收数据时使用

空闲帧发送将包括停止位

m = 0 时,中断发送是 10 个低电平位,然后是已配置数量的停止位; m = 1 时,中断发送是11 个低电平位,然后是已配置数量的停止位。无法传送长中断(中断长度大于 10/11 个低电平位)。

可配置的停止位的波形如下:

2.3 配置停止位方法

实现步骤:

1. 通过向 USART_CR1 寄存器中的 UE 位写入 1 使能 USART。
2. 对 USART_CR1 中的 M 位进行编程以定义字长。
3. 对 USART_CR2 中的停止位数量进行编程。
4. 如果将进行多缓冲区通信,请选择 USART_CR3 中的 DMA 使能 (DMAT)。按照多缓冲通信中的解释说明配置 DMA 寄存器。
5. 使用 USART_BRR 寄存器选择所需波特率。
6. 将 USART_CR1 中的 TE 位置 1 以便在首次发送时发送一个空闲帧。

7. 在 USART_DR 寄存器中写入要发送的数据(该操作将清零 TXE 位)。为每个要在单缓冲区模式下发送的数据重复这一步骤。
8. 向 USART_DR 寄存器写入最后一个数据后,等待至 TC=1。这表明最后一个帧的传送完成。禁止 USART 或进入暂停模式时需要此步骤,以避免损坏最后一次发送。

3 单字节通信

始终通过向数据寄存器写入数据来将 TXE 位清零。
TXE 位由硬件置 1,它表示:

● 数据已从 TDR 移到移位寄存器中且数据发送已开始。
● TDR 寄存器为空。
● USART_DR 寄存器中可写入下一个数据,而不会覆盖前一个数据。TXEIE 位置 1 时该标志位会生成中断。

1)发送时,要传入 USART_DR 寄存器的写指令中存有 TDR 寄存器中的数据,该数据将在当前发送结束时复制到移位寄存器中。

2)未发送时,要传入 USART_DR 寄存器的写指令直接将数据置于移位寄存器中,数据发送开始时, TXE 位立即置 1。

3)如果帧已发送(停止位后)且 TXE 位置 1, TC 位将变为高电平。如果 USART_CR1 寄存器中的 TCIE 位置 1,将生成中断。

向 USART_DR 寄存器中写入最后一个数据后,必须等待至 TC=1,之后才可禁止 USART或使微控制器进入低功率模式(请参见图 :发送时的 TC/TXE 行为)。

TC 位通过以下软件序列清零:
1. 从 USART_SR 寄存器读取数据
2. 向 USART_DR 寄存器写入数据

4 中断字符

将 SBK 位置 1 将发送一个中断字符。中断帧的长度取决于 M 位 。
如果 SBK 位置“1”,当前字符发送完成后,将在 TX 线路上发送一个中断字符。中断字符发送完成时(发送中断字符的停止位期间),该位由硬件复位。 USART 在上一个中断帧的末尾插入一个逻辑“1”位,以确保识别下个帧的起始位。

注意:

如果软件在中断发送开始前对 SBK 位进行了复位,将不会发送中断字符。对于两个连续的中断,应在上一个中断的停止位发送完成后将 SBK 位置 1。

5 空闲字符

将 TE 位置 1 会驱动 USART 在第一个数据帧之前发送一个空闲帧。

控制寄存器 1 (USART_CR1)
Control register 1
偏移地址: 0x0C
复位值: 0x0000 0000

位 3 TE:发送器使能 (Transmitter enable)
该位使能发送器。该位由软件置 1 和清零。
0:禁止发送器
1:使能发送器


注意:

1:除了在智能卡模式下以外,传送期间 TE 位上的“0”脉冲(“0”后紧跟的是“1”)会在当前字的后面发送一个报头(空闲线路)。
2:当 TE 置 1 时,在发送开始前存在 1 位的时间延迟。 

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

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

相关文章

MOS选型及其参数解析

背景: 整理现有常用元器件选型,日后使用时针对性观看,生成列表链接如下: https://blog.csdn.net/caozhaokun/article/details/126069701 作者:Cayden 时间:2024/05/26 一、MOS选用现状 MOS是电路设计…

【JavaEE初阶】HTTP协议|HTTP请求|URL基本格式|URLencode

💡推荐 前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。【点击跳转到网站】 HTTP请求(Request) 认识URL URL基本格式 平时我们俗称的"⽹址"其实就是说的URL(Uniform Resource Loc…

MySQL--备份恢复

目录 一、备份恢复的工作职责 1.备份的时间周期 2.备份的方式 3.恢复方案 4.检查备份 5.定期恢复演练 6.故障恢复策略 7.迁移升级 二、逻辑备份工具--mysqldump 1.介绍 2.使用场景 3.mysqldump命令的参数介绍 1)全备: 2)单库或…

YOLO 学习和使用 (重拾机器学习)

contents a nenrons 单层神经网络 多层神经网络 CNN (Convolutional Neural Network) YOLO 5.1. YOLO(you only look once) 5.2. predict stage: 置信度 * 类别条件概率 全概率非极大值抑制,通过IOU 指数进行实现每个 grid cell 生成两个预测 bounding box 无…

dsPIC单片机buck-boost拓扑双向DC-DC电源变换器设计

为实现电池储能装置的双向DC-DC变换器,本系统以buck-boost拓扑电路为核心,通过DSPICFJ256GP710单片机最小系统控制拓扑的切换,从而进行buck恒流充电和boost恒压放电。充电时效率≥94%,放电时效率≥95.5%,具有过压保护及…

JVM之【类加载机制】

一、类加载过程 1. 加载(Loading) 工作内容: 通过类的全限定名来获取定义此类的二进制字节流: JVM首先会调用类加载器的findClass方法来找到类文件的路径,通常从文件系统、JAR包、网络、数据库等来源获取类文件。 将…

Installing Tinyproxy on CentOS 7 测试可用

Installing Tinyproxy on CentOS 7 For RHEL/CentOS 7 systems, Tinyproxy is part of EPEL (Extra Packages for Enterprise Linux). Install EPEL on CentOS 7 yum install epel-release -y yum update -y Install Tinyproxy on CentOS 7 yum install tinyproxy -y 编辑…

Android单元测试实践

一、基础概念 按照Google官方建议,Android测试体系应该参照测试金字塔架构(如下图所示),App应该包含三类测试(即小型、中型和大型测试)。 图片 小型测试是指单元测试,用于验证应用的行为,一次验证一个类。中型测试是指集成测试,用于验证模块内堆栈级别之间的交互或相…

yolov8报警图片写入minio服务器 Rabbitmq发送地址

OSError [WinError 1455]页面文件太小,无法完成操作”解决方案“_深度学习_yangshejun-GitCode 开源社区 (csdn.net) python对RabbitMQ的简单使用_python rabbitmq-CSDN博客 【Windows安装RabbitMQ详细教程】_rabbitmq windows-CSDN博客 Windows 10安装Minio 文件…

CentOS Stream 9 vsftpd本地用户设置

1、使用yum指令下载vsftpd yum install vsftpd2、创建wu用户,为ftp组的成员 useradd -g ftp wu3、设置一个密码 echo 1 |passwd --stdin wu4、修改本地用户目录的权限(所有者为wu用户) chown -R wu /data/wu5、创建本地用户的信息数据存放…

mysql 函数 GROUP_CONCAT 踩坑记录,日志:Row 244 was cut by GROUP_CONCAT()

mysql 函数 GROUP_CONCAT 踩坑记录,报错:Row 244 was cut by GROUP_CONCAT 结论:个人建议还是放在内存中拼接吧~db日志信息:Row 244 was cut by GROUP_CONCAT())根本原因:拼接的字符串长度超过 group_concat_max_len […

uni-app实现页面之间的跳转传参(八)

界面之间的参数传递在 开发中经常会用到,这节主要将一下uni-app开发应用是的传参情况。如下图所示,我的一级界面将点检分成三类:日点检、周点检和年保养;在点击相应的会导航到相应的功能。 在uni-app中常用的方法有uni.navigateTo(OBJECT)、uni.redirectTo(OBJECT);简单的…

实时通信的方式——WebRTC

文章目录 基于WebRTC实现音视频通话P2P通信原理如何发现对方? 不同的音视频编解码能力如何沟通?(媒体协商SDP)如何联系上对方?(网络协商) 常用的API音视频采集getUserMedia核心对象RTCPeerConne…

Web开发学习总结

学习路线 Web 全球广域网,也称为万维网(www World Wide Web),能够通过浏览器访问的网站 初识Web前端 Web标准也称为网页标准,由一系列的标准组成,大部分由W3C(World Wide Web Consortium,万维网联盟)负责制定。三个组…

用例篇

弱网测试 弱网测试的目的是尽可能保证用户体验,关注的关键点包括: 页面响应时间是否可以接受,关注包括哦热启动、冷启动时间、页面切换、前后台切换、首字时间,首屏时间等。页面呈现是否完成一致。超时文案是否符合定义&#xf…

CSS浮动(CSS从入门到精通学习第四天)

css第04天 一、其他样式 1、圆角边框 在 CSS3 中,新增了圆角边框样式,这样我们的盒子就可以变圆角了。 border-radius 属性用于设置元素的外边框圆角。 语法: border-radius:length; 参数值可以为数值或百分比的形式如果是正方形&…

K8S认证|CKA题库+答案| 15. 备份还原Etcd

目录 15、 备份还原Etcd CKA v1.29.0模拟系统 下载试用 题目: 开始操作: 1)、切换集群 2)、登录master并提权 3)、备份Etcd现有数据 4)、验证备份数据快照 5)、查看节点和Pod状态 6&#xff0…

linux下的openssh简介(centos 8)

目录 1. 简介2. 安装 OpenSSH3. 配置 OpenSSH 服务器3.1 服务器配置文件配置文件的详解 3.2 安全操作——修改 SSH 端口3.3 安全操作——禁止 root 登录3.4 安全操作——密钥认证3.5 安全操作——禁止密码认证 4. 配置 OpenSSH 客户端4.0 常用命令4.0.1 ssh常用命令4.0.2 scp常…

Java进阶学习笔记11——多态

什么是多态? 多态是在继承/实现情况下一种现象,表现为:对象多态和行为多态。 同一个对象,在不同时刻表现出来的不同形态。 多态的前提: 要有继承/实现关系 要有方法的重写 要有父类引用指向子类对象。 多态的具体代码…

使用 LangFuse 意外被挂马!我是怎么恢复系统稳定的?

在使用 LangFuse 过程中,被意外挂马!通过一番折腾服务恢复正常~ 本文将详细介绍应对恶意脚本和进程的完整方案,包括识别、清理、恢复和预防步骤。 阿里云扫到的信息 被执行的 Base64 SUlaQnRTCmV4ZWMgJj4vZGV2L251bGwKSUhDa0hQbmQ9Li8uJChkYXRlfG1kNXN1bXxoZWFkIC1jMjApCl…