STM32U575RIT6(USART)学习

1.串口通信

什么是串口

是一种可以将接收来自CPU的并行数据字符转换为连续的串行数据流发送出去,同时可将接收的串行数据流转换为并行的数据字符供给CPU的器件。一般完成这种功能的电路,我们称为串行接口电路或串行通信接口电路。

什么是通信

  1. 至少要有两个端,发送端和接收端
  2. 信息的传递
  3. 数据的交互

电平信号和差分信号

1.电平信号

电平信号通过单一信号的电压高低表示逻辑状态,高电平(通常为+5、+3.3V或更高)代表逻辑"1",低电平(通常为 0V或接近 0V)代表逻辑"0".

2.差分信号

差分信号通过两根信号线(如 V+ 和 V-)的电压差传递信息,逻辑状态由差值正负决定

2.通信的划分

根据通信方式的划分

串行通信

串行通信:指的是同一时刻只能接收或者发送1bit的信息,因此只需要一根信号线

串行传输:数据一位一位的串起来,逐个按位进行传输。

优点:节省引脚的资源

缺点:传输速度慢

并行通信

并行通信:指的是同一时刻可以传输一个数据的多个位,因此需要多跟信号线

并行传输:使用多根信号线一次传输多个位,同时进行传输。

优点:传输速度块

缺点:浪费引脚资源

根据通信的方向划分

单工:要么接受要么发送,只能作为接收或者发送的设备。 广播 收音机

半双工:既可以接收也可以发送,但是不能同时进行。 对讲机

全双工:可以在同一时刻接收和发送 手机 📞

根据时钟信号进行划分

**同步通信:**通信双方根据同步信号通信,比如双方有一个共同的时钟信号(SPI全双工 I2C 半双工)

发送数据的时候会出现阻塞状态,需要等待数据传输完毕,程序才会执行到下一行

**异步通信:**通信双方有自己独立的系统时钟,大家约定好通信速度。异步通信不需要同步信号,但是并不是说通信的过程不同步(UART)

发送数据的时候没有阻塞状态,执行发送数据语句后执行下一行语句

通信速率

**通信速度:**单位时间内接收或者发送的数据位数

**波特率:**每秒钟发送的位数

**单位:**bit/s bps

**常见的波特率:**9600bit/s 115200bps

常见的通信协议

|----------------|----------------------------------------------|------|------|
| 通信标准 | 引脚说明 | 通信方式 | 通信方向 |
| UART (通用异步收发器) | TXD:发送端 RXD:接收端 GND:公共地 | 异步通信 | 全双工 |
| 单总线 (1-wire) | DQ:发送接收端 | 异步通信 | 半双工 |
| SPI | SCK:同步时钟 MISO:主机输入,从机输出 MOSI:主机输出,从机输入 SS:片选 | 同步通信 | 全双公 |
| I2C | SCL:同步时钟 SDA:数据输入/输出端 | 同步通信 | 半双工 |

3.USART和UART

简单介绍

USART能够灵活地与外部设备进行全双工数据交换,满足外部设备对工业标准NRZ异步串行数据格式的要求。USART通过小数波特率发生器实现了多种波特率。(可配置的波特率)

USART不仅支持同步单向通信和半双工通信,以及LIN(局域互联网络)、智能卡协议、IrDA(红外数据协会)SIR ENDEC 规范和调制解调器操作(CTS/RTS),还支持多处理器通信。

  • USART:支持同步通信或者异步通信,全双工,串行
  • UART:没有时钟线,只支持异步通信,全双工,串行
  • 实际上USART和UART是一种包含关系,当USART选择放弃时钟线的时候就是UART

通信结构

功能框图

发送的过程

由CPU或者DMA往TDR中写入数据

然后由硬件自动检测发送发送移位寄存器中是否有数据正在移位,如果此时有数据正在移位,如果此时有数据正在移位,则数据等待当前移位寄存器移位完成后再往移位寄存器中放,此过程也是中断状态寄存器的TEX置1,它来表示发送数据寄存器空。

如果此时没有数据正在位移,则直接由硬件将TDR中的数据放到发送移位寄存器中。

需要注意的是当TDR中的数据在等待往移位寄存器中放的时候,如果此时CPU或者DMA继续向TDR中写入数据,会将TDR中的数据覆盖掉。

接收过程

首先数据线通过RX口连接到接收移位寄存器

接收移位寄存器对线上的电平进行读取,将读取到的数据放到最高位,读下一位数据时,先把已有的位数整体往右移一位,然后再将读到的数据放到最高位,以此往复,直到读满8位。

读满8位以后整体往RDR中放,此时RDR非空,中断状态寄存器标志位RXNE置1,他表示RDR非空。

串口通信协议

数据帧格式的组成

空闲状态:信号保持在高电平(高电平的抗干扰能力更强)

起始位置:1bit,低电平表示通信的开始

数据位:7,8,9位可选择

校验位:(可配置,可忽略):如果不设置校验位,此处充当普通的数据位

奇校验:数据位上 1 的个数+校验位上 1 的个数 = 奇数

偶校验:数据位上 1 的个数+校验位上 1 的个数 = 偶数

停止位:将信号拉回到高电平的状态(可设置:1,2)

逻辑电平标准

TTL

TTL电平:逻辑1:2.4V-5V 逻辑0:0-0.5V

TTL下的串口通信协议

RS-232

电平标准: +3 ~ +15V:代表逻辑 0

-3 ~ -15V:代表逻辑1

RS-232下的串口通信协议

RS232的抗干扰能力更强

RS-485

RS-485仅是一个电器标准,描述了接口的物理层,像协议、时序、串行或并行数据以及链路全部由设计者或更高协议定义。RS-485定义的是使用平衡多点传输线的驱动器和接收器的电气特性。

RS-485能够进行远距离传输主要得益于使用差分信号进行传输,当有噪声干扰时仍可以使用线路上两者差值进行判断,使传输数据不受噪声干扰。

半双工、是电器协议(逻辑1:+2 - +6 逻辑0:-6 --- -2)是二线制差分信号,也就是实际传输的数据是通过判断这两条信号线上的电压差来实现的,RS-485总线弥补了RS-232通信距离短,速率低的缺点,RS-485和RS-232的单端传输不一样,是差分传输,使用一对双绞线。

串口相关寄存器

串口控制寄存器

USART_CR

USART_CR1

USART_CR2

USART_CR3

决定数据帧的格式:(设备功能初始化、通信帧格式配置)

波特率寄存器

USART_BRR 决定通信速度:bps bit/s

数据发送寄存器

USART_TDR 决定发送的数据:将要发送的数据写入

数据接受寄存器

USART_RDR 决定接收的数据:将要接收的数据读取

中断和状态寄存器

USART_ISR

4.串钩通信实验

串口发送实验

原理图分析

MX配置

练习:实现串口循环发送字符 A---Z

如果不加延时会出现乱序:因为往TDR中放数据的时候过快,导致TDR中的值被覆盖

解决办法

如果不加延时怎么解决?

在CPU向TDR写入数据之前,先判断ISR的位7TXE是否为1。

函数接口

cpp 复制代码
HAL_UART_Transmit (UART_HandleTypeDef * huart, const uint8_t * pData, uint16_t Size, uint32_t Timeout)
功能:以阻塞的形式发送一定量的数据
参数:huart:句柄(用来标识我们使用的串口)
      pData:要发送的数据
      Size:发送的数据的大小
      Timeout:超时检测
      

HAL_UART_Receive (UART_HandleTypeDef * huart, uint8_t * pData, uint16_t Size, uint32_t Timeout)
功能:以阻塞的形式接收一定量的数据
参数:huart:句柄(用来标识我们使用的串口)
      pData:接收的数据存放的位置
      Size:发送的数据的大小
      Timeout:超时检测

代码实现

接收

相关推荐
sunshine22 girl16 分钟前
Angular7,9,学习笔记三 dom操作
笔记·学习·angular
春风解人意35 分钟前
从零开始学习嵌入式P28----线程
c语言·学习·算法
MartinYeung51 小时前
[论文学习]MAC:多智能体宪章学习
人工智能·学习·macos
小+不通文墨2 小时前
使用vscode里的U8G2 库编写OLED菜单控制
经验分享·笔记·单片机·嵌入式硬件·学习
oshan20122 小时前
零基础STM32入门教程--12-I2C 串行通迅
stm32·单片机·嵌入式硬件
摆烂老大2 小时前
论文学习 | HESS2025 | 中亚寒区季节水文预报
学习·机器学习·水文
西西弗Sisyphus2 小时前
模型训练 不同批次大小与学习率下的训练损失对比(1)
学习·batchsize·learning rate
知识分享小能手2 小时前
概理论与数理统计学习教程,从入门到精通,平稳随机过程(27)
学习·数据挖掘·概率论
2601_967264283 小时前
极客时间 AI Agent 全栈工程师训练营,全套学习资源齐全
人工智能·学习