UART简介
Universal Asynchronous Receiver Transmitter即通用异步收发器,是一种通用的串行、异步通信总线该总线有两条数据线,可以实现全双工的发送和接收在嵌入式系统中常用于主机与辅助设备之间的通信
波特率用于描述UART通信时的通信速度,其单位为bps(bit per second)即每秒钟传送的bit的数量
UART寄存器配置
从电路原理图上可以看到CON7连接到UART_AUDIO_TXD和UART_AUDIO_RXD,最后连接到芯片的GPA1_0和GPA1_1引脚上
将GPA1_0和GPA1_1引脚设置成UART模式
串口控制寄存器
设置UART的帧格式,8位数据位,1位停止位,无校验,正常模式
设置UCON接收和发送为轮训模式
串口状态寄存器
存储各个模式的状态及收发的buffer状态
发送/接收寄存器
波特率寄存器
设置波特率的寄存器,公式为DIV_VAL = UBRDIVn + UFRACVALn/16
如果想设置波特率为115200,并且时钟频率为40Mhz:
DIV_VAL = (40000000/(115200 16)) – 1
= 21.7 – 1
= 20.7
代码:
#include "exynos_4412.h"void uart_Init(void)
{// 将GPA1_0, GPA1_1引脚设置成UART收发模式GPA1.CON &= ~(0xFF) | 0x22;// 设置帧格式,8位数据位,1位停止位,无校验位UART2.ULCON2 &= ~(0x7F) | 0x3;// 设置串口收发为轮训模式UART2.UCON2 &= ~(0xF) | 0x5;// 设置串口波特率:DIV_VAL = (100000000 / (115200 x 16)) – 1 = 53.25UART2.UBRDIV2 = 53;UART2.UFRACVAL2 = 4;
}void uart_Send(unsigned char c)
{// 等待发送缓冲区为空while(!(UART2.UTRSTAT2 & (1 << 1)));// 发送数据UART2.UTXH2 = c;
}char uart_Revice(void)
{char ret = 0;// 等待接收缓冲区为1if ((UART2.UTRSTAT2 & 1)){ret = UART2.URXH2;return ret;}return 0;
}void uart_Send_Str(char * pstr)
{while(*pstr != '\0')UART_Send_Byte(*pstr++);
}int main()
{char ret = 0;uart_Send_Str("hello world");// 串口初始化uart_Init();while(1){ret = uart_Revice();if (ret){uart_Send(ret + 1);}}return 0;
}