K210+串口通信(实测有用)

前段时间我学习了如何使用K210训练模型做目标检测,单纯的学会训练模型并没有什么用处,要把K210应用到实际中去,也就是和单片机和各类模块结合使用,你必须会使用串口通信。这篇文章将教你如何使用K210进行串口通信。


前言

学会了训练模型,就要将它应用到实际中,这就需要我们结合51单片机、32单片机等待模块一起使用,最重要的一项便是串口通信。接下来我们进入正文

一、准备

1.硬件准备

1.K210开发板
2.usb转ttl

2.软件准备

Maixpy
XCOM串口通信软件

二、串口通信

1.Maixpy

看过上一篇博客后就可以直接进入正题了,打开Maixpy,接下来我们开始写串口通信部分,这里我先和电脑通信。

2.GPIO简单介绍

先对K210的GPIO做个简单的介绍:

K210 支持每个外设随意映射到任意引脚,K210上有高速 GPIO(GPIOHS) 和通用 GPIO
在 K210 上, GPIO 有一下特征:

高速 GPIO:

高速 GPIO 为 GPIOHS,共 32 个。具有如下特点:

可配置输入输出信号
每个 IO 具有独立中断源
中断支持边沿触发和电平触发
每个 IO 可以分配到 FPIOA 上 48 个管脚之一
可配置上下拉,或者高阻

通用 GPIO:

通用 GPIO 共 8 个,具有如下特点:

8 个 IO 使用一个中断源
可配置输入输出信号
可配置触发 IO 总中断,边沿触发和电平触发
每个 IO 可以分配到 FPIOA 上 48 个管脚之一
下 GPIOHS 默认已经被使用, 程序中如非必要尽量不要使用:
在这里插入图片描述

构造函数

class GPIO(ID, MODE, PULL, VALUE)

参数
ID: 使用的 GPIO 引脚(一定要使用 GPIO 里带的常量来指定)

MODE: GPIO模式

• GPIO.IN就是输入模式

• GPIO.OUT就是输出模式

PULL: GPIO上下拉模式

• GPIO.PULL_UP 上拉

​• GPIO.PULL_DOWN 下拉

​• GPIO.PULL_NONE 即不上拉也不下拉
value
修改/读取 GPIO 引脚状态

GPIO.value([value])

[value]: 可选参数,如果此参数不为空,则返回当前 GPIO 引脚状态
如果 [value] 参数不为空,则返回当前 GPIO 引脚状态
接下来直接讲串口通信.

3.串口通信方法

头文件

from machine import UART    #导入UART模块

设置串口通信引脚(这里我设置10为TX,11为RX)

fm.register(10, fm.fpioa.UART1_TX, force=True) #10为tx接rx
fm.register(11, fm.fpioa.UART1_RX, force=True) #11为rx接tx

设置串口的波特率,数据位,停止位,奇偶校验位

uart_A = UART(UART.UART1, 115200, 8, 1, 0, timeout=1000, read_buf_len=4096)

串口发送数据(这里我发送的识别物体名称)

 uart_A.write(classes[i.classid()]+'\r\n')

将以上代码加入到你的代码里,就可以实现串口通信了

4.代码

这里放入完整代码

import sensor,image,lcd,time  #导入sensor、image、lcd、time模块
import KPU as kpu
from machine import UART
from fpioa_manager import fm

lcd.init(freq=15000000) #初始化LCD

sensor.reset()   #初始化单目摄像头
sensor.set_pixformat(sensor.RGB565) #设置帧格式
sensor.set_framesize(sensor.QVGA)   #设置帧大小
sensor.set_hmirror(0)
sensor.run(1)
task = kpu.load("/sd/yolov2.kmodel")
f=open("anchors.txt","r")
anchor_txt=f.read()
L=[]
for i in anchor_txt.split(","):
    L.append(float(i))
anchor=tuple(L)
f.close()
f=open("classes.txt","r")
lable_txt=f.read()
lable = lable_txt.split(",")
f.close()
fm.register(10, fm.fpioa.UART1_TX, force=True)
fm.register(11, fm.fpioa.UART1_RX, force=True)

uart_A = UART(UART.UART1, 115200, 8, 1, 0, timeout=1000, read_buf_len=4096)

anchor = (0.32,0.68,0.7,0.73,0.75,0.75,0.8,0.96,1.1,1.63)

sensor.set_windowing((224, 224))
#初始化yolo2网络
a = kpu.init_yolo2(task, 0.5, 0.3, 5, anchor)
classes=["apple","banana","oranges" ] #标签名称要和你训练时的标签名称顺序相同

while(True):

     img = sensor.snapshot()    #使用摄像头拍摄一张照片
     #lcd.display(img) #在液晶屏上显示一张 image

     code = kpu.run_yolo2(task, img)  #task为 kpu_load 返回的 kpu_net 对象
                                      #img为从sensor 采集到的图像
                                      #run_yolo2返回的值为kpu_yolo2_find 的列表

     if code:
         for i in code:
             a=img.draw_rectangle(i.rect()) #在图像上绘制一个矩形。此处为作为元组传递回坐标框出矩形
                                            #传回的是检测到的图像的四个坐标
             a = lcd.display(img) #在液晶屏上显示被框框框起来的image

             for i in code:
                 lcd.draw_string(i.x(), i.y(), classes[i.classid()], lcd.RED, lcd.WHITE)

                 lcd.draw_string(i.x(), i.y()+12, '%f'%i.value(), lcd.RED, lcd.WHITE)

                 lcd.draw_string(50, 200,str(b), lcd.RED, lcd.WHITE)

                 lcd.draw_string(110, 200,str(c), lcd.RED, lcd.WHITE)

                 uart_A.write(classes[i.classid()]+'\r\n')

     else:
         a = lcd.display(img) #如果没有识别出物体,则继续呈现图像
