每个传感器的数据使用空格进行拼接,类似于"11 22 33 44 55"的字符串,Lora接收到字符串数据后,在循环中遍历接收到的数据字符串,使用一个二维数组存储数据,二维数组中的每一个一维数组为一个传感器的数据。当没有遇到空格时,将字符串中的数据取出并拼接到数组中,遇到空格,则将data_len清零,data_count指向二维数组中的下一个一维数组,并退出当前循环,
关键代码如下:
void LoRa_ReceData(void)
{u16 i=0;u16 len=0;OS_ERR err;//CPU_SR_ALLOC();//CPU_CRITICAL_ENTER(); //½øÈëÁÙ½çÇøOSSchedLock(&err); //ÓÐÊý¾ÝÀ´ÁËif(USART3_RX_STA&0x8000){len = USART3_RX_STA&0X7FFF;USART3_RX_BUF[len]=0;//Ìí¼Ó½áÊø·ûUSART3_RX_STA=0;for(i=0;i<len;i++){while(__HAL_UART_GET_FLAG(&UART1_Handler,UART_FLAG_TXE)== RESET);//Ñ»··¢ËÍ,Ö±µ½·¢ËÍÍê±Ï //HAL_UART_Transmit(&UART1_Handler, &USART3_RX_BUF[i], 1, 1000); }if(LoRa_CFG.mode_sta==LORA_STA_Tran)//͸Ã÷´«Êä{ sprintf((char*)rlcd_buff, "%s", USART3_RX_BUF);//ÏÔʾ½ÓÊÕµ½µÄÊý¾Ýprintf("%s\r\n", rlcd_buff);printf("%d\r\n", len);u8 data_len = 0;u8 data_count = 0;for(int i = 0; i < len; i ++){ if (' ' != rlcd_buff[i]){data[data_count][data_len] = rlcd_buff[i];data_len ++;}else{data_count ++;data_len = 0;continue;}}}memset((char*)USART3_RX_BUF,0x00,len);//´®¿Ú½ÓÊÕ»º³åÇøÇå0}OSSchedUnlock(&err);
}