UART是Universal Asynchronous Receiver/Transmitter(通用异步收发传输器)的简称,在单片机和嵌入式系统中,串口(UART)一直都 是非常重要的外设。虽然串口的速度并不快,但是因为它使用简单(串口可能是两个芯片之间传输数据最简单的方式),占用软件和硬件资源 少,所以在通信、控制、数据传输、仿真调试等许多方面有非常广泛应用。
测试镜像:v831-m2dock-maixpy3-0.4.0-20220114.img
测试所用maixpy3版本:0.4.0
UART
在 Linux 系统中,串口是以设备的形式存在(/dev/ttyS*)
,所使用的方式和原来的单片机方式有所不同。这是系统标准的 UART 通讯,和 Linux 系统中的串口操作相似。
对于 MaixII-Dock(v831),不要使用 UART-0 通道来进行串口通讯。这个串口是直连芯片,会有一些其他数据吞吐
定义UART
import serial
ser = serial.Serial("/dev/ttyS1",115200) # 连接串口
print('serial test start ...')
ser.write(b"Hello Wrold !!!\n") #写
serial.Serial属性说明
__init__ ( port=None , baudrate=9600 , bytesize=EIGHTBITS , parity=PARITY_NONE , stopbits=STOPBITS_ONE , timeout=None , xonxoff=False , rtscts=False , write_timeout=None , dsrdtr=False , inter_byte_timeout=None)
看加粗的地方就行
名称 | 含义 |
---|---|
port | 读或写端口(设备名称)取决于操作系统。例如 GNU/Linux 上的/dev/ttyUSB0或 Windows 上的COM3 |
baudrate | 波特率 |
bytesize | 数据位数 |
parity | 奇偶校验,PARITY_NONE:无校验,PARITY_EVEN:偶校验,PARITY_ODD:奇校验 |
stopbits | 停止位 |
timeout | 读超时设置 |
writeTimeout | 写超时设置 |
xonxoff | 软件流控 |
rtscts | 硬件流控 |
dsrdtr | 硬件流控 |
interCharTimeout | 字符间隔超时 |
读取
名称 | 含义 |
---|---|
readline() | 读取一行数据,以’\n’结束,没有‘\n’就会一直等待,堵塞。 |
read() | 读取一个字节数据 |
read(10) | 读取10个字节,如果没有设置timeout,一直等到读取完毕。 |
写入
名称 | 含义 |
---|---|
write() | 只能写字符 |
发送16进制字符时需要转化一下
如命令: 56 ,发送指令如下:
my_serial.write(’\x56’)
例程
主控板:V831
不要看这张图,这张图串口1标识反了!!!
看下面说明才对
UART-1 TX (PG6)和 UART-1 RX (PG7)
将 MaixII-Dock 上 UART-1 TX 和 UART-1 RX 短接即可进行串口通讯测试
例程:自测
注意:此代码需要在root路径下使用
import serial
#串口1 波特率9600
ser = serial.Serial("/dev/ttyS1",9600,timeout=1000)
print('serial test start ...')
for i in range(3):
ser.write(b"xianyu !!!\n") # 写
tmp = ser.readline() # 读
print(tmp) # 打印
效果
root@sipeed:~# python main.py
serial test start ...
b'xianyu !!!\n'
b'xianyu !!!\n'
b'xianyu !!!\n'