gpt4 book ai didi

c - 编写 AT 命令嵌入式 linux

转载 作者:太空狗 更新时间:2023-10-29 12:34:34 24 4
gpt4 key购买 nike

我在向 GSM 模块写入 AT 命令时遇到问题。当我使用 minicom -b 115200 -D/dev/ttySP0 --term=vt100 时它工作得很好但我无法弄清楚如何在 C 代码中做同样的事情。我没有收到任何错误,但模块对命令没有反应。谁知道哪里出了问题?

#include <sys/types.h>                                                  
#include <sys/stat.h>
#include <fcntl.h>
#include <termios.h>
#include <stdio.h>
#define BAUDRATE B115200
#define COM1 "/dev/ttySP0"
static int fd;
static struct termios oldtio,newtio;

//==============================================================
int tty_read(char *buf,int nbytes)
{
int temp;
temp = read(fd,buf,nbytes);
printf("Read string: %s\n", buf);
return temp;
}
//==============================================================
int tty_end()
{
tcsetattr(fd,TCSANOW,&oldtio);
close(fd);
}

//==============================================================
int tty_writecmd(char *buf,int nbytes)
{
int i;
for(i=0; i<nbytes; i++) {
write(fd,&buf[i],1);
usleep(100);
}
write(fd,"\n",1); //Tried \0 \r aswell
usleep(300000);
return tcdrain(fd);
}

//==============================================================
int baud = B115200;
int tty_init()
{
fd = open(COM1, O_RDWR );
if (fd <0) {
perror(COM1);
exit(1);
}
tcgetattr(fd,&oldtio);
bzero(&newtio, sizeof(newtio));
newtio.c_cflag = baud | CRTSCTS | CS8 | CLOCAL | CREAD ;

newtio.c_iflag = IGNPAR | ICRNL;
newtio.c_oflag = 0;
newtio.c_lflag = ICANON;
newtio.c_cc[VINTR] = 0;
newtio.c_cc[VQUIT] = 0;
newtio.c_cc[VERASE] = 0;
newtio.c_cc[VKILL] = 0;
newtio.c_cc[VEOF] = 4;
newtio.c_cc[VTIME] = 0;
newtio.c_cc[VMIN] = 1;
newtio.c_cc[VSWTC] = 0;
newtio.c_cc[VSTART] = 0;
newtio.c_cc[VSTOP] = 0;
newtio.c_cc[VSUSP] = 0;
newtio.c_cc[VEOL] = 0;
newtio.c_cc[VREPRINT] = 0;
newtio.c_cc[VDISCARD] = 0;
newtio.c_cc[VWERASE] = 0;
newtio.c_cc[VLNEXT] = 0;
newtio.c_cc[VEOL2] = 0;
tcflush(fd, TCIFLUSH);
tcsetattr(fd,TCSANOW,&newtio);
return 0;
}

int main(int argc, char *argv[])
{
char recv[10];
char command[] = "AT+CSQ";
tty_init();
printf("Write: %d\n", tty_writecmd(command, sizeof(command)));
usleep(40000);
printf("Read: %d\n", tty_read(recv ,sizeof(recv)));
tty_end();
}

最佳答案

你应该做的第一件事就是运行

stty -F /dev/ttySP0

在 minicom 运行时和您的程序运行时执行此操作。检查所有内容并进行比较。有很多事情会导致您出现问题。

一旦你有那些匹配,你要确保你发送的数据出去。

cat /proc/tty/driver/serial

比较发送数据前后的tx值,确定发送出去了。

如果是,那么您可以检查 rx 值。如果你没有得到回应,你可能需要一个示波器来检查线路上的数据。如果你不能这样做,那么三次检查波特率和流量控制。

关于c - 编写 AT 命令嵌入式 linux,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15430023/

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