STM32 GSM AT анализатор ответа на команду - PullRequest
0 голосов
/ 04 марта 2019

Я отправляю AT-команду, чтобы получить номер IMEI.

char CGSN[] = "AT+CGSN\r\n";

// in while loop 
HAL_UART_Transmit(&huart2,(uint8_t *)CGSN, sizeof(CGSN),100);
HAL_Delay(1000);    
HAL_UART_Receive_IT(&huart2,(uint8_t *)&ch,1);  

// Callback 
void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart)
{
  if(huart->Instance == USART2){
    if(buf[i]!=13){
      buf[i]=ch;
      i++;
    } 

  }
  HAL_UART_Receive_IT(&huart2,(uint8_t *)&ch,1);

  buf[i]=0;
}

Ответ, сохраненный в буфере, - - \r\n9876543212345\r\n\r\nOK\r\n Каков наилучший способ получить ответ и отфильтровать n "9876543212345" & "OK"и хранить отдельно в массиве для дальнейшей обработки

Спасибо

1 Ответ

0 голосов
/ 04 марта 2019

Вы можете использовать sscanf для этой цели.Ниже приведена быстрая реализация сценария на языке C.

#include <stdio.h>
#include <stdlib.h>
#include <stdint.h>

int main(void) {
    unsigned long a;
    char array[10];
    char string[] = "\r\n9876543212345\r\n\r\nOK\r\n";
    sscanf(string , "\r\n%ld\r\n\r\n%s\r\n", &a, array);
    printf("%ld %s\n", a, array);
    return 0;
}
...