Openmv 与 Stm32f407通信

Openmv 与 Stm32f407通信

入门学习记录

学习中接触到了openmv ,发现视觉也挺好玩的,openmv视觉处理的数据经常要传到另一个单片机,这里openmv用的是stm32h7,用的串口为串口3。控制板是stm32f407zgt6,用的串口是串口2。
目的是将openmv的数据通过串口传到控制板并在oled上面显示。

大概思路

两个单片机用串口通信,必须把自己的串口配置好。stm32f407串口2的配置在上一个文章讲了;openmv的串口直接调用。双方约定好波特率就可以通信了。难的是数据的处理,在用单片机与电脑通信的时候会发现有时候得到一些乱码,主要是串口有可能一直在发送数据,这不是我们希望得到的。在电脑串口助手观察十六进制会发现在我们要的信息前面有乱码的十六进制,因此在我们需要的数据前面自己加两个已知的数,接收的时候判断到了这两个数就可以认为接下来的就是我们要的数据,这两个数就是所谓的“帧头”,以帧发送数据比较常用,帧头和数据比较重要,其它可以省略,具体可以百度。
在这里插入图片描述
1.配置串口,约定好波特率
2.IO接线,RX接TX
3.传数据,收数据。openmv的数据要用 bytearray()函数将数据转化为字节形式传到控制板
4.数据处理

代码

openmv

import time
from pyb import UART

uart = UART(3, 115200)  //波特率为115200

while(True):
    FH = bytearray([0xb3,0xb3])  //帧头,控制板接收数据以后判断,转化为字节传送,不能用16进制直接传
    uart.write(FH)    //写到串口
    uart.write("123321")   /// 写数据
    FH = bytearray([0x0d,0x0a])   //结束标志  ,换行和回车的ascll
    uart.write(FH)
    time.sleep(1000)

main.c

#include "sys.h"     //没有的头文件要删掉
#include "delay.h"
#include "usart.h"
#include "led.h"
#include "beep.h"
#include "key.h"
#include "oled.h"

u8 UsartDisPlay[200];  // oled上面显示的

int main(void)
{ 
	u8 t,n;
	u8 len;	
	u16 times=0; 
	NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);//设置系统中断优先级分组2
	delay_init(168);		//延迟初始化
	uart2_init(115200);  //波特率为115200
	LED_Init();		  	
	OLED_Init();  //oled初始化
	while(1)
	{
			if(USART2_RX_STA&0x8000)
		{					   
			len=USART2_RX_STA&0x3fff;//得到此次接收到的数据长度
			for(t=0;t<len;t++)
			{
				 if(USART2_RX_BUF[t]==0xb3)     //判断帧头,即我们加的两个数
					 if(USART2_RX_BUF[t+1]==0xb3)
						  n=t+2;    //记录我们需要数据的位置
			}
			for(t=0;n<len;t++,n++)
				UsartDisPlay[t] = USART2_RX_BUF[n];  // 将我们需要的数据在oled上面显示,便于观察是否正确
			OLED_ShowString(1,1,UsartDisPlay);
			USART2_RX_STA=0;
		}else
		{
			times++;
			if(times%5000==0)
			{
			     LED1=!LED1;
			} 
			if(times%30==0)LED0=!LED0;  //闪烁LED,提示系统正在运行
			delay_ms(10);
		}			
	}
}

![在这里在这里插入图片描述
stm32f407zgt6串口配置的代码在上一篇文章。

  • 24
    点赞
  • 161
    收藏
    觉得还不错? 一键收藏
  • 17
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 17
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值