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

相关推荐
可待电子单片机设计定制(论文)21 分钟前
【STM32设计】基于STM32的智能门禁管理系统(指纹+密码+刷卡+蜂鸣器报警)(代码+资料+论文)
stm32·单片机·嵌入式硬件
DREAM.ZL1 小时前
基于python的电影数据分析及可视化系统
开发语言·python·数据分析
Uncertainty!!1 小时前
python函数装饰器
开发语言·python·装饰器
不可思议迷宫2 小时前
Verilog编程实现一个分秒计数器
单片机·嵌入式硬件·fpga开发
吾日三省吾码2 小时前
Python 脚本:自动化你的日常任务
数据库·python·自动化
snowfoootball3 小时前
基于 Ollama DeepSeek、Dify RAG 和 Fay 框架的高考咨询 AI 交互系统项目方案
前端·人工智能·后端·python·深度学习·高考
橙色小博3 小时前
长短期记忆神经网络(LSTM)基础学习与实例:预测序列的未来
人工智能·python·深度学习·神经网络·lstm
SsummerC3 小时前
【leetcode100】每日温度
数据结构·python·leetcode
life_yangzi3 小时前
关于单片机IAP升级的那点事儿|智能设置中断向量表
单片机·嵌入式硬件
仙人掌_lz3 小时前
机器学习ML极简指南
人工智能·python·算法·机器学习·面试·强化学习