串口通信USART(STM32F407)

 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模式(使能发送、接收或者发送和接收),硬件流控制

猜你喜欢

转载自blog.csdn.net/flying_man_/article/details/81537145