stm32与openmv通信

stm32与OPENMV通信

​ openmv通过将采集的图像进行二值化,将数据通过串口的形式与stm32单片机的串口之间进行通信

这里给出STM32接受的代码

// 串口中断服务函数
void DEBUG_USART_IRQHandler(void)
{
	uint8_t com_data; 
	uint8_t i;
	static u8 RxCounter1=0;
	static u16 RxBuffer1[10]={0};
	static u8 RxState = 0;	
	static u8 RxFlag1 = 0;
	if(USART_GetITStatus(DEBUG_USARTx,USART_IT_RXNE)!=RESET)
	{		
		com_data = USART_ReceiveData(DEBUG_USARTx);
				if(RxState==0&&com_data==0x2C)  //0x2c帧头
				{
					RxState=1;
					RxBuffer1[RxCounter1++]=com_data;
				}
		
				else if(RxState==1&&com_data==0x12)  //0x12帧头
				{
					RxState=2;
					RxBuffer1[RxCounter1++]=com_data;
				}
				else if(RxState==2)
				{
					RxBuffer1[RxCounter1++]=com_data;
			if(RxCounter1>=10||com_data == 0x5B)  //RxBuffer1接受满了,接收数据结束
					{
						RxState=3;
						RxFlag1=1;
						Cx=RxBuffer1[RxCounter1-5];
						Cy=RxBuffer1[RxCounter1-4];
						Cw=RxBuffer1[RxCounter1-3];
						Ch=RxBuffer1[RxCounter1-2];
					}
				}
		
				else if(RxState==3)		//检测是否接受到结束标志
				{
						if(RxBuffer1[RxCounter1-1] == 0x5B)
						{
									USART_ITConfig(DEBUG_USARTx,USART_IT_RXNE,DISABLE);//关闭DTSABLE中断
									if(RxFlag1==1)//接受完全数据,进行数据处理
									{
//									TFT_ShowNumber_SignedInteger_16x16(0,0,Cx,3,Red,Black);
//									OLED_Refresh();
//									OLED_ShowNum(0, 0,Cx,3,16,1);
//									OLED_ShowNum(0,17,Cy,3,16,1);
//									OLED_ShowNum(0,33,Cw,3,16,1);
//									OLED_ShowNum(0,49,Ch,3,16,1);
										Delay(0x0FFFFF);
										Delay(0x0FFFFF);
										Delay(0x0FFFFF);
										Delay(0x0FFFFF);
										Delay(0x0FFFFF);
									}
									RxFlag1 = 0;
									RxCounter1 = 0;
									RxState = 0;
									USART_ITConfig(DEBUG_USARTx,USART_IT_RXNE,ENABLE);
						}
						else   //接收错误
						{
							TFT_ShowString_16x16(40,40,"error",Red,Black);
									RxState = 0;
									RxCounter1=0;
									for(i=0;i<10;i++)
									{
										RxBuffer1[i]=0x00;      //将存放数据数组清零
									}
						}
				} 
	
				else   //接收异常
				{
					TFT_ShowString_16x16(40,40,"error2",Red,Black);
						RxState = 0;
						RxCounter1=0;
						for(i=0;i<10;i++)
						{
								RxBuffer1[i]=0x00;      //将存放数据数组清零
						}
				}
	}	 
}

发送的数据结构是 [数据] ,通过检测 "["开头,检测“]”为结束。

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值