ARM9和Linux下的GPRS模块C代码//我前个月使用实验室的周立功ARM7实验箱配套的明基GPRS模块连接到我的QQ2440V3开发板,//在Linux环境下,做模块的初始化、读取模块内的某些硬件信息和拨打电话,实现远程无线控制,//如果想做更复杂的操作,在这些代码的基础上增加少量代码即可实现,//下面的代码是C语言代码,大部分代码是我个人编写的,部分代码参考了一些书籍资料,//我发现很多网友使用明基GPRS模块的过程中出现各种问题,在这里我贴出来给大家参考//如转载本文章,请注明本文出处http://blog.sina.com.cn/s/blog_548d39f90100bcdp.html#include//标准输入输出定义#include//标准函数库定义#include//Unix标准函数定义#include//文件控制定义#include#include#include//PPSIX终端控制定义#include#include#include//错误号定义#include"myfunctions.h"//自定义函数定义文件staticintfd=0;structtermiosnewtio,oldtio;//==============================================================////明基M23GPRS模块AT指令,请参考明基的Datasheet//初始化指令AT+HRST=1,关闭模块的电源AT$POWEROF,//长时间不与M23GPRS模块通讯之后再次通讯时使用指令AT$NOSLEEP=1//在拨打电话时,在对方接通电话之后返回“OK”字符串,使用指令AT+COLP=1//当有电话进入时,显示来电号码,在初始化时需加上指令AT+CLIP=1//读取SIM卡的ID号使用指令AT+CIMI//写入短信中心号码,使用AT+CSCA="短信中心的号码",145//从模块读取短信而不是从SIM卡读取,使用AT+CNMI=2,2,0,0,0//提供本地待机提示音,使用AT+GDT=1,关闭则用AT+GDT=0//确定已经找到SIM卡,使用AT+COPS?,若返回0则表明没有找到//数据通讯时,如果网络断开了,模块返回NOCARRIER//数据通讯时,调整发送数据的延时时间AT$TIMEOUT=XX,XX=100-5000毫秒//拨号指令“ATDxx;”,XX是号码,号码之后必须带分号//选择差分语音通道:M22/M22A,AT$AUPATH=3,1;M23,AT$AUPATH=0,1;差分语音通道,普通手柄通话//选择单端语音通道:M22/M22A,AT$AUPATH=2,1;M23,AT$AUPATH=1,1;单端语音通道,免提童话//语音通话时,调节发送和接收增益:AT$AUGAIN=(0-2),(1-9)其中的(0-2)代表:0发送的SIDE//TONE,1发送增益,2接收增益;(1-9)代表可选择的增益范围//另一条调节接收增益的AT指令AT$AUVOL=(0-5),0则关闭接收,5为最大//吉林移动的信息中心+8613800200500//初始化GPRS模块的指令阵列//char*cmd[20]={"AT","AT","AT$NOSLEEP=1","AT+GDT=1","AT$AUPATH=0,1","AT$AUGAIN=1,7","AT$AUGAIN=2,9"};//==============================================================////==============================================================//inttty_writecmd(char*buf,intnbytes){inti;for(i=0;i