STM32 GSM AT命令响应解析器

问题描述 投票:0回答:1

我发送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什么是接收响应的最佳方式并过滤掉“9876543212345”和“确定”并分别存储在数组中以进一步处理

谢谢

stm32 at-command gprs
1个回答
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;
}
© www.soinside.com 2019 - 2024. All rights reserved.