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


文章目录

  • 前言
  • 一、硬件流控制(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为低电平时发送数据。

2. OpenMV中的实现

• 硬件要求

◦ OpenMV Cam型号需支持硬件流控制(如OpenMV Cam H7 Plus)。
◦ 串口线必须包含RTS和CTS引脚(如USB转TTL模块需支持)。

• 代码配置

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中的实现

• 代码配置

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. 硬件流控制实现高速图像传输
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. 软件流控制实现传感器数据采集
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中的硬件流和软件流。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/970658.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

小米平板怎么和电脑共享屏幕

最近尝试使用小米平板和电脑屏幕分屏互联 发现是需要做特殊处理的,需要下载一款电脑安装包:小米妙享 关于这个安装包,想吐槽的是: 没有找到官网渠道,是通过其他网络方式查到下载的 不附录链接,原因是因为地…

ML.Net二元分类

ML.Net二元分类 文章目录 ML.Net二元分类前言项目的创建机器学习模型的创建添加模型选择方案训练环境的选择训练数据的添加训练数据的选择训练数据的格式要预测列的选择模型评估模型的使用总结前言 ‌ML.NET‌是由Microsoft为.NET开发者平台创建的免费、开源、跨平台的机器学习…

在本地校验密码或弱口令 (windows)

# 0x00 背景 需求是验证服务器的弱口令,如果通过网络侧校验可能会造成账户锁定风险。在本地校验不会有锁定风险或频率限制。 # 0x01 实践 ## 1 使用 net use 命令 可以通过命令行使用 net use 命令来验证本地账户的密码。打开命令提示符(CMD&#xff0…

全方位养生指南:打造健康生活蓝图

在这个追求高效与速度的时代,健康养生的重要性愈发凸显,它是我们享受美好生活的前提。下面,让我们从饮食、运动、作息、情绪管理四个维度,解锁健康密码。 饮食是养生的根基,合理搭配才能滋养身心。一日三餐&#xff0c…

【Java 面试 八股文】Spring Cloud 篇

Spring Cloud 篇 1. Spring Cloud 5大组件有哪些?2. 服务注册和发现是什么意思?Spring Cloud 如何实现服务注册发现?3. 我看你之前也用过nacos,你能说下nacos与eureka的区别?4. 你们项目负载均衡如何实现的&#xff1f…

【动态路由】系统Web URL资源整合系列(后端技术实现)【nodejs实现】

需求说明 软件功能需求:反向代理功能(描述:apollo、eureka控、apisix、sentinel、普米、kibana、timetask、grafana、hbase、skywalking-ui、pinpoint、cmak界面、kafka-map、nacos、gateway、elasticsearch、 oa-portal 业务应用等多个web资…

凸包算法—— cad c#二次开发

效果如下&#xff1a; 代码如下&#xff1a; using IfoxDemo; //[assembly: CommandClass(typeof(IFoxDemo.凸包class))]//只允许此类快捷键命令 namespace IFoxDemo {public class 凸包class{public static class 凸包助手{/// <summary>/// 计算点集的凸包并返回多段线…

【设计模式】【行为型模式】解释器模式(Interpreter)

&#x1f44b;hi&#xff0c;我不是一名外包公司的员工&#xff0c;也不会偷吃茶水间的零食&#xff0c;我的梦想是能写高端CRUD &#x1f525; 2025本人正在沉淀中… 博客更新速度 &#x1f44d; 欢迎点赞、收藏、关注&#xff0c;跟上我的更新节奏 &#x1f3b5; 当你的天空突…

进阶数据结构——离散化

目录 一、离散化的核心思想与本质二、离散化的应用场景三、离散化的实现步骤四、离散化的复杂度分析五、离散化的优化技巧六、常见误区与调试技巧七、代码模版&#xff08;c&#xff09;八、经典例题数列离散化寻找满足高度的最大山峦美丽值 九、总结与学习建议 一、离散化的核…

VNC远程控制Mac

前言 macOS系统自带有VNC远程桌面&#xff0c;我们可以在控制端上安装配置VNC客户端&#xff0c;以此来实现远程控制macOS。但通常需要在不同网络下进行远程控制&#xff0c;为此&#xff0c;我们可以在macOS被控端上使用cpolar做内网穿透&#xff0c;映射VNC默认端口5…

[0689].第04节:Kafka与第三方的集成 – Kafka集成SpringBoot

Kafka笔记大纲 SpringBoot 是一个在 JavaEE 开发中非常常用的组件。可以用于 Kafka 的生产者&#xff0c;也可以用于 SpringBoot 的消费者 一、SpringBoot 环境准备 1.1.创建一个 Spring Initializr 1.2.引入场景启动器&#xff1a; <?xml version"1.0" encod…

「软件设计模式」装饰者模式(Decorator)

深入解析装饰者模式&#xff1a;动态扩展功能的艺术&#xff08;C实现&#xff09; 一、模式思想与应用场景 1.1 模式定义 装饰者模式&#xff08;Decorator Pattern&#xff09;是一种结构型设计模式&#xff0c;它通过将对象放入包含行为的特殊封装对象中&#xff0c;动态地…

简单几个步骤完成 Oracle 到金仓数据库(KingbaseES)的迁移目标

作为国产数据库的领军选手&#xff0c;金仓数据库&#xff08;KingbaseES&#xff09;凭借其成熟的技术架构和广泛的市场覆盖&#xff0c;在国内众多领域中扮演着至关重要的角色。无论是国家电网、金融行业&#xff0c;还是铁路、医疗等关键领域&#xff0c;金仓数据库都以其卓…

【Jenkins流水线搭建】

Jenkins流水线搭建 01、SpringBoot项目 - Jenkins基于Jar持续集成搭建文档基于手动方式发布项目基于dockerfile基于jenkins + dockerfile + jenkinsfile +pieline基于jenkins + jar方式的发布01、环境说明01、准备项目02、准备服务器03、安装git04、安装jdk1.805、安装maven依赖…

简单记录一下自己对springboot过程的理解

仅为个人简单理解&#xff0c;欢迎大家来一起讨论。 执行启动类main函数&#xff1b;读取依赖和配置文件&#xff1b;创建spring容器&#xff0c;并自动注入Bean&#xff1b;启动Tomcat。

使用 GPT-SoVITS 克隆声音,很详细

使用 GPT-SoVITS 克隆声音&#xff0c;很详细 一、前言二、下载三、启动四、克隆声音1、准备克隆音频2、分离人声伴奏3、音频分割4、语音降噪5、ASR工具6、语音文本校对标注工具7、训练模型8、微调训练9、推理 一、前言 最近对文本转语言很感兴趣&#xff0c;但对直接在网站上…

金融风控项目-业务基础

文章目录 一. 案例背景介绍二. 代码实现1. 加载数据2. 数据处理3. 查询 三. 业务解读 一. 案例背景介绍 通过对业务数据分析了解信贷业务状况 数据集说明 从开源数据改造而来&#xff0c;基本反映真实业务数据销售&#xff0c;客服可以忽略账单周期&#xff0c;放款日期账单金…

Django 创建表时 “__str__ ”方法的使用

在 Django 模型中&#xff0c;__str__ 方法是一个 Python 特殊方法&#xff08;也称为“魔术方法”&#xff09;&#xff0c;用于定义对象的字符串表示形式。它的作用是控制当对象被转换为字符串时&#xff0c;应该返回什么样的内容。 示例&#xff1a; 我在初学ModelForm时尝…

Spring Boot中如何自定义Starter

文章目录 Spring Boot中如何自定义Starter概念和作用1. 概念介绍2. 作用和优势2.1 简化依赖管理2.2 提供开箱即用的自动配置2.3 标准化和模块化开发2.4 提高开发效率2.5 提供灵活的配置覆盖3. 应用场景创建核心依赖1. 确定核心依赖的作用2. 创建 starter-core 模块2.1 依赖管理…

Python 面向对象的三大特征

前言&#xff1a;本篇讲解面向对象的三大特征&#xff08;封装&#xff0c;继承&#xff0c;多态&#xff09;&#xff0c;还有比较细致的&#xff08;类属性类方法&#xff0c;静态方法&#xff09;&#xff0c;分步骤讲解&#xff0c;比较适合理清楚三大特征的思路 面向对象的…