首页 > 解决方案 > STM32 GSM AT 命令响应解析器

问题描述

我正在发送 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" 并分别存储在数组中以进一步处理的最佳方法是什么

谢谢

标签: stm32at-commandgprs

解决方案


为此,您可以使用 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;
}

推荐阅读