【Micropython基础教程】UART串口


前言

MicroPython 是一种精简版的 Python 编程语言,专门设计用于微控制器和嵌入式系统。它提供了 Python 语言的全部特性,并且能够直接运行在各种微控制器上,包括 ESP8266、ESP32 等。其中,UART(通用异步收发器)串口是 MicroPython 中常用的通信接口之一,它能够方便地实现设备间的串行通信,例如与传感器、显示屏等外部设备进行数据交换。

本教程将介绍 MicroPython 中如何使用 UART 串口进行数据传输,包括初始化 UART 串口、发送和接收数据等基本操作,以帮助初学者快速上手。


一、数据传输的基本概念

1.1 串行与并行通信

串行通信:
串行通信是指通过单个数据线依次传输数据位,一个接一个地发送或接收数据。在串行通信中,每个数据位依次按照顺序传输,每个时钟周期只传输一个数据位。由于只需要一根数据线,串行通信在物理线缆使用上相对简单,但数据传输速率较慢。典型的串行通信接口包括 UART、SPI、I2C 等。

并行通信:
并行通信是指同时使用多个数据线传输数据,每个数据线传输一个数据位,从而实现多个数据位同时传输。在并行通信中,多个数据位同时传输,因此可以在同一个时钟周期内传输多个数据位,从而实现较高的数据传输速率。然而,并行通信需要使用多个物理线缆,布线复杂,并且受到信号传输时延等问题的影响。典型的并行通信接口包括并行总线(如 PCI、ISA 等)。

比较:
速率: 串行通信速率较慢,每次传输一个数据位;而并行通信速率较快,每次可以同时传输多个数据位,因此可以实现更高的数据传输速率。
线缆: 串行通信只需要一根数据线,线缆布线相对简单;而并行通信需要多个数据线,布线复杂。
时延: 串行通信中每个数据位依次传输,因此受到时延影响较小;而并行通信中多个数据线同时传输,受到时延影响较大。
总体来说,串行通信适用于远距离通信和简单布线的应用场景,而并行通信适用于高速数据传输和较短距离的应用场景。

1.2 单工/半双工/全双工通信

单工通信(Simplex):
单工通信是指数据只能单向传输的通信方式,通信的一方只能发送数据,另一方只能接收数据。在单工通信中,数据流动的方向是固定的,一般用于只需单向传输数据的场合,如广播电台、电视等。

半双工通信(Half-Duplex):
半双工通信是指通信的双方都可以发送和接收数据,但不能同时进行。在同一时刻,一方只能发送数据,另一方只能接收数据。因此,在半双工通信中,数据的流动方向是可以改变的,但不能同时发送和接收数据。

全双工通信(Full-Duplex):
全双工通信是指通信的双方可以同时进行发送和接收数据。在全双工通信中,通信的双方能够独立地发送和接收数据,不会发生冲突。全双工通信常用于需要双向同时传输数据的场合,如电话通话、网络通信等。

1.3 同步/异步通信

同步通信:
在同步通信中,数据的传输是在发送方和接收方之间按照事先约定好的时钟信号进行的。发送方和接收方需要共享一个时钟信号,以确保数据传输的同步性。通常,同步通信需要发送方和接收方事先协商好时钟频率和时序控制方式,以便正确地进行数据传输。常见的同步通信接口包括 SPI(串行外设接口)、I2C(Inter-Integrated Circuit)等。

异步通信:
在异步通信中,数据的传输不需要发送方和接收方共享一个时钟信号。发送方和接收方在通信开始之前不需要进行时钟同步,而是通过发送数据中的起始位、终止位和校验位等信息来实现数据的同步和解析。异步通信不需要事先协商时钟频率和时序控制方式,因此更加灵活。常见的异步通信接口包括 UART(通用异步收发器)、RS-232 等。

比较:
时序控制: 同步通信需要发送方和接收方共享一个时钟信号进行数据传输,而异步通信不需要时钟同步。
灵活性: 异步通信更加灵活,不需要事先协商时钟频率和时序控制方式,适用于简单的通信应用。而同步通信需要事先约定时钟频率和时序控制方式,相对不够灵活。
应用场景: 同步通信适用于对时序要求较高的应用场景,如高速数据传输;而异步通信适用于不需要时序同步的简单通信场景,如串口通信。
总的来说,同步通信和异步通信各有其适用的场景,开发者可以根据具体的需求和应用场景选择合适的通信

