在BPI-CanMV-K230D-Zero开发板上配有相应的串口资源,通过它们不但可以实现设备的数据交流,还可控制相应的串口设备实现特点的功能。
在开发板上,通过python编程来实现串口的通讯功能是十分方便的,基本上只需简单的3步就可实现。
1)导入使用UARTC功能
实现该功能的语句为:
from machine import UART
from machine import FPIOA
2)配置引脚及波特率等
实现该功能的语句为:
fpioa = FPIOA()
fpioa.set_function(5, fpioa.UART2_TXD)
fpioa.set_function(6, fpioa.UART2_RXD)
#UART2: baudrate115200, 8bits, parity none, one stopbits
uart = UART(UART.UART2, baudrate=115200, bits=UART.EIGHTBITS, parity=UART.PARITY_NONE, stop=UART.STOPBITS_ONE)
3)数据收发
实现该功能的语句为:
uart.write("UART test:")
uart.read()
其中,语句uart.write("UART test:") 的作用是发送"UART test:" 这个字符串,
而语句uart.read() 的作用则是接收数据。
在使用引脚5和6为串口2的情况下,其外部的串口模块与开发板相连接的形式如图1所示。

图1 连接串口模块
在执行完以发送字符串后,通过串口工具软件可查看到测试结果,见图2所示。

图2 串口测试
至于接收处理,则不能单凭一句uart.read() 来完成,因为接收数据必须是在发送方发送数据的情况下,否则是见不到数据内容的。
为此,需所用下面的程序来测试:
while 1 :
u = uart.read()
y=u
if y == None :
print('no')
else :
print(y)
print(len(y))
print(str(y[0:3]))
time.sleep(1)
在发送方发送“01 02 03 04” 4个字节数据的情况下,其测试结果如图3所示。

图3 测试结果
其中,语句print(len(y))的作用是获取接收数据的字节数,语句print(str(y[0:3]))的作用是对接收数据的内容进行提取。
当没有接收到数据时,会给出“NO”的信息提示。
此外,在读取多行信息时,还可按行来读取信息,其语句为:
uart.readline()
对于外部串口设备来讲,单纯的发送字符串信息是难以满足需求的,例如要对语音模块进行控制,就需要发送10个字节的指令码,那还如何处理呢?
方法就是使用元组,以起到通常数组的功效。
一个控制MP3模块发送播放指令的程序如下:
t1=(b'\x7e',b'\xff',b'\x06',b'\x03',b'\x00',b'\x00',b'\x01',b'\xfe',b'\xf7',b'\xef')
i=0
for i in range(10):
uart.write(t1[i])
在执行程序后,其接收效果如图4所示,说明发送字节指令成功。

图4 接收效果