一、串口通信
1.UART指的是通用异步收发器,是一种通用的串行、异步通信总线该总线有两条数据线,一条接收一条发送,可以实现全双工的发送和接收,在嵌入式开发过程中比较常用。异步通信没有使用同一个时钟,可能出现误差,串口一次只能发送一个字节,避免累积误差的出现。
波特率:用于描述UART通信时的通信速度,其单位为bps(bit per second)即每秒钟传送的bit数量。
USART指的是通用同步异步收发器,通用同步异步收发器(USART)提供了一种灵活的方法与使用工业标准NRZ异步串行数据格式的外部设备之间进行全双工数据交换。
NRZ:不归零码(Non-Return-Zero),指的是传输1bit数据后电平不需归零。
RZ:归零码(Return-Zero),指的是传输1bit数据后电平需归零。
2. 串口通信过程
3.字符格式
字符格式一般都是采用字符帧的形式进行传输,字符帧由起始位、数据位、校验位、停止位组成
数据线在空闲的时候为高电平,且发送数据的时候先发送低位再发送高位。
(1)起始位:指的是一帧数据的开始,规定为1bit的低电平,无需设置
(2)数据位:指的是有效的信息内容,可以设置为7bit(标准的ASCII码)或者8bit(拓展ASCII)
(3)校验位:指的是 对数据位的简单校验,可以确保数据正常发送,也可以避免噪声的影响,校验分为奇校验和偶校验,校验位只占1bit,数据位+校验位中的数字1的个数为奇数就是奇校验,一般不使用校验位。
(4)停止位:指的是一帧数据传输完成,停止位为高电平,一般选择一位停止位。
3.通信速率:指的是单位时间内传输的有效二进制的个数,也被称为波特率,单位为bps,常用的波特率有9600bps、115200bps。
4.中断请求
二、串口相关寄存器
1.状态寄存器(USART_SR)
2.数据寄存器(USART_DR)3.波特比率寄存器(USART_BRR)
4.控制寄存器 1(USART_CR1)
5.控制寄存器 2(USART_CR2)
6.控制寄存器 3(USART_CR3)
void USART_DeInit(USART_TypeDef* USARTx);
三、串口常用相关库函数功能
1.void USART_DeInit(USART_TypeDef* USARTx);
串口初始化函数,利用RCC_APB2PeriphResetCmd进行配置,1.选择串口。
2.void USART_Init(USART_TypeDef* USARTx, USART_InitTypeDef* USART_InitStruct);
串口初始化函数,1.选择串口。2.对串口参数进行配置,主要包括(1)USART_BaudRate波特率设置(2)USART_WordLength数据长度是八位还是九位(3) USART_StopBits停止位选择(1/1.5/0.5/2)(4)USART_Parity奇偶校验位选择,一般不选(5)USART_Mode是接收还是发送模式(6)USART_HardwareFlowControl硬件流控模式设置,只有USART模式才有。
3.void USART_StructInit(USART_InitTypeDef* USART_InitStruct);
对串口进行结构体初始化,参数和初始化函数一样,但都是默认的参数。
4.void USART_Cmd(USART_TypeDef* USARTx, FunctionalState NewState);
串口使能函数,1.选择串口,2.使能。
5.void USART_ITConfig(USART_TypeDef* USARTx, uint16_t USART_IT, FunctionalState NewState);
串口中断函数,1.选择串口,2. 选择中断类型,3.使能
6.void USART_SendData(USART_TypeDef* USARTx, uint16_t Data);
串口发送数据函数,1. 选择串口,2.发送数据
7.uint16_t USART_ReceiveData(USART_TypeDef* USARTx);
串口接收数据函数, 1. 选择串口,2.发送数据
8.FlagStatus USART_GetFlagStatus(USART_TypeDef* USARTx, uint16_t USART_FLAG);
获取状态标志函数,1.选择串口,2.标志选择
9.void USART_ClearFlag(USART_TypeDef* USARTx, uint16_t USART_FLAG);
清除状态标志函数,1.选择串口,2.标志选择
10.ITStatus USART_GetITStatus(USART_TypeDef* USARTx, uint16_t USART_IT);
获取中断状态函数,1.选择串口,2.中断选择
11.void USART_ClearITPendingBit(USART_TypeDef* USARTx, uint16_t USART_IT);
清除中断标志函数,1.选择串口,2.中断选择
四、RS232通信
1.串口存在的问题:
(1)UART没有规定不同器件连接时连接器的标准,所以不同器件之间通过UART通信时连接很不方便。
(2)不同处理器规定的高低电平标准存在差异,不同处理器没办法直接使用UART通信。
(3)抗干扰能力差、通信距离极短
2.RS232协议
RS232是用于串行通讯的标准,采用一个标准的连接器,标准中对连接器的每个引脚的作用加以规定,还对信号的电平加以规定,一般最常用的是RXD、TXD、GND。
规定逻辑“1”的电平为-5v到-15v,逻辑“0”的电平为+5v到+15v,选用该电气标准的目的在于提高抗干扰能力,增大通信距离,其通信距离一般可达15m。
在通信过程中,一般都需要芯片对信号进行转换,将TTL电平转换成RS231电平,如采用MAX232EPE。
3.RS232存在的问题
(1)接口信号电平值较高,易损坏接口电路的芯片
(2)通信速率较低,易产生共模干扰,抗噪声干扰性弱
(3)传输距离只有15米
五、RS485通信
1.RS485通信协议
可以在远距离(1500米)条件下以及电子噪声大的环境下有效传输信号,可以连接多个收发器。可以利用单一的RS485接口建立一个设备网络。
RS485采用差分信号进行数据传输,两线间的电压差为+2v-+6v表示逻辑“1”,两线间的电压差为-2v到-6v表示逻辑“0”,RS485的电平与TTL电平兼容,可方便与TTL电路连接。
2.接口
RS485采用两线制,在同一总线上可以存在多个节点,因采用两线制,数据的发送和接受都要使用这对差分信号线,发送和接受不能同时进行,只能采用半双工的方式工作。
处理器产生的信号一般都是TTL信号并不是符合RS485标准的信号,所以一般我们还需要在处理器外部去添加电路将TTL信号转换成差分信号。如MAX485