从零玩转CanMV-K230(6)- UART例程


前言

本章介绍基于MicroPython的外设开发案例,在开始之前请确认使用的MicroPython镜像,可以参考 从零玩转CanMV-K230(2)- 环境搭建

K230 芯片内部集成了 5 个 UART 硬件模块,其中 UART0 被小核(sh)占用,UART3 被大核(sh)占用,剩余的 UART1、UART2 和 UART4 供用户使用。用户在使用时,可通过 IOMUX 模块进行 UART 引脚的配置。

一、UART原理图

在这里插入图片描述
在这里插入图片描述

二、UART API

UART 类位于 machine 模块中。
uart = UART(id, baudrate=115200, bits=UART.EIGHTBITS, parity=UART.PARITY_NONE, stop=UART.STOPBITS_ONE, timeout = 0)

参数

id: UART 模块编号,有效值为 UART1、UART2、UART4。

baudrate: UART 波特率,可选参数,默认值为 115200。

bits: 每个字符的数据位数,有效值为 FIVEBITS、SIXBITS、SEVENBITS、EIGHTBITS,可选参数,默认值为 EIGHTBITS。

parity: 奇偶校验,有效值为 PARITY_NONE、PARITY_ODD、PARITY_EVEN,可选参数,默认值为 PARITY_NONE。

stop: 停止位数,有效值为 STOPBITS_ONE、STOPBITS_TWO,可选参数,默认值为 STOPBITS_ONE。

timeout: 读数据超时,单位为 ms

UART.init(baudrate=115200, bits=UART.EIGHTBITS, parity=UART.PARITY_NONE, stop=UART.STOPBITS_ONE)

配置 UART 参数。

参数

参考构造函数。

返回值

无

UART.read([nbytes])

读取字符。如果指定了 nbytes,则最多读取该数量的字节;否则,将尽可能多地读取数据。

参数

nbytes: 最多读取的字节数,可选参数。

返回值

返回一个包含读取字节的字节对象。

UART.readline()

读取一行数据,并以换行符结束。

参数

无

返回值

返回一个包含读取字节的字节对象。

UART.readinto(buf[, nbytes])

将字节读取到 buf 中。如果指定了 nbytes,则最多读取该数量的字节;否则,最多读取 len(buf) 数量的字节。

参数

buf: 一个缓冲区对象。

nbytes: 最多读取的字节数,可选参数。

返回值

返回读取并存入 buf 的字节数。

UART.write(buf)

将字节缓冲区写入 UART。

参数

buf: 一个缓冲区对象。

返回值

返回写入的字节数。

UART.deinit()

释放 UART 资源。

参数

无

返回值

无

三、UART 示例代码

示例代码使用 UART2进行收发测试
硬件连接如下:
在这里插入图片描述

from machine import UART
from machine import FPIOA

# 实例化FPIOA
fpioa = FPIOA()
# 设置PIN60为PWM通道0
fpioa.set_function(5, fpioa.UART2_TXD)
fpioa.set_function(6, fpioa.UART2_RXD)
# UART2: baudrate 115200, 8bits, parity none, one stopbits
uart = UART(UART.UART2, baudrate=115200, bits=UART.EIGHTBITS, parity=UART.PARITY_NONE, stop=UART.STOPBITS_ONE)
# UART write
r = uart.write("UART test")
print(r)
# UART read
r = uart.read()
print(r)
# UART readline
r = uart.readline()
print(r)
# UART readinto
b = bytearray(8)
r = uart.readinto(b)
print(r)

测试结果
在这里插入图片描述


总结

本章介绍了UART的使用方法,API,并提供了一个使用案例

