嵌入式硬件篇---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)
• 工作流程
- 发送方检查CTS信号,若为低电平则发送数据。
- 接收方根据缓冲区状态控制RTS信号。
- 优点
• 高可靠性:实时信号控制,避免数据丢失。
• 适合高速通信:支持高波特率(如921600 bps)。
• 无额外数据开销:不占用数据带宽。 - 缺点
• 硬件依赖:需要支持RTS/CTS的硬件和连接线。
• 布线复杂:需正确连接RTS和CTS信号线。 - 典型应用场景
• 高速数据传输(如图像、视频流)。
• 长距离通信(抗干扰能力强)。
• 多设备共享总线时的协调。
二、软件流控制(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)
• 工作流程
- 接收方缓冲区快满时,发送XOFF字符给发送方。
- 发送方收到XOFF后暂停发送。
- 接收方缓冲区有空闲时,发送XON恢复传输。
- 优点
• 无需硬件支持:仅需数据线(TX/RX),适合简单设备。
• 灵活配置:适用于硬件资源有限的场景。 - 缺点
• 带宽占用:XON/XOFF字符占用数据传输带宽。
• 延迟风险:字符传输和处理可能引入延迟。
• 可靠性较低:字符丢失或误识别可能导致通信中断。 - 典型应用场景
• 低速通信(如传感器数据采集)。
• 硬件连接受限(仅需TX/RX线)。
• 临时调试或原型开发。
三、硬件流控制 vs 软件流控制对比
四、在OpenMV中的综合应用示例
- 硬件流控制实现高速图像传输
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])
- 软件流控制实现传感器数据采集
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中的硬件流和软件流。
相关文章:

嵌入式硬件篇---OpenMV的硬件流和软件流
文章目录 前言一、硬件流控制(Hardware Flow Control)1. 基本原理RTSCTS 2. OpenMV中的实现• 硬件要求• 代码配置• 工作流程 二、软件流控制(Software Flow Control)1. 基本原理XONXOFF 2. OpenMV中的实现• 代码配置• 工作流…...

Word 里面嵌入DeepSeek
目录 一、问题描述 二、解决方法 三、代码 四、注意事项 五、总结 一、问题描述 如何在Word里面嵌入DeepSeek? 二、解决方法 1、新建文档,按 AltF11,进入VB界面。 2、选中文档,右键->插入->模块。 3、进入模块,粘入…...

聊聊 IP 地址和端口号的区别
在计算机网络中,两个基本概念对于理解设备如何通过网络进行通信至关重要。IP 地址和端口号是 TCP/IP 的典型特征,其定义如下:IP 地址是分配给连接到网络的每台机器的唯一地址,用于定位机器并与其通信。相反,端口号用于…...