uart_A.deinit()
del uart_A
a = kpu.deinit(task) #反初始化。kpu_load 返回 kpu_net 对象

运行以上代码选择正确的com接口你会看到
请添加图片描述
当然这段代码你直接拿去可能不能用,因为SD卡里的文件名称,模型名称不一样,修改一下就可以使用,如果你需要坐标等等,直接做对应修改即可。

总结

通过这篇文章相信大家已经掌握了K210的串口通信,然后你可以用K210去做一些小的项目,我用K210做了两个小项目,一个是基于K210的yolov2的口罩检测系统、一个是基于K210的垃圾分类,这两个小的项目我会在写一篇博客将他们分享出来。
在这里插入图片描述

<think>嗯,用户遇到了K210芯片在烧录时握手失败的问题,需要找到解决方案。首先,我得仔细看看他们提供的错误信息。根据引用[1],报错信息是“握手失败,请检查串口设置”,还有提到自动检测不到K210。可能的原因有很多,比如串口设置不正确、硬件连接问题、驱动没装好,或者是固件的问题。 首先,检查串口设置。用户可能选错了端口,或者波特率不对。kflash_gui通常推荐的波特率是1500000或者2000000,如果设置成其他值可能会失败。另外,有些用户可能没有以管理员权限运行软件,导致无法访问串口,这点需要注意。 然后是硬件连接问题。USB线接触不良或者损坏是常见问题,尝试更换线缆或者USB口可能会有帮助。K210开发板是否正常供电也很重要,有时候指示灯的状态能提示是否正常上电。还有,烧录时需要按住BOOT按钮再上电,进入下载模式,这一步如果没做对,也会导致握手失败。 驱动方面,CH340或FTDI驱动是否正确安装?如果在设备管理器里看到未知设备或者带感叹号的设备,可能需要重新安装驱动。另外,有时候杀毒软件或防火墙会干扰串口通信,暂时禁用它们试试。 固件兼容性也是一个可能的原因。用户使用的kflash_gui版本是否支持当前的K210固件?可能需要更新软件版本,或者尝试其他烧录工具比如kflash-cli,看看是否能解决问题。 还有用户提到的引用[2]中,CanMV IDE连接问题,显示“拒绝访问”。这可能和串口被其他程序占用有关,检查是否有其他软件(如串口助手、IDE)占用了同一个端口,导致冲突。 总结下来,可能的解决步骤应该是:检查串口设置是否正确,确保硬件连接可靠,安装正确的驱动,以管理员权限运行软件,尝试不同的烧录工具,检查固件兼容性,并排除其他软件的干扰。如果这些步骤都做了还不行,可能需要检查硬件是否损坏,或者联系厂家支持。 用户可能需要更详细的指导,比如如何查看设备管理器里的端口号,如何安装驱动,或者如何操作BOOT按钮进入下载模式。此外,提供具体的命令行指令或工具下载链接也会有帮助。需要确保回答结构清晰,分步骤说明,让用户能一步步排查问题。</think>### K210握手失败问题分析与解决方案 #### 一、错误原因分析 根据引用[1]的报错信息`[ERROR] No valid Kendryte K210 found in Auto Detect`,核心问题在于**硬件与软件通信握手失败**。可能原因包括: 1. **串口参数设置错误**(波特率/端口号不匹配) 2. **硬件连接异常**(USB线/开发板供电问题) 3. **驱动未正确安装**(CH340/FTDI驱动缺失) 4. **烧录模式未正确进入**(未触发BOOT模式) 5. **固件兼容性问题**(kflash_gui版本与硬件不匹配) #### 二、分步解决方案 **步骤1:验证基础设置** - 确认kflash_gui中选择的COM端口与设备管理器中的串口号一致 - 波特率建议设置为`1500000`(实测兼容性最佳) - 勾选`Auto-Detect K210`选项(部分版本需手动指定) **步骤2:检查硬件连接** 1. 使用质量可靠的USB数据线,优先选择带屏蔽层的Type-C线 2. 确认开发板供电指示灯亮起(正常为红色/蓝色常亮) 3. **烧录模式操作**: - 断开USB - 按住BOOT按钮 - 插入USB - 持续按住BOOT键2秒后松开 **步骤3:驱动安装验证** ```python # Windows设备管理器应显示如下信息 设备类型: 端口(COM和LPT) 设备名称: USB-SERIAL CH340 (COMx) # 或CP210x系列 状态: 设备运转正常 ``` **步骤4:高级排查手段** - 使用`kflash-cli`命令行工具测试: ```bash kflash -p COM3 -b 1500000 firmware.bin ``` - 尝试降低波特率为`115200`进行兼容性测试 - 使用`Zadig工具`重新安装libusb驱动(针对FTDI芯片方案) #### 三、特殊场景处理 若出现引用[2]的`拒绝访问`错误,需: 1. 关闭CanMV IDE等占用串口的程序 2. 在Windows中执行: ```powershell # 解除串口占用 taskkill /f /im putty.exe /im mobaxterm.exe ``` 3. 以管理员身份运行kflash_gui #### 四、硬件诊断方法 1. 万用表测量板载3.3V电源是否稳定 2. 检查K210芯片温度(异常发热可能预示短路) 3. 使用示波器检测UART_TX引脚信号波形
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

我与nano

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

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

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

打赏作者

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

抵扣说明:

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

余额充值