当前位置: 技术问答>linux和unix
急急急:请教各位大虾关于串口通信的问题!!!!!
来源: 互联网 发布时间:2017-01-06
本文导语: 这个程序的主要目的是向串口发送AT命令(基于嵌入式Linux),是短信猫发短信,但问题是不能发出短信,已经排除是硬件问题,希望大家帮帮忙,这个程序错在什么地方。 void serial_rw() { int i; char buff[512]; char b...
这个程序的主要目的是向串口发送AT命令(基于嵌入式Linux),是短信猫发短信,但问题是不能发出短信,已经排除是硬件问题,希望大家帮帮忙,这个程序错在什么地方。
void serial_rw()
{
int i;
char buff[512];
char buff_t[]="ATn";
char receive[3]="w";
char buff4[] = "AT+CMGD=1n";
char buff2[] = "AT+CMGS=15045268420n";
char buff3[] = "this is a test message";
int nread,nwrite;
printf("the num is:%sn",buff2);
write( serial_fd,buff_t,sizeof(buff_t) );
sleep(5);
read( serial_fd,receive,sizeof(receive) );
printf( "receive: %sn",receive );
nwrite = write(serial_fd,buff4,sizeof(buff4));
sleep(5);
nwrite = write(serial_fd,buff2,sizeof(buff2));
sleep(5);
printf("nwrite=%dn",nwrite);
nwrite = write(serial_fd,buff3,sizeof(buff3));
sleep(5);
printf("send nwrite=%dn",nwrite);
nwrite = write(serial_fd,"x1a",sizeof("x1a"));
sleep(5);
printf("end of send messagern");
while(1)
{
}
close(serial_fd);
}
void serial_rw()
{
int i;
char buff[512];
char buff_t[]="ATn";
char receive[3]="w";
char buff4[] = "AT+CMGD=1n";
char buff2[] = "AT+CMGS=15045268420n";
char buff3[] = "this is a test message";
int nread,nwrite;
printf("the num is:%sn",buff2);
write( serial_fd,buff_t,sizeof(buff_t) );
sleep(5);
read( serial_fd,receive,sizeof(receive) );
printf( "receive: %sn",receive );
nwrite = write(serial_fd,buff4,sizeof(buff4));
sleep(5);
nwrite = write(serial_fd,buff2,sizeof(buff2));
sleep(5);
printf("nwrite=%dn",nwrite);
nwrite = write(serial_fd,buff3,sizeof(buff3));
sleep(5);
printf("send nwrite=%dn",nwrite);
nwrite = write(serial_fd,"x1a",sizeof("x1a"));
sleep(5);
printf("end of send messagern");
while(1)
{
}
close(serial_fd);
}
|
前面已经回复过很多关于短信猫的问题,LZ可以搜索下。
我在这里就短信猫做一下终结:
1.拿到短信猫,和串口线,先在windows下,用windows的超级终端(波特率115200或者是9600.短信猫标准
波特率是9600),给猫发送AT指令。一来是检查串口线,而来检查猫
2.放到linux下之后,自己用程序给猫AT指令,很重要的一点就是设置串口。很多人拿到短信猫,然后google
个code然后跑起来,或则是自己写,发现无论怎样,都发送,或者接受不到,或者接受到的是乱码。那么,关
于这一点,引发以上问题的无非是:一,串口设置不对,参数,对于串口如何设置,我在这里就不说了,动动
手google下。二,极为重要的一点就是关于串口的flush。这一点很重要。关于如何flush,也是google。
三,请大家一定要记得memset。对于需要buff的,请大家一定要记得使用memset。否则,给短信猫发送的AT
指令,猫根本不认识,同样,猫发送来的数据就是乱码了。
3。防止你的开发板的TXD RXD没有交叉。我曾经月到过,PC机上绝对没问题,移到板子上,就接受发送不正常
了。最后发现是板子串口没有交叉。
在这里,给大家介绍一个种检测串口的办法:拿一根线,将你的串口的RXD和TXD链接起来。然后在超级终端
下按键盘,如果键盘可以正常显示,则说明串口是好的。至于哪个是RXD TXD,google吧。至于原理,你懂了
RXD 和TXD你就知道原理了。
4.程序中注意 n r之内的转义字符,这些字符很重要,那么你的程序多参考网上的,人家怎么写。
5。发送一条指令之后,请不要立马就去read,这样觉得是接受发送失败的。解决办法是:write之后,sleep
(nsec)。然后才是read。那么,对于read的时候,使用结合select使用才是最科学的。
6.短信猫,买回来,是不需要你对他进行设置的。只需要你把手机卡放到短信猫里面。就可以了。也不需要对
猫进行启动。现在的短信猫几乎都是上电就启动了。还有,没事不要去搬动短信猫天线,稍不注意,短信猫就
烧了。到现在我也不知道是为啥。
我对短信猫的总结,基本就到这里了。希望给大家一个参考。
我在这里就短信猫做一下终结:
1.拿到短信猫,和串口线,先在windows下,用windows的超级终端(波特率115200或者是9600.短信猫标准
波特率是9600),给猫发送AT指令。一来是检查串口线,而来检查猫
2.放到linux下之后,自己用程序给猫AT指令,很重要的一点就是设置串口。很多人拿到短信猫,然后google
个code然后跑起来,或则是自己写,发现无论怎样,都发送,或者接受不到,或者接受到的是乱码。那么,关
于这一点,引发以上问题的无非是:一,串口设置不对,参数,对于串口如何设置,我在这里就不说了,动动
手google下。二,极为重要的一点就是关于串口的flush。这一点很重要。关于如何flush,也是google。
三,请大家一定要记得memset。对于需要buff的,请大家一定要记得使用memset。否则,给短信猫发送的AT
指令,猫根本不认识,同样,猫发送来的数据就是乱码了。
3。防止你的开发板的TXD RXD没有交叉。我曾经月到过,PC机上绝对没问题,移到板子上,就接受发送不正常
了。最后发现是板子串口没有交叉。
在这里,给大家介绍一个种检测串口的办法:拿一根线,将你的串口的RXD和TXD链接起来。然后在超级终端
下按键盘,如果键盘可以正常显示,则说明串口是好的。至于哪个是RXD TXD,google吧。至于原理,你懂了
RXD 和TXD你就知道原理了。
4.程序中注意 n r之内的转义字符,这些字符很重要,那么你的程序多参考网上的,人家怎么写。
5。发送一条指令之后,请不要立马就去read,这样觉得是接受发送失败的。解决办法是:write之后,sleep
(nsec)。然后才是read。那么,对于read的时候,使用结合select使用才是最科学的。
6.短信猫,买回来,是不需要你对他进行设置的。只需要你把手机卡放到短信猫里面。就可以了。也不需要对
猫进行启动。现在的短信猫几乎都是上电就启动了。还有,没事不要去搬动短信猫天线,稍不注意,短信猫就
烧了。到现在我也不知道是为啥。
我对短信猫的总结,基本就到这里了。希望给大家一个参考。
|
如果用的是虚拟机,可以给虚拟机建两个命名管道的串口,两个命名管道指向同一个文件,注意设置是一个主一个从,然后一个串口写,另一个读,这样可以绕开串口的设置检测代码的问题,如果这样能读写数据而实际串口没数据,那就要检测是不是程序中的串口设置问题。
|
上面的总结,虽然说是针对短信猫的,也有大部分是针对串口通信的。
|
支持一下2楼的。