STM32 GSM AT命令响应解析器

时间:2019-03-04 11:10:51

标签: stm32 at-command gprs

我正在发送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 :(得分:2)

您可以将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;
}