当前位置:   article > 正文

Stm32f407串口2与openmv通信超时重发_串口超时接收重发

串口超时接收重发

Stm32f407串口2与openmv通信超时重发

学习记录

	在使用 stm32f4 和 openmv 通信中发现,双方通信逻辑没问题,但是通信不了,加了检查机制——LED闪烁后就可以通信了,也就是说加了延时才通信成功。每次通信加延时不现实,毕竟也不知道要延时多久才通信成功,所以采用超时重发机制
  • 1

大概思路

要实现的功能是 stm32发送一个数据给 openmv ,然后openmv 扫码,将所得数据传给32。可将数据作为应答信号,如果32没有收到数据就隔n毫秒发一次,重复m次,如发送m次还没有收到数据,即认为通信失败,可重新发送或进行下一步操作。

代码

下面展示一些 内联代码片

void SendSeven()
{
	 u8 j=0,flag=1,len,t,n;
	while(flag)
	 {
		    USART_SendData(USART2,7);         //串口2发送数据
				while(USART_GetFlagStatus(USART2,USART_FLAG_TC)!=SET);
		 delay_ms(20);  //隔20ms发一次
		 j++;
			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;t<len;t++,n++)
			{
					runplay[t] = USART2_RX_BUF[n];
			}
			flag=0;
		}
		if(j==1000)  //发送1000次
			flag=0;
	}
	 LCD_DrawFont_Num96(0,0,RED,WHITE,runplay[0]);  //显示数据
	LCD_DrawFont_Num96(55,0,RED,WHITE,runplay[1]);
	LCD_DrawFont_Num96(110,0,RED,WHITE,runplay[2]);
	
	LCD_DrawFont_Num96(0,96,RED,WHITE,0);
	
	LCD_DrawFont_Num96(0,96*2,RED,WHITE,runplay[3]);
	LCD_DrawFont_Num96(55,96*2,RED,WHITE,runplay[4]);
	LCD_DrawFont_Num96(110,96*2,RED,WHITE,runplay[5]);
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/2023面试高手/article/detail/714982
推荐阅读
相关标签
  

闽ICP备14008679号