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 类型的数据
浙公网安备 33010602011771号