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

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.lryc.cn/news/353871.html

相关文章:

  • [市赛2024-X2]自习室
  • Spring ----> IOC
  • AI重塑保险业未来:机器学习在风险评估、欺诈检测与客户服务中的深度应用
  • 某某某加固系统分析
  • 嵌入式之音频基础知识
  • 如何做好软件项目的沟通管理
  • linmux
  • Vue3学习-vue-router之路由传参
  • ubuntu20.04 10分钟搭建无延迟大疆无人机多线程流媒体服务器
  • hugging face笔记:PEFT
  • 作业5.26
  • 银河麒麟服务器系统xshell连接之后主动断开,报错socket error event:32 Error:10053问题分析
  • 蓝桥杯算法心得——李白打酒(加强版)
  • java练习2
  • 【安装笔记-20240523-Windows-安装测试 ShareX】
  • 2024年150道高频Java面试题(七十一)
  • 【深度学习】2.单层感知机
  • JS经常碰见的报错问题
  • 纯前端实现截图功能
  • 【网络协议】应用层协议--HTTP
  • 【图书推荐】《Vue.js 3.x+Element Plus从入门到精通(视频教学版)》
  • 抖店如何打造出爆品?学好这几招,轻松打爆新品流量
  • 软件需求规范说明模板
  • vs2013使用qt Linguist以及tr不生效问题
  • Leetcode 3163. String Compression III
  • Java匿名内部类的使用
  • 把自己的垃圾代码发布到官方中央仓库
  • 单机一天轻松300+ 最新微信小程序拼多多+京东全自动掘金项目、
  • 线性回归模型之套索回归
  • 解决文件夹打开出错问题:原因、数据恢复与预防措施