搜索
您的当前位置:首页正文

GPRS通讯程序编码练习

来源:尚车旅游网
GPRS通讯程序编码练习

1 练习目的

z 了解GPRS 通讯原理;

z 掌握AT指令集中常用的AT指令的意义;

z 掌握GPRS发送短信、接打电话等程序的实现方法。

2 练习内容

z 调试gprs程序示例,了解gprs初始化,以及拨打电话的实现方法。 z 编写gprs通讯程序,实现拨打、接听、挂断电话,以及发送端信息。

3 练习原理

3.1 GPRS模块SIM100-E电器特性

ARM 嵌入式开发平台的GPRS 扩展板采用的GPRS 模块型号为SIM100-E,是SIMCOM 公司推出的GSM/GPRS 双频模块,主要为语音传输、短消息和数据业务提供无线接口。

SIM100-E集成了完整的射频电路和GSM 的基带处理器,适合于开发一些GSM/GPRS 的无线应用产品,如移动电话、PCMCIA 无线MODEM 卡、无线POS 机、无线抄表系统以及无线数据传输业务,应用范围十分广泛。

SIM100-E 模块为用户提供了功能完备的系统接口。60Pin系统连接器是SIM100-E 模块与应用系统的连接接口,主要提供外部电源、RS-232 串口、SIM 卡接口和音频接口。SIM100-E 模块使用锂电池、镍氢电池或者其他外部直流电源供电,电源电压范围为:3.3V~4.6 V,电源应该具有至少2A 的峰值电流输出能力。

SIM100-E 提供标准的RS-232 串行接口,用户可以通过串行口使用AT 命令完成对模块的操作。串行口支持以下通信速率:

300,1200,2400,4800,9600,19200,38400,57600,115200。

当模块上电启动并报出RDY 后, 用户才可以和模块进行通信,用户可以首先使用模块默认速率115200 与模块通信,并可通过AT +IPR=命令自由切换至其它通信速率。在应用设计中,当MCU 需要通过串口与模块进行通讯时,可以只用三个引脚:TXD,RXD 和GND。其他引脚悬空,建议RTS 和DTR 置低。本扩展板上采用MAX3232 芯片完成GPRS 模块的TTL 电平到RS232 电平的转换,以能和ARM 开发平台的RS232 串口连接。

SIM100-E 模块提供了完整的音频接口,应用设计只需增加少量外围辅助元器件,主要是为MIC提供工作电压和射频旁路。音频分为主通道和辅助通道两部分。可以通过AT+CHFA 命令切换主副音频通道。音频设计应

该尽量远离模块的射频部分,以降低射频对音频的干扰。本扩展板硬件支持两个语音通道,主通道可以插普通电话机的话柄,辅助通道可以插带MIC 的耳幔。

当选择为主通道时,有电话呼入时板载蜂鸣器将发出铃声以提示来电。但选择辅助通道时来电提示音乐只能在耳机中听到。蜂鸣器是由GPRS 模块的BUZZER 引脚加驱动电路控制的。

GPRS 模块的射频部分支持GSM900/DCS1800 双频,为了尽量减少射频信号在射频连接线上的损耗,必须谨慎选择射频连线。应采用GSM900/D CS1800 双频段天线,天线应满足阻抗50 欧姆和收发驻波比小于2 的要求。为了避免过大的射频功率导致GPRS 模块的损坏,在模块上电前请确保天线已正确连接。

模块支持外部SIM卡,可以直接与3.0V SIM卡或者1.8V SIM 卡连接。模块自动监测和适应SIM卡类型。对用户来说,GPRS模块实现的就是一个移动电话的基本功能,该模块正常的工作是需要电信网络支持的,需要配备一个可用的SIM卡,在网络服务计费方面和普通手机类似。

3.2 AT命令集简要说明

GPRS 模块和应用系统是通过串口连接的,控制系统可以发给GPRS 模块AT 命令的字符串来控制其行为。GPRS模块具有一套标准的AT 命令集。

1、一般AT命令

AT命令 AT+CGMI AT+CGMM AT+CGMR ATI

ATE = AT+CGSN AT+CLVL? AT+CLVL= AT+CHFA= AT+CMIC=,

描述

返回生产厂商标识。 返回产品型号标识。 返回软件版本标识。 发行的产品信息。

决定是否回显输入的命令。value=0表示关闭回显,1打开回显。

返回产品序列号标识。 读取受话器音量级别。

设置受话器音量级别,level 在0~100 之间,数值越小则音量越轻。

切换音频通道。State=0为主音频通道,1为辅助音频通道。改变MIC 增益,ch=0 为主MIC,1 为辅助MIC;gain 在0~15 之间。

2、网络服务相关命令

AT+CNUM=? AT+COPN AT+CSQ

读取本机号码。 读取网络运营商名称。

信号强度指示,返回接收信号强度指示值和信道误码率。

3、呼叫控制命令

ATDxxxxxxxx; ATA ATH

AT+VTS=

拨打电话号码xxxxxxxx,注意最后要加分号,中间无空格。接听电话。

拒接电话或挂断电话。

在语音通话中发送DTMF 音,dtmfstr 举例:“4,5 ,6”为456 三字符。

4、短消息命令

AT+CMGC AT+CMGD= AT+CMGF=

发出一条短消息命令。

删除短消息。index为所要删除短信的记录号。

选择短消息格式。mode=0 为PDU 模式,1 为文本模式。建议文本模式。

