UART–(一种通信协议)
通用异步收发器,是一种通用的串行,异步通信总线,该总线有两条数据线,可以实现全双工的发送和接收,在嵌入式系统中常用于主机与辅助设备之间的通信。
波特率
波特率用于描述UART通信时的通信速度,其单位bps是指每秒传输的bit的数量。
一次只能发送一个字节,串口通信不能累计发送,避免累积误差(例如1s发送1,接收方看到的是0.9s,依次10s即有1位的偏差)。
异步通信就是发送方和接收方的时钟不同步。
设置引脚功能—实质上是让引脚在芯片内部连接到某一个对应的控制器上。
UART寄存器详解
1.轮询模式,CPU通过不断访问串口读取数据
2.中断模式,串口有数据时打断CPU,请求CPU访问读取
3.DMA模式,串口直接把数据放入缓冲区,不需要CPU访问。
实现串口通信
#include "exynos_4412.h"void UART_Init(){//1.将GPA1_0,GPA1_1设置为接收引脚和发送引脚GPA1.CON=GPA1.CON & (~(0XFF))|(0X22) ;//2.设置UART2帧格式 ULCON2 8位数据位 1位停止位 无校验 正常模式UART2.ULCON2=UART2.ULCON2 & (~(0x7F))|(0x3);//3.设置UART2发送模式为轮训模式UART2.UCON2=UART2.UCON2 & (~(0XF))|(0X5);//4.设置UART2的波特率为115200 UBRDIV2/UFRACVAL2/UART2.UBRDIV2=53;UART2.UFRACVAL2=4;}void UART_Send(char dat)//开发板发送数据给电脑{//判断发送寄存器是否为空//while(!(UART2.UTRSTAT2&(1<<1)));//将要发送的数据写入寄存器UTXHUART2.UTXH2=dat;}char UART_Rec(void)//开发板接受数据
{char rec;if(UART2.UTRSTAT2& 1){rec=UART2.URXH2; return rec; }else{return 0;}
}int main()
{char recvdat=0;UART_Init();while(1){recvdat=UART_Rec();if(recvdat==0){}else{recvdat++;UART_Send(recvdat);}}return 0;
}
作业
在终端上输入‘2’,LED2点亮,再次输入‘2’,LED2熄灭… …
int main(){GPX2.CON = GPX2.CON & (~(0xF << 28)) | (0x1 << 28);UART_Init();int count=0;char rec=0;while(1){if(rec=UART_Rec())count++;/*点亮LED2*/if(count%2==0)GPX2.DAT = GPX2.DAT | (1 << 7);/*延时*/// delay(1000000);/*熄灭LED2*/elseGPX2.DAT = GPX2.DAT & (~(1 << 7));/*延时*/// delay(1000000);}return 0;}