S3C2440 UATR的学习

本文深入探讨了UART(通用异步传送接收)协议的工作原理,包括数据传输过程和奇偶校验机制。同时,阐述了UART与UART之间及UART与内存之间相关寄存器的作用与操作方法,强调了UART协议在数据通信领域的应用。

1。定义 UATR  通用异步传送接收 ,一种串行传输协议。

2。工作原理  传送数据的格式 开始位+数据+奇偶校验位+结束位 利用多余的位来完成数据正确的传送接收。与通用同步传送接收协议不同,同步传送接收协议需要多余的硬件结构,同步时钟信号线路,但是同步传送接收速度较快,传送的数据没有多余的数据。

3。 要记住的一副图

4。 要记住的两个关系:①UART与UART之间的LINE :就是统一两者之间的传输数据的格式和自动流控制  ②UART与内存之间的关系:就是关于一些中断的事情

       ①UART与UART之间相关寄存器要做的事情  :1。设置传送数据格式的控制寄存器:ULCONn------真正传送数据的位数,停止位,奇偶校验位,以及红外线模式否

                                                                                 2。自动流控制 控制寄存器:UMCONn--------是否利用自动流控制AFC,如果不适用,则相关的控制数据流的软件设置

                                                                                 2。自动流控制  状态寄存器:UMSTATn------接收引脚nCTS是低电平or高电平;CPU读取nCTS后,引脚状态是否发生改变

      ②UART与内存之间相关寄存器:主要就是与中断相关的寄存器

                                                  1。控制寄存器:UCONn----------中断使能,中断类型,时钟选择,以及传送用中断方式还是 DMA方式

                                                  2。状态寄存器:UERSTATn------各种中断是否发生的标志位

5。 上面两个关系的中间部分-------主要是缓冲寄存器FIFO  以及移位寄存器shifter

         相关的寄存器:控制寄存器:1。缓冲控制寄存器UFCONn----------输入输出缓冲器中断触发等级的选择,复位模式的选择

                                 状态寄存器:1。 UTRSTATn---------主要工作:标志输出缓冲区以及移位寄存器是否为空,输入缓冲区是否做好了接受准备

                                                      2。 UFSTATn------------主要工作:输入输出缓冲区是否为满以及缓冲器中的字节数

                                                      3。 UTXHn,URXHn-----主要工作:装载了发送的和接受的8位数据

6。 波特率设置的寄存器:UBRDIV

 

 

 

  

 

### UART与USART通信协议的区别 UART(通用异步收发器)和USART(通用同步异步收发器)是两种常见的串行通信协议,它们在功能、应用场景以及复杂性上存在显著差异。 UART的协议结构较为简单,主要用于实现异步串行通信。它通过发送和接收数据线(TXD和RXD)进行数据传输,通常支持标准的异步串行数据格式,包括起始位、数据位、校验位和停止位。由于其简单性,UART常用于短距离通信,例如与串口屏或传感器模块之间的数据交换[^1]。 相比之下,USART的协议结构更加复杂,支持多种通信模式,包括同步单向通信、半双工单线通信以及异步串行通信。此外,USART还支持一些高级通信标准,例如IrDA(红外线数据协会)、LIN(局域互连网络)、智能卡协议以及RS-485接口驱动程序的启用。这种灵活性使得USART能够适应更广泛的应用场景,尤其是在需要复杂协议支持的工业通信中[^2]。 在波特率的生成方面,USART通常具备小数波特率发生器,可以提供多种波特率选项,从而实现更精确的通信速率控制。而UART的波特率生成通常基于固定分频器,灵活性较低[^2]。 此外,USART支持使用DMA(直接内存访问),可以实现高速数据通信,减少CPU的负担。而UART通常依赖中断或轮询方式进行数据传输,效率较低[^2]。 综上所述,UART和USART在功能和应用场景上的差异决定了它们各自适用的领域。UART适用于简单的异步串行通信需求,而USART则更适合需要复杂协议支持和高速数据传输的应用场景。 ### 示例代码:USART通信 以下是一个简单的USART通信示例代码,适用于某些需要复杂协议支持的应用: ```c #include <stm32f10x.h> void USART_Init(void) { // 配置USART的GPIO、时钟等 RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1 | RCC_APB2Periph_GPIOA, ENABLE); GPIO_InitTypeDef GPIO_InitStruct; // 配置USART的TX和RX引脚 GPIO_InitStruct.GPIO_Pin = GPIO_Pin_9 | GPIO_Pin_10; GPIO_InitStruct.GPIO_Mode = GPIO_Mode_AF_PP; GPIO_InitStruct.GPIO_Speed = GPIO_Speed_50MHz; GPIO_Init(GPIOA, &GPIO_InitStruct); // 配置USART的参数 USART_InitTypeDef USART_InitStruct; USART_InitStruct.USART_BaudRate = 9600; USART_InitStruct.USART_WordLength = USART_WordLength_8b; USART_InitStruct.USART_StopBits = USART_StopBits_1; USART_InitStruct.USART_Parity = USART_Parity_No; USART_InitStruct.USART_HardwareFlowControl = USART_HardwareFlowControl_None; USART_InitStruct.USART_Mode = USART_Mode_Rx | USART_Mode_Tx; USART_Init(USART1, &USART_InitStruct); // 使能USART USART_Cmd(USART1, ENABLE); } void USART_SendByte(uint8_t byte) { USART_SendData(USART1, byte); while (USART_GetFlagStatus(USART1, USART_FLAG_TXE) == RESET); } uint8_t USART_ReceiveByte(void) { while (USART_GetFlagStatus(USART1, USART_FLAG_RXNE) == RESET); return USART_ReceiveData(USART1); } ``` ### 相关问题 1. USART如何支持IrDA和LIN等高级通信协议? 2. UART和USART在硬件资源占用上有何差异? 3. 如何在实际应用中选择UART或USART? 4. USART的DMA功能如何提升通信效率?
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值