STM32单片机与openmv的串口通信

这一篇博客主要是讲一下openmv的串口通信,我之前发了一篇openmv的库函数的博客,那里面有讲到一些,但是还是太浅显,所以写一篇详细的:

一.调用

如果你要使用串口,那么首先要打开串口,就必须要在函数开头添加以下代码

import pyb
from pyb import UART

这两行代码让你拥有了串口的使用权,接下来你就要对串口进行配置

uart=UART(3,115200)

可以看到括号中有两个参数分别是3和115200

其中3是我所配置的串口号,115200为波特率

注意:OpenMV RT 只有串口UART(1),对应P4-TX P5-RX。

OpenMV4 H7 Plus, OpenMV4 H7, OpenMV3 M7 的串口UART(1)是P0-RX P1-TX。

OpenMV4 H7 Plus, OpenMV4 H7, OpenMV3 M7, OpenMV2 M4 的串口UART(3)是P4-TX P5-RX

二.实例

下面我用一个apriltag标签测距的代码来给大家分析

def find_apriltag_ceju():
    img = sensor.snapshot()
    for tag in img.find_apriltags(fx=f_x, fy=f_y, cx=c_x, cy=c_y): # 默认为TAG36H11
        img.draw_rectangle(tag.rect(), color = (255, 0, 0))
        img.draw_cross(tag.cx(), tag.cy(), color = (0, 255, 0))
        print_args = (tag.x_translation(), tag.y_translation(), tag.z_translation(), \
           degrees(tag.x_rotation()), degrees(tag.y_rotation()), degrees(tag.z_rotation()))
        # 位置的单位是未知的,旋转的单位是角度
        #print("Tx: %f, Ty %f, Tz %f, Rx f, Ry %f, Rz %f" % print_args)
        x=k*tag.z_translation()
        x1=abs(x)
        #x2=int(x1)
        x_bytes = struct.pack('<f', x1) # '<f' 表示小端字节序的单精度浮点数 # 创建一个包含特定字节的bytearray,包含x_bytes的字节
        data=bytearray([0x4D,0x56,4]) + bytearray(x_bytes) + bytearray([0x21,0x3B])
        uart.write(data)
        print(x1,"cm")
        sensor.skip_frames(5)

 因为x本身是一个浮点型的数,然而串口发送数据只能发送字节,所以我在函数中定义了x1=abs()取绝对值,然后将整型拆分为两个字节发送给单片机。

x_bytes = struct.pack('<f', x1) # '<f' 表示小端字节序的单精度浮点数 # 创建一个包含特定字节的bytearray,包含x_bytes的字节

​

struct.pack用于将Python的值根据格式符,转换为字符串(因为Python中没有字节(Byte)类型,可以把这里的字符串理解为字节流,或字节数组)。其函数原型为:struct.pack(fmt, v1, v2, …),参数fmt是格式字符串,关于格式字符串的相关信息在下面有所介绍。v1, v2, …表示要转换的python值。

三.其他

大家基础的可以去星瞳科技的官网入门教程中进行学习,里面也有串口通信的课程,完整的学习完之后基本能看懂大部分openmv的代码。ψX60wYYcaqWiN25Rψ

stm32单片机openmv之间的通信是如何实现的? 回答: stm32单片机openmv之间的通信可以通过串口实现。在stm32单片机的代码中,可以使用USART模块来接收openmv传过来的数据。具体的代码实现可以参考引用\[1\]中的代码示例。在代码中,通过判断接收到的数据来确定通信的状态,并将接收到的数据存储在一个数组中。同时,需要注意设置串口的波特率、停止位等参数,确保与openmv的串口设置一致,这样才能正常进行通信。在openmv的代码中,需要设置相应的串口参数,并将数据发送给stm32单片机。在通信过程中,还需要将stm32单片机的GND与openmv的GND连接在一起,以确保电平的一致性。通过这样的方式,stm32单片机openmv之间可以进行可靠的通信。 #### 引用[.reference_title] - *1* *2* [STM32单片机Openmv串口通信](https://blog.csdn.net/LJH_1999/article/details/88782943)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] - *3* [超详细OpenMVSTM32单片机通信 (有完整版源码)](https://blog.csdn.net/lihaotian111/article/details/116384913)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值