OpenMv与stm32简单串口通信

前言

    刚开始学openmv与32串口通信,我是用的stm32f103的板子。开始想简单发送字符或者16位数试验一下,然后就遇到了个小问题,即openmv和单片机可以分别和电脑通信,但是让他俩通信的话就不行,随后解决,在此记录。

我的思路是用openmv给单片机每秒发送五个bit的数据,然后单片机每接受一次led灯就翻转一次。

1 发送字符

    这是单片机主程序: 用的正点原子的串口实验例程,只是主程序加了个led灯的翻转。

 int main(void)
 {	
	u8 t;
	u8 len;	
	u16 times=0; 
 
	delay_init();	    	 //延时函数初始化	
	NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);// 设置中断优先级分组2
	uart_init(9600);	 //串口初始化为9600
	LED_Init();		  	 //初始化与LED连接的硬件接口 
 
	while(1)
	{
		if(USART_RX_STA&0x8000)
		{					   
			len=USART_RX_STA&0x3fff;//得到此次接收到的数据长度
			if(len==5)LED0=!LED0;
			printf("\r\n您发送的消息为:\r\n");
			for(t=0;t<len;t++)
			{
				USART1->DR=USART_RX_BUF[t];
				while((USART1->SR&0X40)==0);//等待发送结束
			}
			printf("\r\n\r\n");//插入换行
			USART_RX_STA=0;
		}

	}	 
}

由于单片机接收到的数据需要以0x0d,0xad结尾作为接受完成判断的,如果是字符的话就是回车换行。而用电脑与单片机实验,给单片机发数据时,电脑发的数据是在后面自动加回车和换行的,也就是说我用电脑发 hello=用openmv发 hello\r\n。

 这是openmv的程序:

import time
from pyb import UART

# Always pass UART 3 for the UART number for your OpenMV Cam.
# The second argument is the UART baud rate. For a more advanced UART control
# example see the BLE-Shield driver.
uart = UART(3, 9600)
while(True):
    uart.write("Hello\r\n")
    #data=bytearray([0x80,0x06,0x02,0x78,0x23,0x0d,0x0a])
    #uart.write(data)
    time.sleep_ms(1000)
    

现在上面openmv程序发送的是正确的,为5个字符。

2 发送十六位数据

    单片机程序不用变,只需改动openmv程序即可。

import time
from pyb import UART

# Always pass UART 3 for the UART number for your OpenMV Cam.
# The second argument is the UART baud rate. For a more advanced UART control
# example see the BLE-Shield driver.
uart = UART(3, 9600)
while(True):
    #uart.write("Hello\r\n")
    data=bytearray([0x80,0x06,0x02,0x78,0x23,0x0d,0x0a])
    uart.write(data)
    time.sleep_ms(1000)

同理,发送16位数据需要在后面加上0x0d,0xad即可。

 参考博主文章:openmv 发送16进制数_zzzzjh的博客-CSDN博客

版权声明:本文为CSDN博主「杰森斯坦森二号」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/m0_57747837/article/details/120751141

前言

    刚开始学openmv与32串口通信,我是用的stm32f103的板子。开始想简单发送字符或者16位数试验一下,然后就遇到了个小问题,即openmv和单片机可以分别和电脑通信,但是让他俩通信的话就不行,随后解决,在此记录。

我的思路是用openmv给单片机每秒发送五个bit的数据,然后单片机每接受一次led灯就翻转一次。

1 发送字符

    这是单片机主程序: 用的正点原子的串口实验例程,只是主程序加了个led灯的翻转。

 int main(void)
 {	
	u8 t;
	u8 len;	
	u16 times=0; 
 
	delay_init();	    	 //延时函数初始化	
	NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);// 设置中断优先级分组2
	uart_init(9600);	 //串口初始化为9600
	LED_Init();		  	 //初始化与LED连接的硬件接口 
 
	while(1)
	{
		if(USART_RX_STA&0x8000)
		{					   
			len=USART_RX_STA&0x3fff;//得到此次接收到的数据长度
			if(len==5)LED0=!LED0;
			printf("\r\n您发送的消息为:\r\n");
			for(t=0;t<len;t++)
			{
				USART1->DR=USART_RX_BUF[t];
				while((USART1->SR&0X40)==0);//等待发送结束
			}
			printf("\r\n\r\n");//插入换行
			USART_RX_STA=0;
		}

	}	 
}

由于单片机接收到的数据需要以0x0d,0xad结尾作为接受完成判断的,如果是字符的话就是回车换行。而用电脑与单片机实验,给单片机发数据时,电脑发的数据是在后面自动加回车和换行的,也就是说我用电脑发 hello=用openmv发 hello\r\n。

 这是openmv的程序:

import time
from pyb import UART

# Always pass UART 3 for the UART number for your OpenMV Cam.
# The second argument is the UART baud rate. For a more advanced UART control
# example see the BLE-Shield driver.
uart = UART(3, 9600)
while(True):
    uart.write("Hello\r\n")
    #data=bytearray([0x80,0x06,0x02,0x78,0x23,0x0d,0x0a])
    #uart.write(data)
    time.sleep_ms(1000)
    

现在上面openmv程序发送的是正确的,为5个字符。

2 发送十六位数据

    单片机程序不用变,只需改动openmv程序即可。

import time
from pyb import UART

# Always pass UART 3 for the UART number for your OpenMV Cam.
# The second argument is the UART baud rate. For a more advanced UART control
# example see the BLE-Shield driver.
uart = UART(3, 9600)
while(True):
    #uart.write("Hello\r\n")
    data=bytearray([0x80,0x06,0x02,0x78,0x23,0x0d,0x0a])
    uart.write(data)
    time.sleep_ms(1000)

同理,发送16位数据需要在后面加上0x0d,0xad即可。

 参考博主文章:openmv 发送16进制数_zzzzjh的博客-CSDN博客

版权声明:本文为CSDN博主「杰森斯坦森二号」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/m0_57747837/article/details/120751141

生成海报
点赞 0

杰森斯坦森二号

我还没有学会写个人说明!

暂无评论

发表评论

相关推荐

GPIO的工作模式、GPIO复用

1、GPIO 内部结构 GPIO 的电路是一堆电路,所以需要配置寄存器,来打开对应的开关,来实现不同的功能。 输入部分: 输入的信号,不会反向的回流到输出电路&#xff0

pwm电机调速的原理介绍与代码实现

1、pwm实现调速的原理与介绍 PWM(Pulse Width Modulation)脉冲宽度调制。 1)占空比 pwm占空比就是一个脉冲周期内有效电平在整个周期所占的比例。 通过调节PWM的占空比就能调节IO口上电压的持续

【STM32Cube笔记】2-STM32Cube安装教程

【STM32Cube笔记】系列文章目录 1-基于STM32的VSCode入门级教程前言 2-STM32Cube安装教程 3-STM32CubeIDE汉化 4-STM32Cube配置时钟设置 5-跑马灯引脚配置 6-Cortex-M7内核基本配