LoRa项目--两款板子的互相通信

前言

发现制作了很多东西,但是从新制作的时候,时间久了又需要重新整理比较浪费时间,为了提高效率,特此开始记录制作东西的简单流程方便下次快速整理

流程

  1. Lora模块找好,上位机配置透明传输,之后当串口使用
    在这里插入图片描述

2、当串口使用,无非就是一些变量的传输显示
技术点:
这一块知识看自己的STM32应用笔记
串口中断收发,自定义帧头帧尾,字节数据或者移位发扩大收缩小。
示列:

if(FLAG == 1){
		USART_SendData(USART3,'A');
		while(USART_GetFlagStatus(USART3, USART_FLAG_TXE) == RESET);
	    FLAG = 0 ;
	    printf("发送完成 \r\n");
	    delay_ms(100);
}
void USART3_IRQHandler(void)   //串口接收数据且接收的数据包含头尾标识为例。
{//状态位只能有硬件置位也就是置1说明中断产生,软件只能读和清零
	if(USART_GetITStatus(USART3,USART_IT_RXNE) != RESET) //中断产生 USART_GetITStatus串口状态检测函数
	{
	USART_ClearITPendingBit(USART3,USART_IT_RXNE); //清除中断标志
	 UsartPrintf(USART_DEBUG, "进入A\r\n"); 
     Uart3 = USART_ReceiveData(USART3); 
	 UsartPrintf(USART_DEBUG, "接收变量%c",Uart3);					
	 flag=1;		
 }
}
   union ddd
       {
        float ceshi;
        unsigned char ceshi1[4];
       }ccc;
    union ddd ccc;						
					
						
	union fff
       {
        float W;
        unsigned char ceshW[4];
        }eee;
 union fff eee;	//共用体的声明
 
 
 
 
	ccc.i=gpsx.longitude;  //gpsx.longitude 是传感器已经采集的float型变量
	USART_SendData(USART2,'A'); //帧头
	while(USART_GetFlagStatus(USART2, USART_FLAG_TXE) == RESET);
	gpsa=xxx.cc[0]; 
	Usart_SendByte(USART2,gpsa);
	while(USART_GetFlagStatus(USART2, USART_FLAG_TXE) == RESET);
	gpsb=xxx.cc[1];
	Usart_SendByte(USART2,gpsb);
	while(USART_GetFlagStatus(USART2, USART_FLAG_TXE) == RESET);
	gpsc=xxx.cc[2];
	Usart_SendByte(USART2,gpsc);
	while(USART_GetFlagStatus(USART2, USART_FLAG_TXE) == RESET);
	gpsd=xxx.cc[3];
	Usart_SendByte(USART2,gpsd);
	while(USART_GetFlagStatus(USART2, USART_FLAG_TXE) == RESET);
	USART_SendData(USART2,'B');
	while(USART_GetFlagStatus(USART2, USART_FLAG_TXE) == RESET);
	
	//传输完一个float型变量
	
	
	tp=gpsx.longitude;
	sprintf((char *)dtbuf,"Longitude:%.5f %1c   ",tp/=100000,gpsx.ewhemi);	//得到经度字符串
 	LCD_ShowString(30,120,200,16,16,dtbuf);	
	printf((char *)dtbuf,"Longitude:%.5f %1c",tp/=100000,gpsx.ewhemi);




    eee.W=(gpsx.longitude);
	USART_SendData(USART2,'C');
	while(USART_GetFlagStatus(USART2, USART_FLAG_TXE) == RESET);
	gpswa=eee.ceshW[0];
	Usart_SendByte(USART2,gpswa);
	while(USART_GetFlagStatus(USART2, USART_FLAG_TXE) == RESET);
	gpswb=eee.ceshW[1];
	Usart_SendByte(USART2,gpswb);
	while(USART_GetFlagStatus(USART2, USART_FLAG_TXE) == RESET);
	gpswc=eee.ceshW[2];
	Usart_SendByte(USART2,gpswc);
	while(USART_GetFlagStatus(USART2, USART_FLAG_TXE) == RESET);
	gpswd=eee.ceshW[3];
	Usart_SendByte(USART2,gpswd);
	while(USART_GetFlagStatus(USART2, USART_FLAG_TXE) == RESET);
	USART_SendData(USART2,'D');
	while(USART_GetFlagStatus(USART2, USART_FLAG_TXE) == RESET);
	delay_ms(100);

	USART_SendData(USART2,'E');
	while(USART_GetFlagStatus(USART2, USART_FLAG_TXE)== RESET);
	Usart_SendByte(USART2,temperature);
	while(USART_GetFlagStatus(USART2, USART_FLAG_TXE) == RESET);
	delay_ms(100);
	Usart_SendByte(USART2,humidity);
	while(USART_GetFlagStatus(USART2, USART_FLAG_TXE) == RESET);
	USART_SendData(USART2,'F');
	while(USART_GetFlagStatus(USART2, USART_FLAG_TXE) == RESET);
 
 union a
      {
       float sdata;
       unsigned   char  cdata[4];

      }b;
			
			 union c
      {
       float cdata;
       unsigned   char  ddata[4];

      }d;
