【K210模块】使用UART模块发送和接收数据

文章讲述了在K210和STM32之间使用UART串口进行数据传输时,涉及的字节数据与字符串之间的转换。通过添加或不添加decode()函数,影响了数据接收的格式。同时,文章提到了在STM32持续发送数据时,对K210烧录新代码可能导致的问题,并寻求解决方案。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

官方案例链接

一、代码部分

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宕机。。。。。。【得先烧录完,让它跑起来了再把串口接入才能收到数据】

我试试看怎么解决。有人解决了的吗?还是有什么方法 / 想法?都可以提一提!!

(1)加了字节数据转字符串 转换句

在这里插入图片描述

(2)没加 字节数据转字符串 转换句

在这里插入图片描述

每天进步一点点 笔记仅供自学,用来回看复习,不一定适合你,如有错误请指出。

### K210 芯片串口发送数据的方法 K210 是一款基于 RISC-V 架构的 AIoT 处理器,支持多种外设接口,其中包括 UART 串口。要实现串口发送功能,可以利用 MaixPy 提供的相关 API 来完成操作。 #### 配置与初始化 在使用串口之前,需要先对其进行配置初始化。以下是常见的参数设置选项: - 波特率 (baudrate): 常见值有 `9600`, `115200` 等。 - 数据位数 (bits): 默认为 `8` 位。 - 校验方式 (parity): 可选无校验 (`None`) 或其他模式。 - 停止位 (stop bits): 通常为 `1`。 这些参数可以通过 `UART` 类中的方法进行调整[^1]。 #### 发送数据示例代码 下面是一个完整的 Python 示例代码,展示如何在 K210 上通过串口发送字符串: ```python from machine import UART # 初始化 UART 对象 uart = UART(1, baudrate=115200, bits=8, parity=None, stop=1) # 定义待发送的数据 data_to_send = "Hello from K210!\n" # 检查 UART 是否可用 if uart is not None: # 发送数据 uart.write(data_to_send) else: print("UART initialization failed.") ``` 上述代码中,`UART(1)` 表示选择了第 1 组串口资源;波特率为 `115200`,这是常用的默认速率之一。调用 `write()` 方法即可将指定的内容写入到串口中并发送出去[^3]。 需要注意的是,在实际应用过程中可能还需要考虑接收缓存区大小(`read_buf_len`) 的设定以及异常处理机制等问题。 #### 关于 POST 请求的应用场景扩展 如果目标不仅仅是简单的文本传输而是涉及到更复杂的网络交互比如上传图像文件,则可借助额外引入的第三方库如 `requests` 实现 HTTP 协议下的数据交换过程[^2] 。不过由于硬件本身限制原因,默认情况下并不包含该类高级别的封装工具包因此需要开发者手动添加进去或者寻找替代方案例如 MicroWebCli 库来进行相应开发工作。 ---
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

KevinGuo457

哈哈哈资助我买两包辣条叭

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值