UART
UART(通用异步收发传输器)的简称,在单片机和嵌入式系统中,串口(UART)一直都是非常重要的外设。虽然串口的速度并不快,但是因为它使用简单(串口可能是两个芯片之间传输数据最简单的方式),占用软件和硬件资源少,所以在通信、控制、数据传输、仿真调试等许多方面有非常广泛应用。很多设备或者模块甚至都会提供专用的串口接口用于通信和控制,如GPRS模块、蓝牙/WiFi透传模块等。UART使用一个GPIO做发送,一个GPIO做接收,没有单独的时钟信号。收发双方需要先约定好相同的波特率、数据位、校验位、停止位等参数才能正常通信,所以也叫做异步串行总线。
1.获取UART类的方法
>>> from pyb import UART
>>> help(pyb.UART)
object <class 'UART'> is of type type
init -- <function>
deinit -- <function>
any -- <function>
read -- <function>
readline -- <function>
readinto -- <function>
write -- <function>
irq -- <function>
writechar -- <function>
readchar -- <function>
sendbreak -- <function>
RTS -- 256
CTS -- 512
IRQ_RXIDLE -- 16
>>>
在MicroPython中,操作串口和使用GPIO一样简单。我们先看看串口的常用函数,从这里就可以看出串口的基本使用方法。
串口的基本使用方式是,首先定义使用的串口,再设置串口参数(最主要就是设置波特率),然后通过 write()函数发送缓冲区或者字符串。或者用 any()函数判断是否接收到数据,再用read()函数读取数据。
UART的函数如下:
(1)class pyb.UART(bus,...)
bus:1-6,或者‘XA’,‘XB’,‘YA’,‘YB’。
在PYB V10上,串口对应的GPIO是:
(2)uart.init(baudrate,bits=8,parity=None,stop=1,timeout=1000,flow=None,timeout_char=0,read_buf_len=64)
串口初始化。
◆baudrate:波特率
◆bits:数据位,可以是7/8/9
◆parity:奇偶校验位,可以设置为None,0 (even)或1 (odd),默认无校验
◆stop:停止位,1/2
◆flow:流量控制,可以是None,UART.RTS,UART.CTS或UART.RTS|UART.CTS,默认None(无流量控制)
◆timeout:读取一个字节的超时时间(ms)
◆timeout_char:读或写时两个字节之间的等待时间
◆read_buf_len:读缓存的长度,0代表禁用缓冲区
(3)uart.deinit()
关闭串口。
(4)uart.any()
返回缓冲区数据个数,大于0代表收到数据。
(5)uart.writechar(char)
写入一个字节。
(6)uart.read([nbytes])
读取最多nbytes个字节。如果数据位是9bits,那么一个数据占用两个字节,并且nbytes必须是偶数。
(7)uart.readall()
读取所有数据。
(8)uart.readchar()
读取一个字节。
(9)uart.readinto(buf[,nbytes])
buf:数据缓冲区;
nbytes:最大读取数量。
(10)uart.readline()
读取一行。
(11)uart.write(buf)
写入缓冲区。在9bits模式下,两个字节算一个数据。
(12)uart.sendbreak()
往总线上发送停止状态,拉低总线13bits时间。
注:
当设置波特率时,如果波特率的误差超过5%,将引起一个异常。
当无奇偶校验时,数据位可以设置为8或9位;而使用奇偶校验时,数据位只能设置成7或8位。
在9位数据位模式下,无论读或写,一个数据都占用2个字节。
目前在MicroPython中,串口还不支持回调函数(中断),只能通过查询的方式(any()函数)来判断是否收到了数据。考虑到串口通信的速度不是太快,在大部分情况下这种方式是能够满足性能上的要求的。
在PYB V10上,只有串口2和3支持流量控制功能。