<think>嗯,用户问的是K230如何与树莓派进行串口通信。首先,我需要确定K230是什么设备。可能是一个开发板或者嵌入式系统,对吧?然后,树莓派的串口配置,用户可能不太清楚如何启用它的UART功能。首先,我需要回忆树莓派默认的串口配置,比如早期版本中UART用于蓝牙,需要修改设置才能启用GPIO上的串口。 接下来,硬件连接部分。树莓派的GPIO引脚中,TX和RX是GPIO14和GPIO15,对吧?用户需要将K230的RX接树莓派的TX,TX接RX,同时要确保共地。这一步如果接反了可能无法通信,需要提醒用户检查线路。 然后是软件配置。树莓派方面可能需要使用raspi-config关闭串口控制台,并启用硬件串口。可能需要修改/boot/config.txt文件,添加enable_uart=1。然后安装minicom或者使用Python的pyserial库进行测试。 对于K230这边,假设它运行的是Linux系统,可能需要配置对应的串口设备,比如/dev/ttyS0或者/dev/ttyAMA0,并设置相同的波特率、数据位、停止位和校验位。用户可能需要用C或Python编写程序来读写串口。 测试部分,可以建议用户先用minicom在树莓派端发送数据,然后在K230用cat命令监听串口,或者反过来。如果数据能正确传输,说明连接成功。如果遇到权限问题,可能需要将用户加入dialout组,或者使用sudo。 可能用户遇到的常见问题包括波特率不匹配、接线错误、权限不足或者串口被系统占用。需要逐一排查这些可能性。例如,使用dmesg | grep tty查看串口设备,或者检查波特率设置是否正确。 另外,是否需要电平转换?树莓派的GPIO是3.3V电平,如果K230是5V的,可能需要电平转换器,否则可能会损坏树莓派。这一点需要提醒用户注意硬件兼容性。 最后,给出一个Python的示例代码,两边分别使用pyserial进行发送和接收,这样用户可以直接复制代码进行测试。确保代码中的设备路径和波特率正确,比如树莓派可能是/dev/ttyS0,而K230可能是/dev/ttyAMA0,具体取决于硬件配置。 总结步骤:硬件连接、树莓派配置、K232配置、测试通信。确保每个步骤都清晰,用户能逐步操作。同时提醒注意事项和常见问题解决方法,帮助用户避免常见陷阱。</think>K230与树莓派通过串口通信的步骤如下,分硬件连接、软件配置及测试验证三部分: --- ### 一、硬件连接 1. **引脚对应关系** - 树莓派串口引脚(默认UART0): - **TX (GPIO14)** -> 接K230的**RX** - **RX (GPIO15)** -> 接K230的**TX** - **GND** -> 共地连接 - *注意:需确认K232串口电平是否为3.3V(树莓派GPIO为3.3V,不可直接接5V设备)* 2. **物理接线示例** ``` 树莓派 K230 GPIO14 (TX) --> RX GPIO15 (RX) <-- TX GND --- GND ``` --- ### 二、软件配置 #### 树莓派端配置 1. **启用串口** - 执行 `sudo raspi-config` → **Interface Options** → **Serial Port** → 关闭控制台登录,启用硬件串口。 2. **修改配置文件** ```bash sudo nano /boot/config.txt ``` 添加或修改以下行: ``` enable_uart=1 dtoverlay=disable-bt # 禁用蓝牙(释放UART0) ``` 3. **重启生效** ```bash sudo reboot ``` 4. **检查设备节点** ```bash ls /dev/ttyAMA0 # 确认设备存在(若禁用蓝牙,默认设备为ttyAMA0) ``` #### K230端配置 - 根据K230系统(如Linux),确认串口设备节点(如`/dev/ttyS0`)并设置相同波特率(如115200)。 --- ### 三、通信测试 #### 方法1:命令行工具测试 1. **树莓派发送数据** ```bash echo "Hello K230" > /dev/ttyAMA0 ``` 2. **K230接收数据** ```bash cat /dev/ttyS0 # 根据实际设备节点调整 ``` #### 方法2:Python脚本通信 1. **树莓派发送端代码** ```python import serial ser = serial.Serial('/dev/ttyAMA0', baudrate=115200, timeout=1) ser.write(b"Hello from Raspberry Pi\n") ser.close() ``` 2. **K230接收端代码** ```python import serial ser = serial.Serial('/dev/ttyS0', baudrate=115200, timeout=1) while True: data = ser.readline() if data: print("Received:", data.decode()) ``` --- ### 四、常见问题排查 1. **无数据接收** - 检查接线(TX/RX是否交叉连接) - 确认波特率、数据位、停止位一致 - 使用 `sudo dmesg | grep tty` 查看串口设备状态 2. **权限问题** ```bash sudo usermod -aG dialout $USER # 将用户加入串口组(需重新登录) ``` 3. **电平兼容性** -K230为5V设备,需添加电平转换模块(如MAX3232)。 --- 通过以上步骤,可实现K230与树莓派的双向串口通信。建议从简单字符串测试开始,逐步扩展到协议层通信。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

叶与花语

你的鼓励将是我创作的最大动力

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

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

打赏作者

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

抵扣说明:

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

余额充值