UART和USART
并行通信 -----各位同时传输、速度快 、占用引脚资源多
串行通信 -----数据按位顺序传输、占用资源少、速度相对较慢
```
-----单工 数据传输只支持数据在一个方向上传输
-----半双工 允许数据在两个方向上传输,但同一时刻,只允许数据在一个方向上传输
-----全双工 允许数据同时在两个方向上传输,因此,全双工通信是两个单工通信方式的结合
-----同步通信 带有时钟同步信号传输(SPI、IIC)
-----异步通信 不带时钟同步信号 (USART),单总线
```
UART-------通用异步收发器 支持独立的发送接收使能
USART -------通用同步异步收发器
过采样 -------16倍过采样和8倍过采样
小数波特率发生器 ---------
SR寄存器 --------- 状态标志寄存器
CR1寄存器 --------- 控制寄存器
硬件流控制 ---------
奇偶校验位 ------- 保证前面的数据位加上奇偶校验保持奇数或者偶数,于是分为奇校验和偶校验
串口1和6使用的是Pclk(2)、串口2~5使用的是Pclk(1)
STM32FXX最多支持8个UART STM32F407一般是6个
电脑使用的接口一般是DB9接口 通过一个RS232转换器
分数波特率发生器
![avatar](./PHOTO/USART.jpg)
配置流程
使能
串口时钟使能 RCC_APBxPeriphClockCmd();
GPIO时钟使能 RCC_AHB1PeriphClockCmd();
引脚复用映射 GPIO_PinAFConfig();
GPIO配置模式设置 GPIO_Init();
串口参数初始化 USART_Init();
开启中断并初始化NVIC(如果需要开启中断才需要这个步骤)
NVIC_Init();
USART_ITConfig();
使能串口
USARTx_IRQHander();
串口数据收发
void USART_SendData();
Uint16_t USART_ReceiveData();
串口传输状态获取
FlagStatus USART_GetFlagStatus();
void USART_ClearITPendingBit();
宏定义标识符
USART_RX_STA -------
USART_IT_RXNE -------
USART_REC_LEN -------
通过中断标志位等待发送完成
准备知识-----端口复用映射
配置相关寄存器
USART_SR 状态寄存器 [9:0] PE(parity error) RXNE(Read data register not empty) TC(发送完成)
USART_DR 数据寄存器
USART_BRR 波特率寄存器[15:0] 主要设置的是usart的分频系数(USARTDIV)[15:4]整数部分,[3:0]小数部分
配置相关库函数
-
FlagStatus USART_GetFlagStatus(USART_TypeDef* USARTx,uint16_USART_FLAG);
-
void USART_SendData(USART_TypeDef* USARTx,uint16_t Data); 用于操作数据寄存器
-
uint16_t (USART_TypeDef* USARTx);
-
USART_Init(USART_TypeDef* USARTx,USART_InitTypeDef* USART_InitStruct);//初始化波特率,字长,停止位,奇偶校验位,USART模式(使能发送、接收或者发送和接收),硬件流控制