UART(Universal Asynchronous Receiver/Transmitter)是一种异步收发传输器,是设备间进行异步通信的关键模块。该设备通过信号线将需要发送的数据以二进制的形式一位一位地发送出去,在传输的过程中高电平表示发送的数据为“1”,低电平表示数据为“0”。异步通信的发送端和接收端可以由各自的时钟来控制数据的发送和接收,这两个时钟源彼此独立,互不同步。
UART具有双向通信能力,可以实现全双工传输和接收。全双工数据通信允许数据同时在两个方向上传输,这提高了数据传输的效率。此外,UART的串行数据传输不需要使用时钟信号来同步传输,而是依赖于发送设备和接收设备之间预定义的配置。
UART通信过程需要设置波特率、数据长度、开始/停止位等参数。波特率决定了发送数据的速度,而数据长度和开始/停止位则用于确保数据的正确传输和接收。
在UART通信中,两个UART直接相互通信。发送UART将控制设备(如CPU)的并行数据转换为串行形式,以串行方式将其发送到接收UART。只需要两条线即可在两个UART之间传输数据,数据从发送UART的Tx引脚流到接收UART的Rx引脚。
UART属于异步通讯,这意味着没有时钟信号,取而代之的是在数据包中添加开始和停止位。这些位定义了数据包的开始和结束,因此接收UART知道何时读取这些数据。
当接收UART检测到起始位时,它将以特定波特率的频率读取。波特率是数据传输速度的度量,以每秒比特数(bps)表示。两个UART必须以大约相同的波特率工作,发送和接收UART之间的波特率只能相差约10%。
UART串口通信实验
数据位:8bit,停止位1位,无校验位,波特率115200bps
uart_rxd:数据线
clk_cont:循环时钟计数器0-433
115200bps,1bit耗时1/115200s=8680.5ns
系统时钟50MHZ,1时钟周期20ns
8680.5/20=434.025,
可认为每434个时钟周期发送1bit位数据
rx_cnt:接收数据位数计数器。Clk_cnt每计数434,rx_cnt+1.记录接收了多少位(包括起始位和结束位)。为0是起始位,为9是结束位。
start_flag:检测到uart_rxd下降沿拉高
rx_flag:检测到start_flag拉高,它也拉高。检测到停止位拉低。
uart_data(寄存器):在rx_cnt为1时将数据bit0存入寄存器第0位… …
uart_done:传输完成标志位,rx_cnt为9时拉高
工作原理
发送UART从数据总线获取并行数据后,它会添加一个起始位,一个奇偶校验位和一个停止位来组成数据包并从Tx引脚上逐位串行输出,接收UART在其Rx引脚上逐位读取数据包。
UART数据包含有1个起始位,5至9个数据位(取决于UART),一个可选的奇偶校验位以及1个或2个停止位:
在实际应用中,UART广泛应用于各种设备和系统中,以实现数据的有效传输和通信。例如,在计算机硬件中,UART用于连接计算机的内部和外部设备,如调制解调器、打印机等。在嵌入式系统中,UART也扮演着重要角色,用于实现设备之间的数据交换和通信。
审核编辑:黄飞
全部0条评论
快来发表一下你的评论吧 !