翼度科技»论坛 编程开发 python 查看内容

张高兴的 MicroPython 入门指南:(三)使用串口通信

6

主题

6

帖子

18

积分

新手上路

Rank: 1

积分
18
目录

什么是串口

串口是串行接口的简称,这是一个非常大的概念,在嵌入式中串口通常指 UART(Universal Asynchronous Receiver/Transmitter,通用异步收发器)。使用串口进行的通信叫做串行通信,与之相对的一个概念是并行通信。串行通信是指数据一位一位的按顺序传输,而并行通信则是多位数据同时传输。如下图所示,DATA BUS 到 UART 1 之间是并行通信,UART 1 到 UART 2 之间是串行通信。

串口通信的数据帧格式如下图所示,通常一帧共包括 10 位:1 个起始位,8 个数据位和 1 个停止位。有一些特殊的数据帧在停止位前面包含 1 位的奇偶校验位,还有的停止位有 2 个比特。其中起始位为低电平(0),标志着数据传输的开始;停止位为高电平(1),表示数据帧传输结束;数据位则为实际发送的数据,使用高低电平来表示二进制信息,如果发送的内容是文本,那么这段数据为字符的二进制编码(ASCII、UTF-8等)。数据传输的速率我们使用波特率(Baud Rate)来表示,即每秒钟传送的码元符号的个数。比如数据传输速率为 9600 字符/s,那么这时的波特率为 9600。

设备进行串口通信时,设备的连线如下图所示,两个设备的信号线,即发送端(TXD)与接收端(RXD)交叉相连,并且需要共地。在 Raspberry Pi Pico 的引脚上共引出了 2 组串口,即 UART0 与 UART1。

使用方法

使用 MicroPython 控制 GPIO 要使用 machine 包中的 UART 类。
  1. from machine import UART
复制代码
通过构造函数实例化获取串口对象。
  1. UART(id: int, baudrate: int = 115200, ...)
复制代码

  • id 指串口的编号。对于 Pico 而言只能是 0 或 1。
  • baudrate 用于设置波特率。
  • tx、rx 参数指定要使用的 tx、rx 引脚。
  • parity 设置校验位。None 无,0 偶数,1 奇数。
  • stop 设置停止位的长度。
  • timeout 设置读取超时时间,单位为毫秒。
使用 init() 方法可以修改串口的设置,方法参数与构造函数的参数一致。常见的用法参考下面的例子:
  1. uart0 = UART(0, 9600)   # 实例化串口 0,波特率为 9600
  2. uart0.init(115200, bits=8, parity=None, stop=1) # 修改串口 0 设置
  3. uart1 = UART(1, baudrate=9600, tx=Pin(8), rx=Pin(9))    # 实例化串口 1 并指定引脚
复制代码
实例化串口对象后,使用 write(buf: bytearray) 方法发送数据,发送成功会返回字节数,失败则返回 None。
  1. data = b'hello world'
  2. uart0.write(data)
复制代码
接收数据使用 read(nbytes: Optional[int] = None) 方法,nbytes 设置接收的字节数,读取成功会返回一个字节对象,读取超时则返回 None。也可以使用 readline() 方法读取一行。
  1. data = bytes()
  2. data = uart0.read(10)
  3. print(data.decode('utf-8')) # 解码成 utf-8 字符串
  4. print(uart0.readline()) # 从串口读取一行
复制代码
有些时候需要判断串口中有没有数据,可以使用 any() 方法。
  1. while uart0.any() > 0:
  2.     print(uart0.readline())
复制代码
   

来源:https://www.cnblogs.com/zhanggaoxing/p/18316272
免责声明:由于采集信息均来自互联网,如果侵犯了您的权益,请联系我们【E-Mail:cb@itdo.tech】 我们会及时删除侵权内容,谢谢合作!

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x

举报 回复 使用道具