gpt4 book ai didi

c - 如何在 C 中创建 AT 命令解析器以获取来自 USART1 的传入字符串?

转载 作者:太空宇宙 更新时间:2023-11-04 02:02:44 28 4
gpt4 key购买 nike

我想从 STM32VLDiscovery (STM32F100X4) 的 USART1 获取字符串,并根据从 USART1 收到的字符串编写一个 AT 命令解析器。

以下是我形成的概念,但我不确定它是否正确。

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

#include "dosomethinga.h"

void dosomethingB();
void GET_AT_COMMAND(char*);
void takecommand(char *, char *);
int quit;


int main()
{ char buff[15];
char command = '\0';
quit = 0;

while(!quit)
{
printf("Enter your command: ");
scanf("%s", &buff);

if (buff[0] == 'A' && buff[1] == 'T' && buff[2] == '+')
{
GET_AT_COMMAND(buff);
}

}
}

void dosomethingB()
{
printf("dosomethingB called \n");
}

void GET_AT_COMMAND(char *text)
{
int command;
char temp[10] = "";

/*if(text[3] == 'A')
command = 1;

else if(text[3] == 'B')
command = 2;

else if(text[3] == 'Z')
command = 3;
*/

takecommand(text,temp);

if (strcmp(temp, "CALLA") == 0)
command = 1;

if (strcmp(temp, "CALLB") == 0)
command = 2;

if (strcmp(temp, "Z") == 0)
command = 3;

switch(command)
{
case 1:
dosomethingA();
break;

case 2:
printf("herehere.... \n");
dosomethingB();
break;

case 3:
printf("Exiting program.... \n");
quit = 1;
break;


default:
printf("Nothing to do here \n");
}
}

void takecommand(char *mycmd, char *hold)
{
int i;
for(i = 0; i < 10 ; i++)
{
hold[i] = mycmd[i+3];
}
}

谁能解释一下我应该做的步骤?谢谢。

最佳答案

基本上你应该等待来自输入的注意“AT”并忽略它之前的任何内容。例如,输入“XYZATZ\r”和“AaatZ\r”都应作为“ATZ”命令处理。在“A”和“T”(以及所有其他命令字符)之间也可以有短暂的停顿,因为人类可能会键入这些命令。

默认情况下,所有命令都以“\r”字符结尾。

从 ITU-T 文档中查看有关 AT 命令的更多信息。例如来自 V.250标准。

可能有许多替代方法可以实现它。最佳选择取决于您的需求。如果你要实现移动端的所有 AT 指令,那么你应该花更多的时间在解析器上。如果您想为几个命令制作一些测试应用程序,那么您的实现可以像您提供的那样简单。

关于c - 如何在 C 中创建 AT 命令解析器以获取来自 USART1 的传入字符串?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24902879/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com