UART详解

UART


通用异步收发传输器(Universal Asynchronous Receiver/Transmitter,通常称作UART 是一种串行异步收发协议,应用十分广泛。UART工作原理是将数据的二进制位一位一位的进行传输。在UART通讯协议中信号线上的状态位高电平代表’1’低电平代表’0’。当然两个设备使用UART串口通讯时,必须先约定好传输速率和一些数据位。


硬件连接

硬件连接比较简单,仅需要3条线,注意连接时两个设备UART电平,如电平范围不一致请做电平转换后再连接,如下图所示:

  • TX:发送数据端,要接对面设备的RX
  • RX:接收数据端,要接对面设备的TX
  • GND:保证两设备共地,有统一的参考平面

在这里插入图片描述


软件通信协议

UART作为异步串口通信协议的一种,工作原理是将数据的字节一位接一位地传输。协议如下:
在这里插入图片描述

空闲位:
UART协议规定,当总线处于空闲状态时信号线的状态为‘1’即高电平
起始位:
开始进行数据传输时发送方要先发出一个低电平’0’来表示传输字符的开始。因为空闲位一直是高电平所以开始第一次通讯时先发送一个明显区别于空闲状态的信号即为低电平。
数据位:
起始位之后就是要传输的数据,数据可以是5,6,7,8,9位,构成一个字符,一般都是8位。先发送最低位最后发送最高位
奇偶校验位:
数据位传送完成后,要进行奇偶校验,校验位其实是调整个数,串口校验分几种方式:
1.无校验(no parity)
2.奇校验(odd parity):如果数据位中’1’的数目是偶数,则校验位为’1’,如果’1’的数目是奇数,校验位为’0’。
3.偶校验(even parity):如果数据为中’1’的数目是偶数,则校验位为’0’,如果为奇数,校验位为’1’。
4.mark parity:校验位始终为1
5.space parity:校验位始终为0
停止位:
数据结束标志,可以是1位,1.5位,2位的高电平。
波特率:
数据传输速率使用波特率来表示,单位bps(bits per second),常见的波特率9600bps,115200bps等等,其他标准的波特率是1200,2400,4800,19200,38400,57600。举个例子,如果串口波特率设置为9600bps,那么传输一个比特需要的时间是1/9600≈104.2us。
在这里插入图片描述
以9600 8N1(9600波特率,8个数据位,没有校验位,1位停止位)为例,这是目前最常用的串口配置,现在我们传输’O’'K’两个ASCII值,'O’的ASCII为79,对应的二进制数据为01001111 ,'K’对应的二进制数据为01001011 ,传输的格式数据如下图所示:
在这里插入图片描述

串口波特率为9600,1bit传输时间大约为104us,传送一个数据实际是10个比特(开始位,8个数据位,停止位),一个bytes传输速率实际为9600*8/10=7680bps。


  • 211
    点赞
  • 1420
    收藏
    觉得还不错? 一键收藏
  • 12
    评论
machine.UART模块是MicroPython中的一个串口通信模块,它允许MicroPython与其他设备(如PC、单片机、传感器等)进行串行通信。该模块在MicroPython的标准库中(不需要额外安装),可以直接在MicroPython的REPL中使用或在MicroPython脚本中导入使用。 下面是machine.UART模块中一些常用的方法和属性: #### 1. 创建一个UART对象 ```python uart = machine.UART(1, baudrate=115200) # 以115200波特率创建UART对象,使用UART1端口 ``` #### 2. 设置UART对象的属性 ```python uart.init(baudrate=9600, bits=8, parity=None, stop=1) # 设置波特率、数据位、校验位和停止位 uart.deinit() # 关闭UART对象 uart.any() # 返回接收缓冲区中的字节数 uart.read(n) # 从接收缓冲区中读取n个字节 uart.readall() # 从接收缓冲区中读取所有字节 uart.write(buf) # 向UART发送buf中的数据 uart.writechar(char) # 向UART发送一个字符 uart.writeirq(trigger, priority, handler) # 设置UART发送中断 uart.readirq(trigger, priority, handler) # 设置UART接收中断 ``` #### 3. 示例 下面是一个使用machine.UART模块的简单示例,该示例将MicroPython的REPL输出重定向到UART1端口,并将UART1端口接收到的数据打印到MicroPython的REPL中。 ```python import machine uart = machine.UART(1, baudrate=115200) while True: if uart.any(): data = uart.readall() print(data) if not uart.is_tx_busy(): uart.write(input() + '\n') ``` 在这个示例中,我们首先创建了一个UART对象,并将其设置为使用UART1端口和115200波特率。然后我们进入一个无限循环中,等待UART1接收到数据。当UART1接收到数据时,我们读取所有的数据,并将其打印到MicroPython的REPL中。同时,我们还等待MicroPython的REPL输入,并将其发送到UART1端口。
评论 12
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值