標(biāo)題: stm32 freeRTOS多串口通信 接收不定長數(shù)據(jù) [打印本頁]

作者: sankare    時間: 2022-2-26 18:49
標(biāo)題: stm32 freeRTOS多串口通信 接收不定長數(shù)據(jù)
void HAL_UART_TxCpltCallback(UART_HandleTypeDef *huart)
{
  /* Prevent unused argument(s) compilation warning */
  UNUSED(huart);
  /* NOTE: This function should not be modified, when the callback is needed,
   
           the HAL_UART_TxHalfCpltCallback could be implemented in the user file
   */
    if(huart->Instance==USART1){
        HAL_UART_Receive_DMA(&huart1,(uint8_t *)&aRxBuffer1,1);
    }
    if(huart->Instance==USART3){
        HAL_UART_Receive_DMA(&huart3,(uint8_t *)&aRxBuffer3,1);
    }
}
void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart)
{
    char buf[255],enter[32];
    int i=1,temp=0;
    uint8_t data[30]={"\n I have received:OK"};
    char *map;
    char key[25];
    char value[4];
    int year,mon,day,hour,min,sec;
    char *ssid;
    char *passwd;
    UNUSED(huart);
    if(huart->Instance==USART1){
        Uart1_RxBuffer[Uart1_Rx_Cnt++]=aRxBuffer1;
        if((Uart1_RxBuffer[Uart1_Rx_Cnt-1]==0x0A)&&(Uart1_RxBuffer[Uart1_Rx_Cnt-2]==0x0D))
        {
            HAL_UART_Transmit_DMA(&huart1,(uint8_t *)Uart1_RxBuffer, strlen(Uart1_RxBuffer));

            if(strstr(Uart1_RxBuffer,"passwd")!=NULL)
            {
                        strtok(Uart1_RxBuffer,":");
                        ssid=strtok(NULL,"_");
                        strtok(NULL,":");
                        passwd=strtok(NULL,"_");

                        strcat(AT_CWJAP,ssid);      
                        strcat(AT_CWJAP,"\",\"");
                        strcat(AT_CWJAP,passwd);
                        strcat(AT_CWJAP,"\"\r\n");



                         my_printf("%s",AT_CWJAP);
                        strcpy(AT_CWJAP,"AT+CWJAP=\"");



                    }

            Uart1_Rx_Cnt=0;
//                  strcpy(Uart1_RxBuffer,"");
        }
        HAL_UART_Receive_DMA(&huart1,(uint8_t *)&aRxBuffer1,1);

    }


    if(huart->Instance==USART3){
        Uart3_RxBuffer[Uart3_Rx_Cnt++]=aRxBuffer3;

    if((Uart3_RxBuffer[Uart3_Rx_Cnt-1]==0x0A)&&(Uart3_RxBuffer[Uart3_Rx_Cnt-2]==0x0D))
    {   
          osMailPut(myQueue06Handle,Uart3_RxBuffer);
            //HAL_UART_Transmit_DMA(huart, data, strlen((char*)data));
            if(strstr(Uart3_RxBuffer, "led") != NULL)//在a中查找b,如果存在,
            {
                     osMessagePut(wifi_flagHandle,1,osWaitForever);

            }
            else
            {
                osMessagePut(wifi_flagHandle,0,osWaitForever);
            }
            if(strstr(Uart3_RxBuffer, "led_breath") != NULL)//在a中查找b,如果存在,
            {
                     led=1;

            }
                    if(strstr(Uart3_RxBuffer, "led_off") != NULL)//在a中查找b,如果存在,
            {
                     led=0;

            }
                    if(strstr(Uart3_RxBuffer, "led_on") != NULL)//在a中查找b,如果存在,
            {
                     led=2;

            }
            if(strstr(Uart3_RxBuffer, "date") != NULL)//在a中查找b,如果存在,
            {


                    strtok(Uart3_RxBuffer,"_");
                    year=atoi(strtok(NULL,"-"));

                    mon=atoi(strtok(NULL,"-"));

                    day=atoi(strtok(NULL,"_"));

                    hour=atoi(strtok(NULL,":"));

                    min=atoi(strtok(NULL,":"));

                    sec=atoi(strtok(NULL,":"));
                  strtok(NULL,"_");
                    ds1302_wirte_rig(0x8e,0x00);//關(guān)閉寫保護(hù)
                    ds1302_wirte_rig(0x80,dtoh(sec));//seconds10秒
                    ds1302_wirte_rig(0x82,dtoh(min));//minutes10分
                    ds1302_wirte_rig(0x84,dtoh(hour));//hours10時
                    ds1302_wirte_rig(0x86,dtoh(day));//date12日
                    ds1302_wirte_rig(0x88,dtoh(mon));//months5月
//                  ds1302_wirte_rig(0x8a,dtoh(week));//days星期三
                    ds1302_wirte_rig(0x8c,dtoh(year));//year2021年
                    ds1302_wirte_rig(0x8e,0x80);//關(guān)閉寫保護(hù)
//              HAL_UART_Transmit_DMA(huart, (uint8_t*)value, strlen((char*)value));
            }

            if(strstr(Uart3_RxBuffer, "valid") != NULL)//在a中查找b,如果存在,
            {

                HAL_UART_Transmit_DMA(&huart3, AT_CIPSTART, strlen((char*) AT_CIPSTART));

            }
        Uart3_Rx_Cnt=0;

//      memset(Uart3_RxBuffer,0,sizeof(Uart3_RxBuffer));


    }
    HAL_UART_Receive_DMA(&huart3,(uint8_t *)&aRxBuffer3,1);
}


}





歡迎光臨 (http://www.torrancerestoration.com/bbs/) Powered by Discuz! X3.1