以上就是今天要讲的内容,本文仅仅简单介绍了OpenMV中的硬件流和软件流。
硬件流控制通过额外的物理信号线(RTS和CTS)动态控制数据流,确保发送方和接收方的缓冲区不会溢出。
• RTS(Request to Send):由接收方控制。当接收方缓冲区空闲时,RTS为低电平(允许发送);当缓冲区接近满载时,RTS为高电平(暂停发送)。
• CTS(Clear to Send):由发送方控制。发送方仅在CTS为低电平时发送数据。
◦ 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)
软件流控制通过特殊字符(XON/XOFF)动态控制数据流,无需物理信号线。
• XON(ASCII 17,0x11):接收方发送XON,表示可以继续接收数据。
• XOFF(ASCII 19,0x13):接收方发送XOFF,表示暂停发送数据。
import pyb
#初始化UART3,波特率115200,启用软件流控制(XON/XOFF)
uart = pyb.UART(3, 115200, flow=pyb.UART.XONXOFF)
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 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)
◦ 使用硬件流控制前,确认OpenMV和外部设备均支持RTS/CTS。
◦ 错误连接RTS/CTS线会导致通信失败。
◦ 发送端和接收端的波特率、流控制模式必须一致。
◦ 即使启用流控制,仍需通过uart.any()和分块传输优化缓冲区使用。
◦ 长距离通信中,硬件流控制需配合屏蔽线使用,软件流控制需增加校验机制。
• 硬件流控制:通过RTS/CTS信号实现高可靠、高速通信,适合工业级应用。
• 软件流控制:通过XON/XOFF字符实现灵活的低速通信,适合资源受限场景。
• 选择建议:
◦ 优先使用硬件流控制(高速、可靠场景)。
◦ 仅在硬件不支持时使用软件流控制(低速、简单场景)。
通过合理选择流控制方式,可显著提升OpenMV在复杂环境中的通信稳定性和效率。
以上就是今天要讲的内容,本文仅仅简单介绍了OpenMV中的硬件流和软件流。