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

news/2025/2/10 15:34:59/

文章目录

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


前言

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


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

1. 基本原理

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

RTS

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

CTS

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

OpenMV_25">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,表示暂停发送数据。

OpenMV_59">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 软件流控制对比

<a class=硬件流控制与软件流控制的对比" />

OpenMV_86">四、在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 pybuart = 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中的硬件流软件流


http://www.ppmy.cn/news/1570898.html

相关文章

Angular-hello world

环境搭建- 安装angular-cli 用npm安装typescript和typings npm install -gtypescript typings 安装angular-cl npm install -gangular-clilatest ngnew ProjectName //ProjectName为你的项目名&#xff0c;用此命令建立基本文件&#xff0c;然后强制终止 cd ProjectName cnpm …

【嵌入式 Linux 音视频+ AI 实战项目】瑞芯微 Rockchip 系列 RK3588-基于深度学习的人脸门禁+ IPC 智能安防监控系统

前言 本文主要介绍我最近开发的一个个人实战项目&#xff0c;“基于深度学习的人脸门禁 IPC 智能安防监控系统”&#xff0c;全程满帧流畅运行。这个项目我目前全网搜了一圈&#xff0c;还没发现有相关类型的开源项目。这个项目只要稍微改进下&#xff0c;就可以变成市面上目前…

苍穹外卖 项目记录 day11 Spring Task订单定时处理-来单提醒-客户催单

文章目录 Spring Taskcron表达式Spring Task使用步骤订单状态定时处理WebSocketWebSockt入门示例来单提醒客户催单 Spring Task Spring Task 是Spring框架提供的任务调度工具&#xff0c;可以按照约定的时间自动执行某个代码逻辑。 应用场景&#xff1a; 1). 信用卡每月还款…

React 生命周期函数详解

React 组件在其生命周期中有多个阶段&#xff0c;每个阶段都有特定的生命周期函数&#xff08;Lifecycle Methods&#xff09;。这些函数允许你在组件的不同阶段执行特定的操作。以下是 React 组件生命周期的主要阶段及其对应的生命周期函数&#xff0c;并结合了 React 16.3 的…

【深度学习】利用Java DL4J 训练金融投资组合模型

🧑 博主简介:CSDN博客专家,历代文学网(PC端可以访问:https://literature.sinhy.com/#/literature?__c=1000,移动端可微信小程序搜索“历代文学”)总架构师,15年工作经验,精通Java编程,高并发设计,Springboot和微服务,熟悉Linux,ESXI虚拟化以及云原生Docker和K8s…

【Spring】Spring MVC入门(一)

目录 ​前言 什么是Spring Web MVC&#xff1f; 什么是MVC 什么是Spring MVC Spring MVC和Spring Boot的区别 什么是Spring Boot 关系和区别 学习Spring MVC 注解学习 SpringBootApplication RestController RequestMapping RequestMapping的使用 RequestMapping…

大模型应用与实战:专栏概要与内容目录

文章目录 大模型应用与实战&#x1f4da; 核心内容模块一、大模型推理与部署1.1 推理框架应用实践1.2 框架源码深度解析1.3 高并发部署优化1.4 国产化平台适配 二、Agent框架专题2.1 Langchain系列2.2 Qwen-Agent系列2.3 Dify应用实践2.4 框架对比与迁移 三、微调技术研究3.1 微…

Javascript包管理工具——NPM常见内容

常见的npm相关知识点&#xff0c;比如包管理、版本控制、命令使用、依赖管理等等。 首先&#xff0c;我得回忆自己面试时遇到的npm问题&#xff0c;或者网上常见的考点。比如npm是什么&#xff0c;package.json的作用&#xff0c;依赖类型&#xff0c;版本控制符号&#xff0c;…