TQ2440 学习笔记—— 23、通用异步收发器 UART

2019-07-13 00:12发布

(韦东山——嵌入式Linux 应用开发完全手册)
通用异步收发器 UART UARTUniversal Asynchronous Receiver/Transmitter,通用异步接收/发送装置)用于异步通信,可以实现全双工发送和接收。最精简的连线方法只有三根电线:TxD 用于发送数据,RxD 用于接收数据,Gnd 用于给双方提供参考电平。
UART 使用的标准的TTL/CMOS 逻辑电平(0 - 5V、0 - 3.3V 等)来表示数据,高电平表示1,低电平表示0.为了增强数据的抗干扰能力、提高传输长度,通常是将TTL/CMOS 逻辑电平 转换为 RS-232 逻辑电平, 3 ~ 12V 表示0,-3 ~ -12V 表示1。
PC 使用串口: 1、确定用哪个串口 2、波特率、流控的选择、数据位、校验位、停止位 3、打开 4、发送接收
/* * 初始化UART0 * 115200,8N1,无流控 */ void uart0_init(void) { GPHCON |= 0xa0; // GPH2,GPH3用作TXD0,RXD0 GPHUP = 0x0c; // GPH2,GPH3内部上拉 ULCON0 = 0x03; // 8N1(8个数据位,无较验,1个停止位) UCON0 = 0x05; // 查询方式,UART时钟源为PCLK UFCON0 = 0x00; // 不使用FIFO UMCON0 = 0x00; // 不使用流控 UBRDIV0 = UART_BRD; // 波特率为115200 } 用到的寄存器:                       GPHCON :端口配置引脚寄存器                       GPHUP:使能上拉禁止寄存器                       ULCON0:线路控制寄存器                       UCON0:通道控制寄存器                       UTRSTAT0:发送/接收状态寄存器                       UBRDIV0:波特率分频寄存器                       UTXTH0:通道0发送缓冲寄存器                       URXTH0:通道0接收缓冲寄存器
发送字符的函数: /* * 发送一个字符 */ void putc(unsigned char c) { /* 等待,直到发送缓冲区中的数据已经全部发送出去 */ while (!(UTRSTAT0 & TXD0READY)); /* 向UTXH0寄存器中写入数据,UART即自动将它发送出去 */ UTXH0 = c; } /* * 接收字符 */ unsigned char getc(void) { /* 等待,直到接收缓冲区中的有数据 */ while (!(UTRSTAT0 & RXD0READY)); /* 直接读取URXH0寄存器,即可获得接收到的数据 */ return URXH0; } 测试结果: