UART实验
一、UART简介Universal Asynchronous Receiver Transmitter 即通用异步收发器是一种通用的串行、异步通信总线该总线有两条数据线可以实现全双工的发送和接收在嵌入式系统中常用于主机与辅助设备之间的通信二、波特率波特率用于描述UART通信时的通信速度其单位为bpsbit per second)即每秒钟传送的bit的数量三、UART控制器一般情况下处理器中都会集成UART控制器我们使用UART进行通信时候只需对其内部的相关寄存器进行设置即可四、UART硬件连接TXD:数据发送RXD:数据接收五、UART帧格式1、起始位是为了区分空闲状态和发送数据的状态在发送数据前必须发送一个区别于空闲状态的信号来通知对方空闲状态是高电平所以起始位只能是低电平了2、校验位UART有三种校验奇校验、偶校验、无校验3、数据位5-8位数据位先发低位后发高位六、引脚功能设置设置引脚功能的本质是让引脚在芯片内部连接到某一个对应的控制器上七、UART控制器UART 控制器硬件模块 └── 实现 UART 协议通信标准 ├── 波特率配置 ├── 帧格式数据位/停止位/校验 └── 红外编解码可选功能1、UART 控制器硬件组成模块功能波特率生成器产生通信时钟源SCLK_UART发送器Tx FIFO 发送移位器 →TxDn接收器Rx FIFO 接收移位器 ←RxDn控制单元配置帧格式、使能中断等2、UART 协议特性软件可配波特率可编程数据位5/6/7/8 位停止位1/2 位奇偶校验奇/偶/无红外调制可选3、关系总结UART 控制器是硬件实现UART 协议是通信规则控制器通过配置寄存器来支持协议的各种特性。4、数据收、发过程波特率发生器使用 SCLK_UART。发送器和接收器包含 FIFO 和数据移位器。要传输的数据写入 Tx FIFO发送队列并复制到发送移位器中。通过发送数据引脚TxDn进行移位输出。接收到的数据从接收数据引脚RxDn移位出来并从移位器复制到 Rx FIFO 中。八、波特率的作用异步通信没有时钟线靠波特率约定采样时刻停止位周期性地重新同步降低累积误差。通过UBRDIV 的[0:15]位来控制波特率波特率并不是直接写进去的需要进行运算1、计算波特率例如如果波特率是 115200 bps而 SCLK_UART 为 40 MHz实际时钟频率为100MHz那么 UBRDIVn 和 UFRACVALn 应为DIV_VAL (40000000 / (115200 × 16)) - 1 21.7 - 1 20.7UBRDIVn 20DIV_VAL 的整数部分UFRACVALn / 16 0.7(UFRACVALn 等于0.7*16结果四舍五入)因此UFRACVALn 11九、实验过程将GPA1_0和GPA1_1设置成UART2 的接收引脚和发送引脚GPA1CON[7:0]设置UART2的帧格式 8位数据位 1位停止位 无校验位 正常模式ULCON2设置UART2的接收和发送模式为轮询模式UCON2[3:0]设置UART2的波特率为115200UBRDIV2/UFRAVAL2十、代码#include exynos_4412.h void Uart2_Init(){ //1、将GPA1_0和GPA1_1设置成UART2 的接收引脚和发送引脚 GPA1CON[7:0] GPA1.CONGPA1.CON (~(0xFF)) |(0x22); //2、设置UART2的帧格式 8位数据位 1位停止位 无校验位 正常模式 ULCON2 UART2.ULCON2UART2.ULCON2 (~(0x7F)) |(0x30); //3、设置UART2的接收和发送模式为轮询模式 UCON2[3:0] UART2.UCON2UART2.UCON2 (~(0xF)) |(0x50); //4、设置UART2的波特率为115200 UBRDIV2/UFRAVAL2 UART2.UBRDIV253; UART2.UFRACVAL24; } int main() { Uart2_Init(); while(1){ while(!(UART2.UTRSTAT2 11)); UART2.UTXH2A; while(!(UART2.UTRSTAT2 11)); UART2.UTXH2b; while(!(UART2.UTRSTAT2 11)); UART2.UTXH2C; while(!(UART2.UTRSTAT2 11)); UART2.UTXH2d; } return 0; }十一、注意接收端接收时不会是ABCD这个原因是CPU向寄存器写数据的速度与发送器向外发的速度是不一致的