USART串口通信

USART串口的作用:连接两台设备,使其可以进行数据传输交换(即通信)
接线方式:交差相连,TX(发送)接RX(接收),RX(接收)接TX(发送)
通信过程:产生一个起始位信号——发送数据位——产生一个停止位信号
起始位信号:在空闲状态下产生一个下降沿表示起始位
停止位信号:在发送状态下产生一个上升沿表示停止位
数据位:8-9位二进制,最后一位可以作为校验位,因此有四种数据位格式:8位无校验(常用)、8位有校验、9位无校验、9位有校验(常用)
注意:视频中的有校验8位和9位中是包含校验位的,但是deepseek给出了不一样的看法——校验位是不包含在数据位中的(这个地方有歧义,需要继续查资料补充或者自己写代码试验一下)
校验位:校验分为奇校验和偶校验,都是对数据中1的个数进行校验,如果是奇校验,当数据中有偶数个1时,校验位将补1,是奇数个1时,校验位补0;如果是偶校验,当数据中有偶数个1时,校验位将补0,是奇数个1时,校验位补1;
引脚工作模式:TX引脚——复用推挽      RX——上拉输入

 

 

初始化usart的步骤
1. 开启usart模块对应的gpio组时钟
2. 设置gpio引脚的工作模式,TX和RX对应的引脚
3. 开启usart模块的时钟
4. 配置usart模块的参数并初始化        波特率、工作模式、校验方法、停止位长度、数据长度
5. 开启usart模块的总开关

 

发送1个数据的步骤(默认已初始化)
1. 初始化USART
2. 获取TXE标志位的当前状态,判断发送数据寄存器是否为空
3. 发送数据寄存器为空,发送数据
4. 获取TC标志位的当前状态,判断发送数据移位寄存器是否为空,以此来确定数据是否发送完成,为空则完成,反之未完成

 

发送n个数据的步骤(默认已初始化)
1. 初始化USART
2. 获取TXE标志位的当前状态,判断发送数据寄存器是否为空
3. 发送数据寄存器为空,发送数据
4. 2,3步重复执行n次
5. 获取TC标志位的当前状态,判断发送数据移位寄存器是否为空,以此来确定数据是否发送完成,为空则完成,反之未完成

 

接收数据的步骤(默认已经初始化)
1. 初始化USART
2. 获取RXNE标志位的当前状态,判断接收数据寄存器是否为空
3. 接收数据寄存器为空,接收数据
4. 如果接收n个数据,需要将2,3步重复n次

 

常用USART函数接口

 

USART_Init(USARTx,&结构体变量名);
作用:初始化USART参数配置
参数1:USARTx,x = 1 或 x = 2
参数2:USART_InitTypeDef 类型的结构体变量名

USART_InitTypeDef USART_InitStruct;    // 定义结构体
USART_InitStruct.USART_BaudRate = 115200;    //串口波特率
USART_InitStruct.USART_Mode = USART_Mode_Rx|USART_Mode_Tx;    //串口的工作模式,只发、只接、发+接
USART_InitStruct.USART_Parity = USART_Parity_No;    //校验方式   无校验、奇校验、偶校验
USART_InitStruct.USART_StopBits = USART_StopBits_1;    //停止位长度,0.5/1/1.5/2.0
USART_InitStruct.USART_WordLength = USART_WordLength_8b;    //数据位长度     8/9

 

USART_Cmd(USARTx,ENABLE);
作用:串口的总开关,控制串口是否进行工作
参数1:USARTx,x = 1 或 x = 2
参数2:ENABLE/DISABLE   使能或失能

 

USART_GetFlagStatus(USARTx,USART_FLAG_xxx);
作用:获取某个标志位的状态
参数1:USARTx,x = 1 或 x = 2
参数2:USART_FLAG_xxx     xxx表示标志位的名字
返回值:SET/RESET,   置一/清零

 

USART_ReceiveData(USARTx);
作用:获取接收数据寄存器中的值
参数1:USARTx,x = 1 或 x = 2
返回值:uint16_t 类型的数据

 

USART_SendData(USARTx, uint16_t xx);
作用:发送数据
参数1:USARTx,x = 1 或 x = 2
参数2:uint16_t 类型的数据

posted on 2026-04-18 17:13  绝情世家  阅读(24)  评论(0)    收藏  举报