嵌入式硬件篇---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中的硬件流和软件流。

相关推荐
云泽野17 分钟前
【Java|集合类】list遍历的6种方式
java·python·list
IMPYLH2 小时前
Python 的内置函数 reversed
笔记·python
星辰pid2 小时前
STM32控制四自由度机械臂(SG90舵机)(硬件篇)(简单易复刻)
stm32·单片机·嵌入式硬件·机械臂
威桑3 小时前
STM32 专有名词缩写整合
stm32·单片机·嵌入式硬件
小赖同学啊4 小时前
物联网数据安全区块链服务
开发语言·python·区块链
码荼4 小时前
学习开发之hashmap
java·python·学习·哈希算法·个人开发·小白学开发·不花钱不花时间crud
SKYDROID云卓小助手5 小时前
无人设备遥控器之自动调整编码技术篇
人工智能·嵌入式硬件·算法·自动化·信号处理
所念皆星海9115 小时前
图灵完备之路(数电学习三分钟)----数据选择器与总线
嵌入式硬件·通信·数电
小陈phd5 小时前
李宏毅机器学习笔记——梯度下降法
人工智能·python·机器学习
kk爱闹5 小时前
【挑战14天学完python和pytorch】- day01
android·pytorch·python