UART简介
Universal Asymchronous Receiver Transmitter 即通用一步收发器,是一种通用的串行,一步通信总线该总线有两条数据线,可以实现全双工的发送和接收,在嵌入式系统中常用于主机与辅助设备之间的通信。
通信基础 - 并行和串行
(1)并行通信
(2)串行通信
打一个比方来说:A和B两地之间,并行通信相当于,两地之间有8条车道,而串行通信相当于只有一条路。
并行总线与串行总线相比:速度快,但是耗费更多的资源,而写并行总线的线与线之间可能会产生干扰。所以在实际项目之中更多的是使用串行总线,例如:IIC,SPI
通信基础 - 单工和双工
(1)单工通信
指的是发送器在给接收器发送数据的时候,接收器不能给发送器发送数据,意思是:他们的通信方向是单向的。
(2)双工通信
在发送器给接收器发送数据的时候,接收器也可以给发送器发送数据,意思是:他们的通行方向是双向的。半双工是:在发送器给接收器发数据的时候,接收器不能发数据给发送器。全双工:在发送器给接收器发送数据的同时,也可以发数据的发送器。
通行基础 - 波特率
波特率是描述UART通信时的通信速度,其单位为bps(bit per second)即每秒钟传送的bit的数量。波特率是每秒钟传送的二进制位的个数,而不是字节byte(8bit)。
UART帧格式

(1)先发送一个起始位(低电平)
(2)从低位开始发送数据
(3)验证校验位,看是否发生了错误,奇偶校验位,只能判断错误,但不能修改错误,(可有可无)
(4)停止位,1/1.5或2位,
UART硬件连接

UART控制器
一般情况下处理器都会集成UART控制器我们使用UART进行通信时候只需对其内部的相关寄存器进行设置即可
UART寄存器详解

(1)ULCON寄存器
(2)UCON寄存器
(3)UTRSTAT
(4)UTXH
(5)URXH
(6)UBRDIV
(7)UFRACVAL
(8)波特率的设置方式
UART编程
void UART_Init(void){
/*将GPA1_0和GPA1_1设置为UART2的接收引脚和发送引脚,CPA1CON[0-7]*/
GPA1.CON = GPA1.CON & (~(0xFF << 0)) | (0x22 << 0);
/*设置UART2的帧格式 8位数据位 1位停止位 无校验 正常模式*/
UART2.ULCON2 = UART2.ULCON2 & (~(0X7F << 0)) | (0X3 << 0)
/*设置UART2的接收和发送模式为轮询模式*/
UART2.UCON2 = UART2.UCON2 & (~(0xF << 0)) | (0x5 << 0)
/*设置UART2的波特率为115200 UBRDIV2/UFRACVAL2*/
UART2.UBRDIV2 = 53;
UART2.UFRACVAL2 = 4;
}
void UART_Send_Byte(void){
//是判断发送寄存器是否为空,为空则继续发送数据
while(!(UART2.UTRSTAT & (1 << 1)))
/*将发送的数据写入发送寄存器*/
UART2.UTXH = 'A';
}
void UART_Res_Byte(void){
char Dat = 0;
/*判断寄存器是否接收到数据*/
if(UART2.UTRSTAT2 & 1){
Dat = UART.URXH2;
return Dat;
}
else{
return 0;
}
}
int main(){
char RecDat = 0;
UART_Init();
while(1){
RecDat = UART_Res_Byte();
if(RecDat == 0){
}
else{RecDat = RecDat + 1 ;
UART_Send_Byte(RecDat);
}
}
return 0
}