UART通信详解

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
} 

版权声明:本文为qq_52916060原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。