单片机通信协议--USART(串口通信)

文章目录

单片机通信协议--USART(串口通信)

通信协议

作为讲解单片机通信协议的第一篇,先来简单介绍一下是通信协议

单片机(微控制器)中的通信协议是实现单片机与外设(传感器、显示屏、其他单片机等)或外部系统之间数据交换的规则集合,包括信号时序、数据格式、错误处理等。这些协议根据硬件接口、传输方式和应用场景的不同,可分为并行通信串行通信两大类,其中串行通信因布线简单、成本低,在单片机中应用更广泛

并行通信

并行通信通过多根数据线同时传输多位数据(如 8 位、16 位),配合时钟线和控制线实现同步;并行通信的典型应用有单片机与并行 LCD1602 显示屏的连接(8 位数据总线 + RS、RW、E 控制信号)、单片机内部外设(如 RAM、Flash)与 CPU 的通信,在这里我们不做过多介绍

串行通信

串行通信通过单根或两根数据线逐位传输数据 ,布线简单(通常 2-4 根线),适合中短距离通信,是单片机外部通信的主流方式。根据是否需要时钟线同步,又分为异步通信同步通信 。串行通信协议中常用的协议有异步串行通信(UART/USART)SPI(Serial Peripheral Interface,串行外设接口)I2C(Inter-Integrated Circuit,集成电路总线)单总线协议(1-Wire),下面对这四种协议进行对比:

对比维度 USART(异步串行) IIC(I2C) SPI 1-Wire(单总线)
硬件接口线数 2 线(TX 发送、RX 接收,全双工) 2 线(SCL 时钟、SDA 数据,半双工) 4 线(SCLK 时钟、MOSI 主发、MISO 主收、CS 片选) 1 线(DATA 数据,双向)+ 上拉电阻
同步方式 异步(无时钟线,靠波特率同步) 同步(SCL 时钟线,主机控制) 同步(SCLK 时钟线,主机控制) 异步(主机通过时序控制同步)
传输速率 中等(通常≤115200bps,最高几 Mbps) 中低速(标准 100kbps,快速 400kbps,高速 3.4Mbps) 高速(可达几十 Mbps,取决于硬件) 低速(通常≤16kbps)
拓扑结构 点对点(多设备需额外控制) 多主多从(通过 7/10 位地址区分设备) 一主多从(通过 CS 片选区分设备) 一主多从(通过 64 位 ROM 地址区分设备)
数据方向 全双工(同时收发) 半双工(同一时间只能收或发) 全双工(同时收发) 半双工(同一时间只能收或发)
错误检测机制 可选校验位(奇 / 偶 / 无),无应答机制 内置应答(ACK/NACK),部分设备支持 CRC 无内置机制,需软件实现校验 简单 CRC 校验(部分设备支持)
抗干扰能力 一般(单端信号) 一般(单端信号,线少干扰相对较低) 一般(单端信号) 较弱(单线传输,易受干扰)
典型应用场景 调试打印、蓝牙 / GPS 模块、上位机通信 温湿度传感器、EEPROM、RTC 实时时钟 SPI Flash、OLED 屏、高速 ADC/DAC、无线模块 单总线温度传感器(DS18B20)、身份识别芯片
优势 硬件简单,点对点通信方便,无需时钟线 布线极简(2 线),多设备互联成本低 速率高,全双工,适合大数据传输 布线极致简单(1 线),适合低成本场景
劣势 速率有限,多设备通信复杂 速率中等,总线竞争需仲裁 线数较多,多从机时需多个 CS 引脚 速率极低,抗干扰差,通信效率低

对以上表格中的一些名词进行解释:

名词 解释
【全双工】 由两根数据线,一根用来接收,一根用来发送
【半双工】 一根数据线,既可以用来发送,也可以用来接收
【单工】 无法做到同时发送和接受数据
【同步通信】 有时间线,不需要约定采样频率
【异步通信】 需要约定合适的采样频率,用于在约定的频率内采集数据

USART(串口通信)

USART(Universal Synchronous/Asynchronous Receiver/Transmitter,通用同步 / 异步收发器)是单片机中常用的串行通信协议,支持异步通信(最常用)和同步通信两种模式,其中异步模式(通常简称 UART)因硬件简单、使用灵活,在嵌入式领域应用最广泛