union c d;
int i;
void USART3_IRQHandler(void)   //串口接收数据且接收的数据包含头尾标识为例。
{//状态位只能有硬件置位也就是置1说明中断产生,软件只能读和清零
	if(USART_GetITStatus(USART3,USART_IT_RXNE) != RESET) //中断产生 USART_GetITStatus串口状态检测函数
	{
	USART_ClearITPendingBit(USART3,USART_IT_RXNE); //清除中断标志
  Uart3_Buffer[Uart3_Rx] = USART_ReceiveData(USART3); 
//	UsartPrintf(USART_DEBUG, "%s\n",&Uart3_Buffer[Uart3_Rx]);
	Uart3_Rx++;
//			UsartPrintf(USART_DEBUG, "Uart3_Buffer");
		if(Uart3_Buffer[Uart3_Rx-1]=='B'||Uart3_Rx == Max_BUFF_Len)
//注意为什么是	Uart3_Rx-1	因为每次进中断就自加一、
              buf  0     1
 		      rx   1     2
              
		{	UsartPrintf(USART_DEBUG, "进入B\r\n"); 
					if(Uart3_Buffer[0]=='A')
					{		 	UsartPrintf(USART_DEBUG, "进入A\r\n"); 
								b.cdata[0]=Uart3_Buffer[1];
								b.cdata[1]=Uart3_Buffer[2];
								b.cdata[2]=Uart3_Buffer[3];
								b.cdata[3]=Uart3_Buffer[4];		
								gpslongitude =	b.sdata;			
								for(i=0;i<50;i++)
								{
									Uart3_Buffer[i] =0;
								}
								Uart3_Rx=0;
						}
					else
								{
									Uart3_Rx=0;
								}
							}
		if(Uart3_Buffer[Uart3_Rx-1]=='D'||Uart3_Rx == Max_BUFF_Len)
		{
					UsartPrintf(USART_DEBUG, "进入D\r\n");
					if(Uart3_Buffer[0]=='C')
					{			UsartPrintf(USART_DEBUG, "进入C\r\n"); 
								d.ddata[0]=Uart3_Buffer[1];
								d.ddata[1]=Uart3_Buffer[2];
								d.ddata[2]=Uart3_Buffer[3];
								d.ddata[3]=Uart3_Buffer[4];
								gpslatitude =	d.cdata;			
								for(i=0;i<50;i++)
								{
									Uart3_Buffer[i] =0;
								}
								Uart3_Rx=0;
						}
					else
								{
									Uart3_Rx=0;
								}
	 	}
				if(Uart3_Buffer[Uart3_Rx-1]=='F'||Uart3_Rx == Max_BUFF_Len)
		{
					if(Uart3_Buffer[0]=='E')
					{		 
								    l=Uart3_Buffer[1];
								    k=Uart3_Buffer[2];			
								for(i=0;i<50;i++)
								{
									Uart3_Buffer[i] =0;
								}
								Uart3_Rx=0;
						}
					else
								{
									Uart3_Rx=0;
					            }
		   }		
		}
	}

3、案列
在这里插入图片描述

  • 2
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值