rust学习一、入门之搭建简单开发环境
1、搭建开发环境(windows11) a.登录官网 一看就明白,此处略。 b.安装rustup 一看就明白,此处略。 c.安装 cargo script 或者 rust-script script cargo install cargo-script 完成后 注意:时间有一点点久。 测试 cargo s…...
浅聊MQ之Kafka与RabbitMQ简用
(前记:内容有点多,先看目录再挑着看。) Kafka与RabbitMQ的使用举例 Kafka的使用举例 安装与启动: 从Apache Kafka官网下载Kafka中间件的运行脚本。解压后,通过命令行启动Zookeeper(Kafka的运行…...

【原创】解决vue-element-plus-admin无法实现下拉框动态控制表单功能,动态显隐输入框
前言 目前使用vue-element-plus-admin想要做一个系统定时任务功能,可以选择不同的定时任务类型,比如使用cron表达式、周期执行、指定时间执行等。每种类型对应不同的输入框,需要动态显隐输入框才行,但是这个vue-element-plus-adm…...

SpringBoot开发——初步了解SpringBoot
文章目录 一、SpringBoot简介 1、什么是Spring Boot2、Spring Boot的优点3、Spring Boot功能 二、Spring与Spring Boot对比三、Spring Boot与Spring MVC四、Spring Boot体系结构五、Springboot Initializr 1、Spring Initializr2、Spring Initializr模块 一、SpringBoot简介…...

双轴伺服电机驱动控制器AGV、AMR专用双伺服电机驱动控制器解决方案
工业机器人数控机床XY机械手双轴机器人堆垛机专用双轴伺服电机驱动控制器48V 14ARMS带有STO功能,隔离高压CAN/RS485/USB通讯支持编码器和霍尔输入 双伺服电机驱动控制器TMCM2611功能介绍 集成2个伺服电机的控制和驱动于一体供电电压48V,驱动电流14A RM…...

【VB语言】EXCEL中VB宏的应用
【VB语言】EXCEL中VB宏的应用 文章目录 [TOC](文章目录) 前言一、EXCEL-VB1.实验过程2.代码 二、EXCEL-VB 生成.c.h文件1.实验过程2.代码 四、参考资料总结 前言 1.WPS-VB扩展包 提示:以下是本篇文章正文内容,下面案例可供参考 一、EXCEL-VB 1.实验过…...

Ubuntu添加桌面快捷方式
以idea为例 一. 背景 在ubuntu中,很多时候是自己解压的文件并没有桌面快捷方式,需要自己找到对应的目录的执行文件手动打开,很麻烦 而只需要在 /usr/share/applications 中创建自定义的desktop文件就能自动复制到桌面 二. 添加方法 创建desk…...
10G EPON光模块
一、10G EPON对称光模块 工作模式:上行突发接收、下行连续发射。 工作原理:当需要发送信号时,系统信号通过光模块的电接口把信号传送到驱动芯片,芯片处理后,驱动激光器发出调制光信号,经光纤发到远端&…...

Elasticsearch+Logstash+Kibana可视化集群部署
文章目录 1.组件介绍简述2.集群规划3.Es组件部署4.Logstash组件部署5.Kibana组件部署6.Kibana的基础使用 1.组件介绍简述 Elasticsearch:开源实时分布式搜索和分析引擎,支持大规模数据存储和高吞吐量,提供丰富的搜索功能和可扩展性。 Logsta…...

基于CanMV IDE 开发软件对K210图像识别模块的开发
简介 CanMV IDE 是一款专为 K210 芯片设计的图形识别 Python 软件,它提供了强大的功能,帮助开发者轻松实现基于 K210 芯片的图形识别应用。无论你是初学者还是经验丰富的开发者,CanMV IDE 都能为你提供便捷的开发环境和丰富的资源。 硬件资…...

win11系统 Docker Desktop提示Docker Engine stopped解决全过程记录
DockerDesktop安装指南以及Windows下WSL2和 Hyper-V相关问题追查 【已解决】win10系统 Docker 提示Docker Engine stopped解决全过程记录 本篇文章主要记录Docker Desktop安装和使用时出现的问题及解决方法,以及后续使用夜神模拟器,关闭了Hyper-V时&am…...

工作室如何实现一机一IP
对于工作室而言,多开游戏账号却是其运营模式的核心需求。他们通过大量囤积金币、资源,再将其变现来获取利润。在这种运营模式下,账号数量直接关系到工作室的收益,所以解决 IP 问题就成了手游工作室发展道路上的首要难题࿰…...
WEB安全--SQL注入--二次注入
一、原理: 二次注入的关键在于攻击者的输入并不立即执行,而是经过某些存储或处理后,在后续某个步骤中再触发注入攻击 二、示例: 2.1、sqli-labs-master/less-24: admin# 第一次在网页注册账号和密码时没有漏洞&#x…...
构建现代微服务安全体系:Spring Security、JWT 与 Spring Cloud Gateway 实践
构建现代微服务安全体系:Spring Security、JWT 与 Spring Cloud Gateway 实践 本文将基于提供的代码示例,详细介绍如何在一个Java微服务项目中使用Spring Security、JWT和Spring Cloud Gateway来构建一个高效且安全的微服务体系,并整合性能优…...
Spring Boot 动态数据源实操指南
在实际开发中,我们经常会遇到需要动态切换数据源的场景,比如多租户系统、读写分离、分库分表等。Spring Boot 提供了灵活的配置方式,结合 AbstractRoutingDataSource 可以轻松实现动态数据源切换。本文将带你一步步实现 Spring Boot 动态数据…...
HBase高级技巧:解锁更强大的数据处理能力
HBase高级技巧:解锁更强大的数据处理能力 嘿,小伙伴们!在掌握了HBase的基本操作之后,今天我们将深入探讨一些HBase的高级技巧。这些技巧将帮助你在面对复杂的数据处理需求时更加得心应手,进一步提升系统的性能和可靠性…...

【进阶】JVM篇
为什么学习jvm 1、面试的需要 学过java的程序员对jvm应该不陌生,程序员为什么要学习jvm呢?其实不懂jvm也可以照样写出优质的代码,但是不懂jvm会被大厂的面试官虐的体无完肤。 2、高级程序员需要了解 jvm作用 jvm负责把编译后的字节码转换…...
Golang 面试经典题:map 的 key 可以是什么类型?哪些不可以?
Golang 面试经典题:map 的 key 可以是什么类型?哪些不可以? 在 Golang 的面试中,map 类型的使用是一个常见的考点,其中对 key 类型的合法性 是一道常被提及的基础却很容易被忽视的问题。本文将带你深入理解 Golang 中…...

[10-3]软件I2C读写MPU6050 江协科技学习笔记(16个知识点)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16...
【AI学习】三、AI算法中的向量
在人工智能(AI)算法中,向量(Vector)是一种将现实世界中的数据(如图像、文本、音频等)转化为计算机可处理的数值型特征表示的工具。它是连接人类认知(如语义、视觉特征)与…...
动态 Web 开发技术入门篇
一、HTTP 协议核心 1.1 HTTP 基础 协议全称 :HyperText Transfer Protocol(超文本传输协议) 默认端口 :HTTP 使用 80 端口,HTTPS 使用 443 端口。 请求方法 : GET :用于获取资源,…...

【C++进阶篇】智能指针
C内存管理终极指南:智能指针从入门到源码剖析 一. 智能指针1.1 auto_ptr1.2 unique_ptr1.3 shared_ptr1.4 make_shared 二. 原理三. shared_ptr循环引用问题三. 线程安全问题四. 内存泄漏4.1 什么是内存泄漏4.2 危害4.3 避免内存泄漏 五. 最后 一. 智能指针 智能指…...

群晖NAS如何在虚拟机创建飞牛NAS
套件中心下载安装Virtual Machine Manager 创建虚拟机 配置虚拟机 飞牛官网下载 https://iso.liveupdate.fnnas.com/x86_64/trim/fnos-0.9.2-863.iso 群晖NAS如何在虚拟机创建飞牛NAS - 个人信息分享...

STM32---外部32.768K晶振(LSE)无法起振问题
晶振是否起振主要就检查两个1、晶振与MCU是否兼容;2、晶振的负载电容是否匹配 目录 一、判断晶振与MCU是否兼容 二、判断负载电容是否匹配 1. 晶振负载电容(CL)与匹配电容(CL1、CL2)的关系 2. 如何选择 CL1 和 CL…...
深入浅出Diffusion模型:从原理到实践的全方位教程
I. 引言:生成式AI的黎明 – Diffusion模型是什么? 近年来,生成式人工智能(Generative AI)领域取得了爆炸性的进展,模型能够根据简单的文本提示创作出逼真的图像、连贯的文本,乃至更多令人惊叹的…...

认识CMake并使用CMake构建自己的第一个项目
1.CMake的作用和优势 跨平台支持:CMake支持多种操作系统和编译器,使用同一份构建配置可以在不同的环境中使用 简化配置:通过CMakeLists.txt文件,用户可以定义项目结构、依赖项、编译选项等,无需手动编写复杂的构建脚本…...
跨平台商品数据接口的标准化与规范化发展路径:淘宝京东拼多多的最新实践
在电商行业蓬勃发展的当下,多平台运营已成为众多商家的必然选择。然而,不同电商平台在商品数据接口方面存在差异,导致商家在跨平台运营时面临诸多挑战,如数据对接困难、运营效率低下、用户体验不一致等。跨平台商品数据接口的标准…...