MicroPython内核开发笔记书内软件用例 :UART相关实验
简 介: 本文给出了 MicroPython内核开发笔记:书内嵌入实验任务 中的 UART 部分软件用例部分内容。
关键词
: MicroPython,MM32F3277
- 本书稿内容隶属于 MicroPython内核开发笔记:书内嵌入实验任务 中的内容。
§01 书稿内容
在MM32F3277中存在 八个串口,其中串口 UART1 被用于 REPL,通常情况下不用于应用程序开发。 用于 REPL 的 UART1 占用单片机管脚有两种配置:
- 配置1:使用PA9(TXD1),PA10(RXD1)
- 配置2:使用PB6(TXD1),PB7(RXD1)
由于第一个串口(UART0)被用于交互界面(REPL),所示留给开发者使用的串口是从 UART2之后的串口。
一、基础实验
1、查看串口信息
可以通过以下小程序,查看除了串口1之外的其它八个串口对应的管脚资源。程序的最后一行是列出串口可以被调用的函数。
from machine import UART
for i in range(7):
print(UART(i+1))
dir(UART(1))
- 1
- 2
- 3
- 4
- 5
- 6
上述程序执行之后,输出的信息为:
UART(1): baudrate=9600 on RX(PA3), TX(PA2)
UART(2): baudrate=9600 on RX(PB11), TX(PB10)
UART(3): baudrate=9600 on RX(PC11), TX(PC10)
UART(4): baudrate=9600 on RX(PA5), TX(PA4)
UART(5): baudrate=9600 on RX(PB1), TX(PB0)
UART(6): baudrate=9600 on RX(PE7), TX(PE8)
UART(7): baudrate=9600 on RX(PD1), TX(PD0)
['__next__', 'any', 'read', 'readinto', 'readline', 'write', 'PARITY_EVEN', 'PARITY_NONE', 'PARITY_ODD', 'init']
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
由此可以看到 MM32F3277中所使用到的七个串口分别对应的外部管脚。
UART 可以被调用的函数包括:
- read : 从串口缓冲区读入数据;
- readinto:从串口缓冲区读入数据并存入给定的数据缓冲区;
- readline:读入一行信息。当接收到会车字符时返回;
- write:将数据通过串口发送;
- any : 返回窗口缓冲区中可以被读取的字节数量;
下面给出了 UART 的常用函数的调用方式。
uart.read(10) # read 10 characters, returns a bytes object
uart.read() # read all available characters
uart.readline() # read a line
uart.readinto(buf) # read and store into the given buffer
uart.write('abc') # write the 3 characters
- 1
- 2
- 3
- 4
- 5
2、测试UART2发送信号
下面代码初始化 UART2,波特率为115200,每隔10ms发送 0x55(对应的字符 ‘U’)数据。串口发送数据是通过 write() 函数调用来实现的,每一次发送一个字节。
from machine import Pin,UART
import utime
uart2 = UART(1, 115200)
print('Test UART.')
while True:
_ = uart2.write(b'U')
utime.sleep_ms(10)
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
利用示波器测试 PA2(TX2)的输出波形:
▲ 图1.1.1 PA2(TX2)测量到输出波形
3、测试UART3接收数据
使用短路子将 RXD3与RXD1连接在一起,也就是将REPL的接收端口RXD1连接在UART3的接收端口。
下面程序显示了如何判断串口内接收到了字符,并读取该字符存储在内存缓冲区内。当接收到回车字符(0xd)之后,便将接收到的字符串转换成整数并显示。
from machine import Pin,UART
import utime
uart2 = UART(2, 115200)
print('Test UART.')
buf = bytes(0)
while True:
if uart2.any():
buf = buf + uart2.read(uart2.any())
if buf[-1] == 13:
print(int(buf))
buf = bytes(0)
utime.sleep_ms(10)
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
处贴上运行结果如下。 在 Thonny交互界面上输入数字并回车,程序变输出对应的数字。如果输入的字符中包含有非数字字符,最后程序出错返回。
>> Reset MicroPython...
>> Wait for MicroPython coming back...
>> Download MicroPython : 33 lines/707 characters.
>> -------------------------------------------------------------------------
Test UART.
333
3333
123
Traceback (most recent call last):
File "<stdin>", line 22, in <module>
ValueError: invalid syntax for integer
>>>
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
二、发送与接收
1、发送接收实验
下面测试程序使用了 MicroPython 中的的 UART(1) 与 UART(5) 之间进行通信。在 PLUS_F3270 开发上,将 UART(1)的 TXD(PA2)与 UART(5)的 RXD(PB1)使用短接线连接在一起。这样 UART(1)发送数据就可以被 UART(5)接收到。
▲ 图1.2.1 实验电路板:将PA2与PB1短接起来
下面是测试程序。程序每隔 200ms 由UART(1)发送字符 0x55,由 UART(5)检查是否收到了字符,并读入显示。请注意,发送串口函数在调用 write 的时候,使用了如下形式:
_ = senduart.write(b'\x55')
- 1
这是将 write 函数返回输出的发送字节数量的信息给屏蔽掉,否则程序运行会在输出信息窗口显示发送字节数量。
from machine import UART
import time
senduart = UART(1)
recvuart = UART(5)
while True:
_ = senduart.write(b'\x55')
if recvuart.any():
inb = recvuart.read(recvuart.any())
print(inb)
time.sleep_ms(200)
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
程序运行后,可以在信息串口看到程序输出信息 b’U’ 信息。
※ 总 结 ※
本文给出了 MicroPython内核开发笔记:书内嵌入实验任务 中的 UART 部分软件用例部分内容。
■ 相关文献链接:
● 相关图表链接:
文章来源: zhuoqing.blog.csdn.net,作者:卓晴,版权归原作者所有,如需转载,请联系作者。
原文链接:zhuoqing.blog.csdn.net/article/details/125548206
- 点赞
- 收藏
- 关注作者
评论(0)