通信方式

  • 异步模式(UART):无需时钟线,通过波特率(收发双方约定的传输速率)同步数据,仅需 2 根线(TX 发送、RX 接收)即可实现全双工通信
  • 同步模式(USART):需额外时钟线(CLK),由主机提供时钟信号同步,适合更高精度的高速通信(较少用)

发送接收原理图

其中VCC和GND用于供电,TX和RX用于收发数据,设备1的TX要与设备2的RX相接,设备1的RX要与设备2的TX相接,它们的高低电平是相对于GND的。电平标准是数据0和数据1的表达方式,是传输线缆中认为规定的电压和数据的对应关系,串口常用的电平标准有以下的几种:

  • 【TTL电平】 :+3.3v或 + 5v表示1,0V表示0
  • 【RS232电平】 :-3~ 15v 表示1, +3~+15v表示0
  • 【RS485电平】 :两线压差+2+6v表示1,-2-6v表示0(差分信号)

数据格式

每帧数据由以下部分组成(按传输顺序):

  • 起始位:1 位低电平(逻辑 0),标志数据帧开始
  • 数据位:5-9 位(通常 8 位,即 1 字节),表示有效数据(可配置高位在前或低位在前)
  • 校验位(可选):1 位,用于简单错误检测,支持奇校验(数据位中 1 的个数为奇数)、偶校验(1 的个数为偶数)或无校验
  • 停止位:1-2 位高电平(逻辑 1),标志数据帧结束,保证帧间隔

例:常见配置为 "8 位数据位 + 无校验 + 1 位停止位",总帧长 10 位:

通信流程

在没有进入起始位之间电平的极性呈现出高电平,在进入起始位后电平转换为低电平表示开始发送数据,数据呈现出8个字节一位的特性,进入最后一位后低电平转化为高电平,方便下一次数据的发送,大概原理入下图所示

USART 同步/异步收发器

USART简介

USART(Universal Synchronous/Asynchronous Receiver/Transmitter)通用同步/异步收发器是STM32内部集成的硬件外设,可根据数据寄存器的一个字节数据自动生成数据帧时序,从TX引脚发送出去,也可自动接收RX引脚的数据帧时序,拼接为一个字节数据,存放在数据寄存器里

  • 自带波特率发生器,最高达4.5Mbits/s
  • 可配置数据位长度(8/9)、停止位长度(0.5/1/1.5/2)
  • 可选校验位(无校验/奇校验/偶校验)
  • 支持同步模式、硬件流控制、DMA、智能卡、IrDA、LIN
  • STM32F103C8T6 USART资源: USART1、 USART2、 USART3

USART框图

将框图简化后得到如下图示:

当我们发送数据的时候,数据会放在发送数据寄存器中,USART模块会通过TX引脚发送数据对应的波形,对侧设备的RX引脚接收到波形之后,通过解析可以拿到数据

当我们接收数据的时候,会从 RX引脚得到波形图,依据双方规定的数据帧格式进行解析得到数据,然后把数据放在接收数据寄存器中,我们就可以读到数据

通过配置波特率寄存器中的值来设置分频器的值,时钟频率除以分频器中的值再除以16就可以得到波特率。例如 当我们需要把波特率设置为115200时,STM 32的时钟频率为72MHz,我们就可以反向推出波特率寄存器中的值:

右上角的TE,TxC等都是USART中的状态寄存器,我们可以通过里面的值来判断收发状态:

编号 标志位名称 英文全称 功能说明 置 1 条件
Bit 5 RXNE Read Data Register Not Empty 接收数据寄存器非空(有数据可读) 接收到 1 帧完整数据,存入接收缓冲区
Bit 6 TC Transmission Complete 发送完成(整帧数据发送结束) 发送缓冲区空 + 移位寄存器(发送移位)也空(即最后 1 位已发送)
Bit 7 TXE Transmit Data Register Empty 发送数据寄存器空(可写新数据) 发送缓冲区的数据已转移到移位寄存器,缓冲区空闲
Bit 3 FE Framing Error 帧错误(接收时检测到无效停止位) 接收数据时,停止位不是规定的高电平(如配置 1 个停止位,但实际未检测到高电平)
Bit 4 ORE Overrun Error 溢出错误(接收缓冲区未读取,新数据覆盖旧数据) 接收缓冲区已满(RXNE=1),但新数据已接收完成,旧数据被覆盖
Bit 2 NE Noise Error 噪声错误(接收数据时检测到干扰) 接收数据过程中检测到不符合波特率的噪声信号(仅异步模式)
Bit 1 PE Parity Error 奇偶校验错误(启用校验时,校验位不匹配) 接收数据的校验位与计算出的校验位不一致(需提前配置校验模式)

