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)));
//将要发送的数据写入寄存器UTXH
UART2.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*/
else
GPX2.DAT = GPX2.DAT & (~(1 << 7));
/*延时*/
// delay(1000000);
}
return 0;
}