UART通用同步异步收发器能够灵活地与外部设备进行全双工数据交换,支持同步单向通信以及多处理器通信。常用于短距离、低速的串行通信,通过可编程波特率发生器提供了多种波特率。 首先需要对同步异步,单工半双工全双工有一定的了解。
同步、异步区别
1. 同步通信时钟频率一致(同一条时钟线相连),发送端发送连续的比特流;异步通信时不要求接收端时钟和发送端时钟同步,发送端发送完一个字节后,可经过任意长的时间间隔再发送下一个字节。
2. 同步通信效率高;异步通信效率较低。
3. 同步通信较复杂,双方时钟的允许误差较小;异步通信简单,双方时钟可允许一定误差。
4. 同步通信可用于点对多点;异步通信只适用于点对点。
全双工、半双工区别:
1. 单工:简单的说就是一方只能发信息,另一方则只能收信息,通信是单向的。2. 半双工:比单工先进一点,就是双方都能发信息,但同一时间则只能一方发信息。3. 全双工:比半双工再先进一点,就是双方不仅都能发信息,而且能够同时发送。
UART支持同步半双工通信和异步全双工模式,通过配置控制寄存器实现工作模式0-3,其中模式0为同步半双工模式,模式1-3为异步全双工模式。
传输数据的结构四种模式有所不同,就模式3的数据结构进行说明:Start(1Bit)+Data(8Bit)+B8(1Bit)+Stop(1-2Bit),其中Start为起始位、Data为数据位。Stop为停止位,位数由控制寄存器UARTx_SCON.STOPBIT控制。主要说明一下B8在不同模式下代表不同的含义。模式2/3的正常工作模式下B8一般设置为奇偶校验位,用以校验数据是否正确。在多机通信的工作模式下,B8通常用以区别数据帧与地址帧,将B8位置0代表当前为数据帧,将B8位置1代表当前为地址帧。
进行UART配置的部分代码及配置流程举例:
stcConfig.enRunMode = UartMode3;//模式3
stcConfig.enStopBit = Uart1bit; //1bit停止位
stcMulti.enMulti_mode = UartNormal;//正常工作模式
Uart_SetMultiMode(UARTCH1,&stcMulti);//多主机单独配置
enTb8 = UartEven;//偶校验
Uart_SetMMDOrCk(UARTCH1,enTb8);
Uart_Init(UARTCH1, &stcConfig);//串口初始化
Uart_SetClkDiv(UARTCH1,Uart8Or16Div);//采样分频
stcBaud.u32Pclk = Sysctrl_GetPClkFreq();
stcBaud.enRunMode = UartMode3;
stcBaud.u32Baud = 9600;
u16Scnt = Uart_CalScnt(UARTCH1,&stcBaud);//波特率计算
Uart_SetBaud(UARTCH1,u16Scnt);//波特率设置
Uart_ClrStatus(UARTCH1,UartRC);//清接收请求
Uart_EnableIrq(UARTCH1,UartRxIrq);//使能串口中断
Uart_EnableFunc(UARTCH1,UartRx);//使能收发
|