2.3 从零上手OpenMV:硬件接口详解与STM32通信实战
1. OpenMV硬件接口全解析第一次拿到OpenMV开发板时我对着密密麻麻的接口有点懵。这块火柴盒大小的板子竟然集成了这么多功能接口。经过几个项目的实战我总结出了最实用的接口使用指南。先说说最重要的供电问题。OpenMV的供电方式主要有两种USB供电和外部电源供电。USB供电最简单插上电脑就能用但要注意这时候千万别再外接其他电源否则容易烧板子。我有个朋友就犯过这个错误结果板子冒烟了几百块钱就这么没了。外部供电时一定要用5V电源千万不能用3.3V。供电引脚顺序是5V、GND、TX、RX接口是PH2.0-4P规格。这里有个容易踩的坑PBx和Px不是一回事接线时要特别注意。我第一次接的时候就搞混了导致通信完全不通。两侧的GPIO接口功能很丰富左侧引出RST、BOOT、P9-P7、VIN、GND右侧有P0-P6和3.3V 这些GPIO在后续与STM32通信时会经常用到建议先做好标记。摄像头接口支持多种型号H7 Plus可以接OV5640、OV2640、OV7725等。我实测下来OV5640效果最好但价格也最贵。如果预算有限OV2640是个不错的折中选择。更换镜头时要注意M12接口的镜头需要配合转接环使用。2. OpenMV与STM32硬件连接实战让OpenMV和STM32对话是很多项目的关键。我做过最典型的应用就是让OpenMV做图像识别然后把结果发给STM32做控制。下面分享我的接线经验。供电方案选择方案一STM32给OpenMV供电 接法STM32的5V输出 → OpenMV的5V引脚 优点接线简单 缺点STM32的5V输出电流可能不足方案二外部电源同时供电 接法电源正极分两路分别接STM32和OpenMV的5V 优点供电稳定 缺点需要额外电源我推荐方案二特别是在需要驱动多个外设时。记得一定要共地这是很多通信问题的根源。通信线连接OpenMV的TX → STM32的RX建议用PB11OpenMV的RX → STM32的TX建议用PB10GND对接GND这里有个实用技巧用不同颜色的杜邦线区分信号线我习惯红色接电源黑色接地黄色和绿色接通信线这样排查问题时一目了然。3. 串口通信代码调试硬件接好后就要让两个设备说上话。OpenMV和STM32最常用的通信方式就是串口下面分享我的调试经验。OpenMV端代码import pyb uart pyb.UART(3, 115200) # 使用UART3波特率115200 def send_data(data): uart.write(data \r\n) # 加回车换行方便调试 while True: # 假设这是识别到的物体坐标 obj_x 100 obj_y 150 send_data(f{obj_x},{obj_y}) # 发送坐标数据STM32端代码HAL库示例UART_HandleTypeDef huart3; uint8_t rx_buffer[64]; uint8_t rx_data; void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart) { if(huart huart3){ // 处理接收到的数据 process_data(rx_data); // 重新启动接收 HAL_UART_Receive_IT(huart3, rx_data, 1); } } void process_data(uint8_t data) { static uint8_t buffer[64]; static uint8_t index 0; if(data \r){ buffer[index] \0; // 这里可以解析OpenMV发来的数据 parse_coordinate((char*)buffer); index 0; }else if(data ! \n){ buffer[index] data; } }调试时最容易遇到的问题是波特率不匹配。一定要确保两边设置的波特率完全一致我建议先用115200这个常用波特率等通信稳定后再尝试其他速率。另一个常见问题是数据格式混乱。我的经验是在数据末尾加回车换行(\r\n)使用固定的数据格式比如x,y添加简单的校验机制比如在数据前加个$作为起始标志4. 典型应用场景实现OpenMVSTM32的组合在机器视觉领域应用广泛下面介绍几个我实际做过的项目。巡线小车OpenMV负责识别赛道黑线STM32控制电机。关键点是OpenMV需要输出线中心的偏移量通信频率要足够高至少10Hz需要做数据滤波避免抖动物体追踪我做过一个追踪彩色球体的机械臂。实现要点OpenMV识别特定颜色的物体计算物体在画面中的位置将坐标转换为机械臂的角度通过串口发送给STM32这里有个实用技巧在OpenMV端先对坐标做归一化处理比如把画面中心设为(0,0)四边为(±100,±100)这样STM32端处理起来更方便。二维码识别OpenMV内置了二维码识别库识别结果可以通过串口直接发送。我在一个仓储项目中用它来识别货箱编号实测识别率能达到99%以上。这些项目的完整代码和接线图我都放在GitHub上有需要的朋友可以参考。记住一点做机器视觉项目时光线条件很重要建议在固定光源环境下先调试再考虑环境光的影响。