串行通信的基本原理
什么是串口:串行通信接口:按位发送和接收的接口。如:RS-232/422/485
LSB是最低有效位
MSB是最高有效位
校验位:可选占1个位长,也可以没有该为
停止位:必须有,可选占0.5、1、1.5、2个位长,保持逻辑1电平
通信接口:
UART:通用异步收发器(异步通信、发送数据、接收数据)【无同步时钟】
USART:通用同步异步收发器(同步通信、异步通信、发送数据、接收数据),我们通常也是使用它的异步通信
USART/UART都可以与外部设备进行全双工异步通信
大容量的STM32F10X系列芯片,包含3个USART和2个UART
通过串口接收或者发送一个字符
数据寄存器DR,要让串口发送数据,就要往DR这个寄存器写入操作。
发送数据寄存器TDR,接收数据寄存器RDR
数据位为八位,第九位为奇偶校验位,双方约定好波特率
串口配置一般步骤:
常用的串口相关的寄存器
- USART_SR状态寄存器(串口通信的状态位)
- USART_DR数据寄存器(一般是位0~8)
- USART_BRR波特率寄存器
- 串口时钟使能,GPIO时钟使能:RCC_APB2PeriphClockCmd();
- 串口复位:USART_Delnit();(这一步不是必须的)
- 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);
以上是学习总结,如有问题,请多指教~