嵌入式硬件篇---OpenMV的硬件流和软件流


文章目录

  • 前言
  • [一、硬件流控制(Hardware Flow Control)](#一、硬件流控制(Hardware Flow Control))
    • [1. 基本原理](#1. 基本原理)
    • [2. OpenMV中的实现](#2. OpenMV中的实现)
      • [• 硬件要求](#• 硬件要求)
      • [• 代码配置](#• 代码配置)
      • [• 工作流程](#• 工作流程)
  • [二、软件流控制(Software Flow Control)](#二、软件流控制(Software Flow Control))
    • [1. 基本原理](#1. 基本原理)
    • [2. OpenMV中的实现](#2. OpenMV中的实现)
      • [• 代码配置](#• 代码配置)
      • [• 工作流程](#• 工作流程)
  • [三、硬件流控制 vs 软件流控制对比](#三、硬件流控制 vs 软件流控制对比)
  • 四、在OpenMV中的综合应用示例
  • 五、注意事项
    • [1. 硬件兼容性](#1. 硬件兼容性)
    • [2. 波特率匹配](#2. 波特率匹配)
    • [3. 缓冲区管理](#3. 缓冲区管理)
    • [4. 抗干扰设计](#4. 抗干扰设计)
  • 六、总结
  • 总结

前言

以上就是今天要讲的内容,本文仅仅简单介绍了OpenMV中的硬件流和软件流。


一、硬件流控制(Hardware Flow Control)

1. 基本原理

硬件流控制通过额外的物理信号线(RTS和CTS)动态控制数据流确保发送方和接收方的缓冲区不会溢出

RTS

• RTS(Request to Send):由接收方控制。当接收方缓冲区空闲时,RTS为低电平(允许发送 );当缓冲区接近满载时,RTS为高电平(暂停发送)。

CTS

• CTS(Clear to Send):由发送方控制。发送方仅在CTS为低电平时发送数据。

2. OpenMV中的实现

• 硬件要求

◦ OpenMV Cam型号需支持硬件流控制 (如OpenMV Cam H7 Plus)。

◦ 串口线必须包含RTS和CTS引脚(如USB转TTL模块需支持)。

• 代码配置

python 复制代码
import pyb
#初始化UART3,波特率115200,启用RTS和CTS硬件流控制
uart = pyb.UART(3, 115200, flow=pyb.UART.RTS | pyb.UART.CTS)

• 工作流程

  1. 发送方检查CTS信号,若为低电平则发送数据。
  2. 接收方根据缓冲区状态控制RTS信号。
  3. 优点
    高可靠性 :实时信号控制,避免数据丢失。
    • 适合高速通信:支持高波特率(如921600 bps)。
    无额外数据开销:不占用数据带宽。
  4. 缺点
    • 硬件依赖:需要支持RTS/CTS的硬件和连接线
    • 布线复杂:需正确连接RTS和CTS信号线。
  5. 典型应用场景
    高速数据传输 (如图像、视频流)。
    长距离 通信(抗干扰能力强)。
    多设备共享总线时的协调。

二、软件流控制(Software Flow Control)

1. 基本原理

软件流控制通过特殊字符(XON/XOFF)动态控制数据流,无需物理信号线。

XON

• XON(ASCII 17,0x11):接收方发送XON,表示可以继续接收数据。

XOFF

• XOFF(ASCII 19,0x13):接收方发送XOFF,表示暂停发送数据。

2. OpenMV中的实现

• 代码配置

python 复制代码
import pyb
#初始化UART3,波特率115200,启用软件流控制(XON/XOFF)
uart = pyb.UART(3, 115200, flow=pyb.UART.XONXOFF)

• 工作流程

  1. 接收方缓冲区快满时,发送XOFF字符给发送方。
  2. 发送方收到XOFF后暂停发送。
  3. 接收方缓冲区有空闲时,发送XON恢复传输。
  4. 优点
    • 无需硬件支持:仅需数据线(TX/RX),适合简单设备
    • 灵活配置:适用于硬件资源有限的场景
  5. 缺点
    带宽占用 :XON/XOFF字符占用数据传输带宽。
    延迟 风险:字符传输和处理可能引入延迟。
    可靠性较低:字符丢失或误识别可能导致通信中断。
  6. 典型应用场景
    低速 通信(如传感器数据采集)。
    硬件连接受限 (仅需TX/RX线)。
    临时调试或原型开发

三、硬件流控制 vs 软件流控制对比

四、在OpenMV中的综合应用示例

  1. 硬件流 控制实现高速图像传输
python 复制代码
import sensor,pyb

#初始化摄像头
sensor.reset()
sensor.set_pixformat(sensor.RGB565)
sensor.set_framesize(sensor.QVGA)

#配置UART3(硬件流控制)
uart = pyb.UART(3, 921600, flow=pyb.UART.RTS | pyb.UART.CTS)

while True:
    img = sensor.snapshot()
    img_bytes = img.compress(quality=50).to_bytes()  # 压缩图像数据
    # 分块发送(每块128字节)
    for i in range(0, len(img_bytes), 128):
        uart.write(img_bytes[i:i+128])
  1. 软件流 控制实现传感器数据采集
python 复制代码
import pyb

uart = pyb.UART(3, 9600, flow=pyb.UART.XONXOFF)  # 启用软件流控制

while True:
    if uart.any():
        data = uart.read(uart.any())
        # 处理接收数据
        if data == b'XOFF':
            print("Paused by receiver")
        elif data == b'XON':
            print("Resumed by receiver")
        else:
            print("Received:", data)

五、注意事项

1. 硬件兼容性

◦ 使用硬件流控制前,确认OpenMV和外部设备均支持RTS/CTS

◦ 错误连接RTS/CTS线会导致通信失败。

2. 波特率匹配

◦ 发送端和接收端的波特率、流控制模式必须一致。

3. 缓冲区管理

◦ 即使启用流控制,仍需通过uart.any()和分块传输优化缓冲区使用。

4. 抗干扰设计

◦ 长距离通信中,硬件流控制需配合屏蔽线使用,软件流控制需增加校验机制。

六、总结

• 硬件流控制:通过RTS/CTS信号实现高可靠、高速通信,适合工业级应用。

• 软件流控制:通过XON/XOFF字符实现灵活的低速通信,适合资源受限场景。

• 选择建议:

◦ 优先使用硬件流控制(高速、可靠场景 )。

◦ 仅在硬件不支持时使用软件流控制(低速、简单场景 )。

通过合理选择流控制方式,可显著提升OpenMV在复杂环境中的通信稳定性和效率。


总结

以上就是今天要讲的内容,本文仅仅简单介绍了OpenMV中的硬件流和软件流。

相关推荐
松涛和鸣2 分钟前
DAY69 Practical Guide to Linux Character Device Drivers
linux·服务器·arm开发·数据库·单片机·嵌入式硬件
怪兽毕设4 分钟前
基于Django的洗衣服务平台设计与实现
后端·python·django·洗衣服务平台
bai5459367 分钟前
STM32 CubeIDE 超声波测距
stm32·单片机·嵌入式硬件
小小逐月者16 分钟前
SQLModel 开发笔记:Python SQL 数据库操作的「简化神器」
数据库·笔记·python
曲幽17 分钟前
FastAPI生命周期管理实战:从启动到关闭,如何优雅地管好你的“资源家当”
redis·python·fastapi·web·shutdown·startup·lifespan
gr178518 分钟前
通过dify文件上传能力,解决较大文本与LLM实时交互问题
python·llm·aigc·dify
robet_hua20 分钟前
DSP28377D项目实战 (4) - 高速串口打印波形
单片机·嵌入式硬件
学习的周周啊21 分钟前
ClawdBot(openclaw) + Cloudflare Tunnel + Zero-Trust 零基础保姆教程
网络·人工智能·python·clawdbot
电饭叔26 分钟前
DataFrame和 Series 索引
android·python
穿过锁扣的风28 分钟前
决策树:从入门到实战,解锁 AI 分类预测的核心利器
数据结构·python·决策树