while (1)
{
if ( HAL_UART_Receive(&huart2, pData, Size, 10) == HAL_OK) // ждем пока не примем из UART Size-количество символов (один) блокирующий режим !!!!!
{// приняли байт
str_in[idx++]=pData[0]; //копируем вновь принятый символ в новое место входного буфера
if(idx==SIZE_INPUT-1) //если превысили размер входного буфера - то начнем с его начала
idx=0;
if(pData[0]=='/')
{ //найден признак конца передачи команды
str_in[idx]=0; //терминируем строку после признака конца передачи команды - для функций поиска
char *str_comm1; //указатель на начало команды
if( (str_comm1=strstr(str_in, "comm1")) != NULL) //ищем символы команды во входном буфере
{//команда "comm1" найдена и нашли ее начало
//разбор параметров команды
int param1, param2; //где будут хранится параметры команды
int res = sscanf(str_comm1,"comm1?p1=%d;p2=%d;", ¶m1, ¶m2); //пытаемся разобрать команду с параметрами
// формате имякоманды?parameter=значение;parameter=значение;.
if(res ==2)
{// распознали все параметры
//готовим ответную строку в компьютер
sprintf(str_out, "param1=%d; param2=%d;\r\n", param1, param2);
Size_out = strlen(str_out); //размер ответной строки
HAL_UART_Transmit(&huart2, str_out, Size_out, 10); //посылаем ответ в компьютер
}
else
{ //не распознали все параметры команды - ошибка
sprintf(str_out, "error: not recognized\r\n"); //строка ответа - ошибка
Size_out = strlen(str_out); //размер ответной строки
HAL_UART_Transmit(&huart2, str_out, Size_out, 10); //посылаем ответ в компьютер
}
}
else
{ //не нашли команду во входном буфере - ошибка
sprintf(str_out, "error: command not found\r\n"); //строка ответа - ошибка
Size_out = strlen(str_out); //размер ответной строки
HAL_UART_Transmit(&huart2, str_out, Size_out, 10); //посылаем ответ в компьютер
}
HAL_UART_AbortReceive(&huart2);//сброс приема во входной буфер после обнаружения признака конца команды
memset(str_in, 0, SIZE_INPUT); //стираем входной буфер от старых значений - для правильности поиска
idx=0; //начнем писать символы с начала входного буфера
}