官方案例链接
【K210模块】使用UART模块发送和接收数据
一、代码部分
from fpioa_manager import fm
from machine import UART
import time
# binding UART2 IO:6->RX, 8->TX
fm.register(6, fm.fpioa.UART2_RX)
fm.register(8, fm.fpioa.UART2_TX)
yb_uart = UART(UART.UART2, 115200, 8, 0, 0, timeout=1000, read_buf_len=4096)
write_bytes = b'$hello yahboom#\n' #模拟串口发送
last_time = time.ticks_ms()
try:
while True:
# send data per 500ms
if time.ticks_ms() - last_time > 500:
last_time = time.ticks_ms()
yb_uart.write(write_bytes)
# read and print data
if yb_uart.any():
read_data = yb_uart.read()
if read_data:
【添加这句话】 read_data_str = read_data.decode('utf-8')
print("read_data = ", read_data_str)
except:
pass
yb_uart.deinit()
del yb_uart
1、添加转换句
(1)字节data 转字符串
- read_data.decode(‘utf-8’) 用于将字节数据解码为字符串。
在Python中,网络通信和文件读取等操作通常返回的是字节数据(bytes),而不是字符串。 - 通过使用 decode() 方法,并指定相应的编码方式(例如 ‘utf-8’),可以将字节数据转换为字符串。UTF-8 是一种广泛使用的字符编码方式,它可以表示世界上几乎所有的字符。
read_data_str = read_data.decode('utf-8')
使用串口助手发送了字节数据 123。
当添加了 data.decode() 这一语句时,接收到的数据是字符串 ‘123’。
而在未添加这一语句时,接收到的数据是字节数据 b’123\r\n’。
这是因为串口助手发送的数据默认以
字节形式
进行传输,而不是字符串。在接收端,如果你调用了 data.decode(),则可以将接收到的字节数据解码为字符串。
① 添加了转换语句
② 没有添加转换语句
(2)字符串str 转 字节data
str2bytes = write_str.encode('utf-8')#字符串转 字节数据
- 代码 write_data_str = write_bytes.encode(‘utf-8’) 是将字符串 write_bytes 编码为字节数据。在 Python 中,可以通过使用 encode() 方法将字符串转换为指定编码方式的字节数据
串口通信是通过
串行传输数据
的方式,其中每个字节由一定数量的位组成。一个字节一个字节的发。
按正常逻辑来说,K210要先把字符串转成字节数据,才可以通过串口发给stm32,但是字符串在 Python 中是以 Unicode 编码的形式存储的,而不仅仅是字节序列。
在通过串口发送数据时,如果你传递的是一个字符串对象,串口库会自动将其编码为字节序列并发送出去,所以转不转的无所谓。
常见的串口数据传输格式有 8 位数据位(8-bit data),其中包含了一个字节的数据。【低位在前,高位在后】
2、三种方式的比较,K210发送到STM32串口
(1)转换后的可以通过串口发出来
(2)发送字符串也可以通过串口发出来
(3)直接给的字节数据发不出来
3、STM32 串口发送到K210
这里发现一个问题,如果32一直通过串口发消息,然后此时串口是与k210相连的,就是说线里有数据一直在发。然后这时候我们烧录CanMV的代码,就会导致K210宕机。。。。。。【得先烧录完,让它跑起来了再把串口接入才能收到数据】
我试试看怎么解决。有人解决了的吗?还是有什么方法 / 想法?都可以提一提!!