USART模块有哪些引脚

  • USARTx_Tx:数据的发送引脚,将数据发送出去
  • USARTx_Rx:数据的接收引脚,用来接收数据
  • USARTx_CTS:全称 "Clear To Send"(清除发送),作用是接收方通知发送方 "是否允许继续发送数据",避免因接收方缓冲区满导致数据溢出(比软件流控更高效、实时)
  • USARTx_RTS:全称 "Request To Send"(请求发送),与USARTx_CTS 是配对使用 的 "双向控制信号";核心作用是 发送方主动通知接收方 "我要发数据了,请你准备接收",配合 CTS 完成全双工通信的双向流量控制,避免数据溢出
  • USARTx_CK:USARTx_CK 是 USART(通用同步异步收发传输器)同步模式(Synchronous UART,简称 Sync UART) 专用的时钟信号引脚,全称 "Clock",核心作用是为同步通信提供统一的时钟基准------ 区别于我们常说的异步 UART(无需时钟,靠波特率同步),同步 UART 需通过 CK 信号实现发送方与接收方的严格时序对齐,提升通信速率和可靠性

USART引脚在哪?如何配置?

引脚类型 默认映射(无重映射) 重映射(Partial Remap) 配置要点(GPIO / 寄存器)
TX(发送) PA9 PB6 配置为「复用推挽输出」(GPIO_MODE_AF_PP);重映射需使能 AFIO_USART1_REMAP 位
RX(接收) PA10 PB7 配置为「复用输入」(GPIO_MODE_AF_INPUT);重映射需使能 AFIO_USART1_REMAP 位
CK(同步时钟) PA8 -(无重映射引脚) 仅默认映射有效;配置为复用推挽输出(主)/ 复用输入(从);异步模式可悬空
RTS(请求发送) PA12 PB14 需启用 USART_CR3 的 RTSE 位;配置为复用推挽输出;重映射需使能 AFIO_USART1_REMAP 位
CTS(清除发送) PA11 PB13 需启用 USART_CR3 的 CTSE 位;配置为复用输入;重映射需使能 AFIO_USART1_REMAP 位

通过查看stm32f103c8t6的引脚分布图可以找到USART1的引脚映射,注意此时输出和输入都应该选择复用模式 ,因为CPU不是直接向引脚写数据,而是操作USART模块写;表格中的重映射作用为:当PA9这类默认映射引脚被占用时,使能 AFIO_USART1_REMAP 位,就可以通过PB6发送数据

相关推荐
YeGop3 小时前
51单片机数码管显示函数分享(8051汇编)
汇编·嵌入式硬件·51单片机
LaoZhangGong12310 小时前
STM32 F103外部晶振8MHz改为12MHz,如何配置?
c语言·stm32·单片机·嵌入式硬件·晶振
GilgameshJSS11 小时前
STM32H743-ARM例程41-FMC_INDEP
arm开发·stm32·单片机·嵌入式硬件
某林21212 小时前
如何使用ROS 2与STM32进行串口通信,并实现通过键盘按键‘1’来控制LED灯开关
stm32·嵌入式硬件·计算机外设
hazy1k13 小时前
51单片机基础-PWM、频率与占空比
stm32·单片机·嵌入式硬件·51单片机
逆小舟13 小时前
【STM32】智能排队控制系统
stm32·单片机·嵌入式硬件
清风66666614 小时前
基于单片机的楼道声光人体红外智能控制灯设计
单片机·毕业设计·课程设计·期末大作业
GilgameshJSS14 小时前
STM32H743-ARM例程38-UART-IAP
c语言·arm开发·stm32·单片机·嵌入式硬件
清风66666615 小时前
基于单片机的交流功率测量仪设计与实现
单片机·嵌入式硬件·毕业设计·课程设计·期末大作业