stm32 - 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" 并分别存储在数组中以进一步处理的最佳方法是什么
谢谢
解决方案
为此,您可以使用 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;
}
推荐阅读
- android - 如何向whatsapp Uri提供多个whatsapp号码
- r - 如何为名称列创建多个值?
- firebase - 如何在 Flutter 中从 Firestore 存储和检索颜色
- javascript - 过滤掉并动态更改附加结果?
- neo4j - Neo4j 在 where 条件下的细微差别
- amadeus - Amaedus航班预订的工作流程?
- oracle - 按顺序更改列数据位置
- unity3d - 会话开始使用 ARFoundation 后,如何让模型出现在 AR Camera 前?
- eclipse - 当以 ASCII 格式转储时,CAP 文件包含主小程序类和所有其他类文件详细信息
- mysql - VB.Net Query For MYSQL Query 在集合中查找