1.4 波特率

波特率是指串行通信中每秒钟传输的比特数,通常用波特率(bps)来表示。它决定了数据传输的速度和稳定性,即每秒钟能够传输的位数。在串行通信中,发送方和接收方需要使用相同的波特率才能正确地进行数据传输。常见的波特率包括 9600 bps、115200 bps 等。

1.5 UART 四要素

UART(Universal Asynchronous Receiver/Transmitter,通用异步收发器)是一种常见的串行通信接口,用于实现串行数据的发送和接收。UART 通信的四要素包括:
波特率(Baud Rate): 波特率是串行通信中每秒钟传输的比特数,决定了数据传输的速度。发送方和接收方需要使用相同的波特率才能正常通信。
数据位(Data Bits): 数据位指的是每个数据字节中所包含的位数,常见的数据位数包括 5 位、6 位、7 位、8 位等。
停止位(Stop Bits): 停止位是在每个数据字节之后发送的用于指示数据传输结束的位。通常情况下,停止位的个数为 1 位或 2 位。
校验位(Parity Bit): 校验位用于检测数据传输过程中是否发生了错误,常见的校验方式包括奇校验、偶校验、无校验等。

二、machine.UART 类

2.1 UART构造方法

UART的构造方法如下:

class machine.UART(id,baudeate,bits,parity,rx,tx,stop,timeout)
使用实例:uart = UART(2,115200,rx = 9,tx = 8,bits = 8, parity = None, stop = 1)
  1. 串口id,有效的为1和2
  2. baudeate 波特率,默认 9600
  3. bits 单个字节的位数,默认为 8
  4. parity 校验方法,0为偶校验;1为奇校验;None为无校验
  5. rx 接收口的 GPIO 编号
  6. tx 发送口的 GPIO 编号
  7. stop 停止位个数,默认为 1
  8. timeout 超时时间,取值范围:0~2147483947。timeout 参数表示在读取数据时等待数据到达的最长时间。如果在指定的超时时间内没有接收到新的数据,读取操作将返回。这个机制有助于防止程序在等待数据时被永久阻塞,提高程序的响应性和鲁棒性。

2.2 读取数据

我们可以使用下面这个函数读取指定字节的数据:

uart.read([nbytes])

返回值:一个包含读入数据的字节对象。如果如果超时则返回 None。

我们可以使用下面这个函数读取字符到 buf 中,如果指定读 n 个字节,那么最多读取 n 个字节,否则就读取尽可能多的数据。另外读取数据的长度不超过 buf 的长度。

uart.readinto(buf[, nbytes])

我们可以使用下面这个函数读取一行数据:

uart.readline()

返回值:一个包含读入数据的字节对象。如果如果超时则返回 None。

我们还可以使用下面这个函数检测是否有数据到来:

uart.any()

返回值:可读数据长度。

2.3 发送数据

我们可以使用下面这个函数把一个buf发送出去:

uart.write(buf)

2.4 关闭串口

我们可以使用下面这个函数关闭串口:

uart.deinit()

三、示例代码

from machine import UART
import time

# 配置 UART
uart = UART(1, baudrate=115200, tx=Pin(4), rx=Pin(5))

# 发送数据
uart.write("Hello, UART!\n")

# 接收数据
while True:
    if uart.any():
        received_data = uart.readline()
        print("Received:", received_data.decode("utf-8"))
        break

# 关闭 UART
uart.deinit()

在这里插入图片描述


总结

通过本教程,我们学习了在 MicroPython 中如何使用 UART 串口进行通信。我们首先了解了 UART 串口的基本概念和工作原理,然后学习了如何在 MicroPython 中初始化 UART 串口、设置波特率等参数,并通过示例代码演示了如何发送和接收数据。

掌握了 UART 串口的基本操作后,我们就能够利用 MicroPython 轻松地与各种外部设备进行串行通信,从而实现更多有趣的应用,比如与传感器进行数据交换、与其他微控制器或单片机进行通信等。希望本教程能够帮助你更好地理解和应用 MicroPython 中的 UART 串口功能,为你的项目开发和学习提供便利。

  • 24
    点赞
  • 26
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

人才程序员

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值