一、基本原理
串口通信(Serial Communication),是指外设和计算机间,通过数据信号线、 地线等,按位进行传输数据的一种通信方式,属于串行通信方式。
二、接口标准
![](https://img-blog.csdnimg.cn/e7f5c991b4d44ebfbde99af2a18c4e3d.png)
在串口通信中,通常我们只使用 2、3、5 三个管脚,即 TXD、RXD、SGND, 其他管脚功能大家看不明白也没关系。
这是我从朱雀F103的原理图上截下来的串口通信部分,很明显的看出主控制器的(PA9)TX接CH340的RXD,(PA10)RX接CH340的TXD就能够通过USART1实现数据传输。
三、相关寄存器
在本人看来想要想好单片机最重要的无非就是会“看两样,用一样”:
①会看官方手册
②会看原理图
③会用寄存器
必须要在使用的过程中慢慢摸索,仅仅停留在理论是行不通的,好了,话不多说,以STM32F1系列单片机为例,下列是从官方参考手册中截取的与串口通信相关的重要的寄存器:
![](https://img-blog.csdnimg.cn/288c294f13ab4d7788ca02fd16f3d8ed.png)
四、配置步骤
在实际开发过程中一般都是以库函数开发的,所以我们需要很熟悉的了解一些与串口相关的库函数以及串口配置的一般步骤。
重要库函数:
void USART_Init(); //串口初始化:波特率,数据字长,奇偶校验,硬件流控以及收发使能
void USART_Cmd();//使能串口 void USART_ITConfig();//使能相关中断
void USART_SendData();//发送数据到串口,DR
uint16_t USART_ReceiveData();//接受数据,从DR读取接受到的数据
FlagStatus USART_GetFlagStatus();//获取状态标志位
void USART_ClearFlag();//清除状态标志位
ITStatus USART_GetITStatus();//获取中断状态标志位
void USART_ClearITPendingBit();//清除中断状态标志位
配置步骤:
①串口时钟使能,GPIO时钟使能:RCC_APB2PeriphClockCmd();
②串口复位:USART_DeInit(); 这一步不是必须的
③GPIO端口模式设置:GPIO_Init(); 模式设置为GPIO_Mode_AF_PP
④串口参数初始化:USART_Init();
⑤开启中断并且初始化NVIC(如果需要开启中断才需要这个步骤)
NVIC_Init(); USART_ITConfig();
⑥使能串口:USART_Cmd();
⑦编写中断处理函数:USARTx_IRQHandler();
⑧串口数据收发: void USART_SendData();//发送数据到串口,DR
uint16_t USART_ReceiveData();//接受数据,从DR读取接受到的数据
⑨串口传输状态获取:
FlagStatus USART_GetFlagStatus(USART_TypeDef* USARTx, uint16_t USART_FLAG);
void USART_ClearITPendingBit(USART_TypeDef* USARTx, uint16_t USART_IT);