当前位置: 技术问答>linux和unix
大家帮我看看我的这个初始化串口的程序有什么问题?困扰我一天了!
来源: 互联网 发布时间:2015-09-10
本文导语: 当linux系统刚开机没用过minicom时执行发送AT命令到串口的终端无反应(终端不响应操作,也无反回)直到超时(设定的5秒),当用过一次minicom后就正常了,终端可以响应AT命令,也可以反回数据,我想肯定是初始化串...
当linux系统刚开机没用过minicom时执行发送AT命令到串口的终端无反应(终端不响应操作,也无反回)直到超时(设定的5秒),当用过一次minicom后就正常了,终端可以响应AT命令,也可以反回数据,我想肯定是初始化串口的时候参数不对,谁有相关的例子,让我参考一下(我要初始化串口后能够通过AT&T跟接在串口的Modem通信的例子)
谢谢了!
#include /*标准输入输出定义*/
#include /*标准函数库定义*/
#include /*Unix标准函数定义*/
#include /**/
#include /**/
#include /*文件控制定义*/
#include /*PPSIX终端控制定义*/
#include /*错误号定义*/
/***@brief 设置串口通信速率
*@param fd 类型 int 打开串口的文件句柄
*@param speed 类型 int 串口速度
*@return void*/
int speed_arr[] = { B38400, B19200, B9600, B4800, B2400, B1200, B300,
B38400, B19200, B9600, B4800, B2400, B1200, B300, };
int name_arr[] = {38400, 19200, 9600, 4800, 2400, 1200, 300,
38400, 19200, 9600, 4800, 2400, 1200, 300, };
void set_speed(int fd, int speed)
{
int i;
int status;
struct termios Opt;
tcgetattr(fd, &Opt);
for ( i= 0; i 0)
set_speed(fd,19200);
else
{
printf("Can't Open Serial Port!n");
exit(0);
}
if (set_Parity(fd,8,1,'N')== 0)
{
printf("Set Parity Errorn");
exit(1);
}
sprintf(strcomm,"ATr");
comlen=strlen(strcomm);
if((dwwritten=write(fd,strcomm,comlen))0)
{
buff[nread]='';
strcat(retu_msg,buff);
if(strlen(retu_msg)>(comlen+2)&&hascat==0)
{hascat=1;sprintf(retu_msg,"%s",retu_msg+comlen+2);}
if(
( (strlen(retu_msg))> (comlen+2) ) &&
( (retu_msg[strlen(retu_msg)-2]==13) && (retu_msg[strlen(retu_msg)-1]==10) )
)
{retu_msg[strlen(retu_msg)-2]='';break;}
}
printf("%sn",retu_msg);
close(fd);
exit(0);
}
谢谢了!
#include /*标准输入输出定义*/
#include /*标准函数库定义*/
#include /*Unix标准函数定义*/
#include /**/
#include /**/
#include /*文件控制定义*/
#include /*PPSIX终端控制定义*/
#include /*错误号定义*/
/***@brief 设置串口通信速率
*@param fd 类型 int 打开串口的文件句柄
*@param speed 类型 int 串口速度
*@return void*/
int speed_arr[] = { B38400, B19200, B9600, B4800, B2400, B1200, B300,
B38400, B19200, B9600, B4800, B2400, B1200, B300, };
int name_arr[] = {38400, 19200, 9600, 4800, 2400, 1200, 300,
38400, 19200, 9600, 4800, 2400, 1200, 300, };
void set_speed(int fd, int speed)
{
int i;
int status;
struct termios Opt;
tcgetattr(fd, &Opt);
for ( i= 0; i 0)
set_speed(fd,19200);
else
{
printf("Can't Open Serial Port!n");
exit(0);
}
if (set_Parity(fd,8,1,'N')== 0)
{
printf("Set Parity Errorn");
exit(1);
}
sprintf(strcomm,"ATr");
comlen=strlen(strcomm);
if((dwwritten=write(fd,strcomm,comlen))0)
{
buff[nread]='';
strcat(retu_msg,buff);
if(strlen(retu_msg)>(comlen+2)&&hascat==0)
{hascat=1;sprintf(retu_msg,"%s",retu_msg+comlen+2);}
if(
( (strlen(retu_msg))> (comlen+2) ) &&
( (retu_msg[strlen(retu_msg)-2]==13) && (retu_msg[strlen(retu_msg)-1]==10) )
)
{retu_msg[strlen(retu_msg)-2]='';break;}
}
printf("%sn",retu_msg);
close(fd);
exit(0);
}
|
你要先发送ATZ对modem进行初始化..
|
mark
我也碰到了,在FC3是碰到的,rh 9.0前都没有碰到过,应该不是程序的问题
我也碰到了,在FC3是碰到的,rh 9.0前都没有碰到过,应该不是程序的问题