列出当前短消息存储器中的短信。stat参数空白或0/\"REC UNREAD\"为未读,1/“REC READ”为已读,2/“STOU NSENT”为待发,3/“STO SENT”为已发,4/“ALL”为全部的。读取短消息。index为所要读取短信的记录号。

发送短消息。xxxxxxxx为对方手机号码,回车后接着输入短信内容,然后按CTRL+Z 发送短信。CTRL+Z的ASCII 码是26。

显示新收到的短消息。 读取短消息中心地址。 设置短消息文本模式参数。

AT+CMGL= AT+CMGR= AT+CMGS=xxxxxxxx ‘CR’ Text ‘CTRL+Z’ AT+CNMI AT+CSCA? AT+CSMP

3.3 程序结构图

程序结构如下图所示:

3.4 练习步骤

3.4.1 补充拨打电话模块的代码,并编译、运行。

1)阅读main.c文件,分析主函数main()的代码流程;

2)阅读线程处理函数keyshell() 中的实现代码并分析其流程;

3)进入gprs_init()函数的定义文件gprs.c中,补充gprs初始化代码,如下:

void gprs_init() {

tty_writecmd(\"at\ tty_writecmd(\"ate1\ //设置音频通道:1,副音频通道

tty_writecmd(\"at+chfa=1\ //设置输出音频信号增益:100,最大音量

tty_writecmd(\"at+clvl=100\ //设置通道1的话筒增益:10,最大增益

tty_writecmd(\"at+cmic=1,10\}

4)分析函数tty_writecmd()的作用;

5)在while循环过程中编写代码,实现gprs的命令菜单的输出;具体如下: printf(\"\\n< gprs control shell >\"); printf(\"\\n [1] give a call\"); printf(\"\\n [2] respond a call\"); printf(\"\\n [3] hold a call\"); printf(\"\\n [4] send a msg\"); printf(\"\\n [**] help menu\"); printf(\"\\n [--] exit\");

6)分析函数get_line()的实现代码及作用;

7)分析如何通过if判断实现菜单各项功能(拨打、接收、发短信)的? 利用循环采集从键盘输入的信息,并执行相应的功能函数。以按键按下“1”为例:

get_line(cmd); //采集按键数字 if(strncmp(\"1\//如果为“1”

gprs_call(cmd, strlen(cmd)); //调用“拨打电话”实现函数 }

8)编码实现拨打电话模块功能,在gprs.c文件中gprs_call函数处; void gprs_call(char *number, int num) {

tty_writecmd(\"at\ //发送拨打命令ATD

tty_write(\"atd\ //发送电话号码

}

tty_write(number, num); //发送分号和命令结束标志

tty_write(\";\\r\usleep(200000);

9)分析函数tty_write()的作用;

10) 执行make命令编译该程序,生成gprs可执行程序;

11) 利用mount命令挂载到开发板上,然后运行gprs程序;进行操作,看是否能够实现拨打电话的功能。

3.4.2 补充发送短信模块的代码,并编译、运行。

1)在gprs.c文件中,在“//完善代码:实现发送短信gprs_msg()函数”注释行下面添加如下代码。实现短信息的发送功能。

void gprs_msg(char *number, int num) {

char ctl[]={26,0}; //ctl[0]=26,ctrl+z char text[]=\"gprs sms demo!\";

tty_writecmd(\"at\ //发送修改字符集命令:1,text格式

tty_writecmd(\"at+cmgf=1\ //发送短信命令:命令+号码+信息+结束符

tty_write(\"at+cmgs=\ //发送电话号码

tty_writecmd(number, strlen(number)); //发送文本信息

tty_write(text, strlen(text)); //发送结束符

tty_write(ctl, 1);

usleep(300000); }

2)编译、执行,观察结果;

3)请修改程序,将个人的“学号、姓名”以短信形式发送出去,看其他手机接收是否正常查看?

3.4.3 编码实现接听电话模块的功能。

在gprs.c文件中,在“//完善代码:实现接听电话gprs_ans()函数” 注释行下面添加如下代码。实现电话的接听功能。

void gprs_ans()

{

tty_writecmd(\"at\ //发送接听命令ATA

tty_writecmd(\"ata\}

3.4.4 编码实现挂断电话模块的功能。

在gprs.c文件中,在“//完善代码:实现挂断电话gprs_hold()函数”注释行下面添加如下代码。实现电话的挂断功能。

void gprs_hold() {

tty_writecmd(\"at\ //发送挂机命令ATH

tty_writecmd(\"ath\ }

编译项目,并运行调试;观察结果是否正确?

3.4.5 执行gprs程序,体验gprs程序的功能。

1) 拷贝本次练习编译后的程序gprs至/arm2410/emlab目录中。 2) 连接好实验开发板和开发宿主机(不要启动实验开发板)。

3) 连接好gprs模块、SIM卡、天线,然后小心并正确插入实验开发板的扩

展槽中。

4) 启动minicom,给开发板加电,以nfs方法挂载gprs项目所在的目录。 5) 执行gprs程序,此时应能看到gprs初始化过程中的提示,然后显示一

个命令菜单。

6) 在keyshell提示符下,利用小键盘输入“1”后回车,即开始拨打电话。

然后会要求你输入所要拨打电话的号码,输入之后回车,观察结果是否能正常拨打电话?

7) 试一下发送短信的功能,看其他手机能否收到短信?

因篇幅问题不能全部显示,请点此查看更多更全内容

Top