赞
踩
在使用 stm32f4 和 openmv 通信中发现,双方通信逻辑没问题,但是通信不了,加了检查机制——LED闪烁后就可以通信了,也就是说加了延时才通信成功。每次通信加延时不现实,毕竟也不知道要延时多久才通信成功,所以采用超时重发机制
要实现的功能是 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]); }
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。