你好,欢迎来到电脑编程技巧与维护杂志社! 杂志社简介广告服务读者反馈编程社区  
合订本订阅
 
 
您的位置:文章管理 / 本期精品文章
Gprs中文短消息收发
 

胡菲菲

摘要 本文介绍了ARM9与μc-osII平台下通过GPRS模块收发中文短信息的实现。

关键词 嵌入式系统,短消息,gprs,图形用户接口

    嵌人式系统广泛应用在很多产业中,如家电、医疗仪2S、工业控制和国防等领域。ARM32位体系结构当前被公认为业界领先的32位嵌入式RISC微处理器结构,拥有32位嵌入式的大部分市场份额。μc-osII是一个实时的任务调度及通信内核。已被应用到多种微处理器上,其大部分源码是由ANSIC语言编写的。GPRS是通用无线分组业务的缩写(General Packet Radio Service),是介于第一代和第二代移动通信技术之间的一种技术,通常称为2.5G,目前通过升级GSM网络实现。GPRS是分组交换技术,具有“高速”和“永远在线”的优点,特别适用于移动设备高速且不连续大量的数据通信。要在拥有实时操作系统的嵌入式系统上收发GPRS中文短消息,必须解决汉字的编解码和输入输出问题。本实验选用了图形用户接口。

一、             系统功能与构成

实现中文短消息收发的完整功能模块由键盘控制,屏幕输出,GPRS数据收发及处理三个部分组成。其中屏幕控制和键盘控制通过调用和完善操作系统API实现,另外为了更好的支持和显示中文字符,特别选用了图形用户接口。系统各部分构成如图1所示。

GPRS短消息收发

模块初始化

接收键盘输入

PDU编码

PDU解码

GPRS模块通讯

                                  1 系统各部分结构

具体流程如图2所示:

模块初始化

显示交互界面

接收键盘输入

PDU/解码

GPRS模块通信

显示信息

图2 发送信息处理

GPRS模块的初始化,由gprs_init()函数实现包括串口初始化、定时器中断初始化等工作,用gprs_pwr_on_offGPRS_PWR_ON)实现GPRS模块复位。

   键盘输入处理主要用于接收用户输入的号码,本实验中对键盘驱动进行适当修改,采用定时扫描的方式扫描键盘,在定时器中断服务函数中扫描键盘,获取键值后将其加入到缓冲区中,在主程序中通过 char gprs_get_key()函数获取键值,没有键按下时返回0GPRS 发送短消息处理的状态图如图3所示。

空闲状态

输入号码

发送状态

Cancel

数字键

Enter

发送成功

发送失败

                            图3 发送信息处理

二、             μc-osII移植

   μc-osII是一种基于优先级可抢先的多任务硬实时内核,包含了任务调度、时间管理、内存管理和任务通信同步等操作系统的基本功能,但没有提供I/O 管理、文件系统、GUI TCP/ IP 服务。系统最多可管理64 个任务(其中8 个系统任务,56 个用户任务) ,中断管理可达255 层。μc-osII绝大部分代码是用C 语言编写的,只有与CPU 硬件接口相关部分是用汇编语言编写的,具有很好的可移植性,只要处理器具有堆栈指针、CPU 内部寄存器入栈出栈指令、能开关中断并且C 编译器支持内嵌汇编即可实现移植。

    首先为编写INCLUDES. H 主头文件

 //****************CPU**************//

#include "uhal/uhal.h"

#include "../inc/drivers.h"

#include "ucos_ii.h"

#include "add/osaddition.h"

     移植uC/ OS2II 的主要工作就是修改uC/ OS2II内核源码中与CPU 有关的函数,包括OS_CPU. HOS_CPU_A. ASM OS_CPU_C. C。经过移植操作系统后的MCU 就成为一个嵌入式开发平台,系统的各个功能是在uC/ OS2II 的管理下完成的。

程序清单在此不一一列举,以下是需要用到的字符处理函数的示例:

   //int Unicode字符串的转换

void Int2Unicode(int number, U16 str[]);

//Unicode字符串到int的转换

int Unicode2Int(U16 str[]);

//char类型包括GB编码,Unicode的编码转换

void strChar2Unicode(U16 ch2[], const char ch1[]);

void UstrCpy(U16 ch1[],U16 ch2[]);

三、GPRS与短消息
   GPRS
网络是基于现有的GSM 网络来实现的。在现有的GSM 网络中需要增加一些节点,如GPRS 网关支持节点(Gateway GPRS Supporting Node, GGSN)GPRS 服务支持节点 (Serving GPRS Supporting Node, SGSN)SGSN 的主要作用是记录移动终端的当前位置信息, 并且在移动终端和GGSN 之间完成移动分组数据的发送和接收。GGSN 主要起网关作用,它可以和多种不同的数据网络连接,所以有时候也被称为GPRS 路由器。GGSN 可以把GSM 网中的GPRS分组数据包进行协议转换,从而把这些分组数据包传送到远端的TCP/IP X.25 网络。

通过GPRS 网络进行数据传输需要使用GPRS 模块。目前,GPRS 模块一般是指带有GPRS 功能的GSM 模块,可以利用GPRS 网络进行数据通信。GPRS 模块与开发板控制器之间通过串行口进行通信,通信速率最快可达到115 200bps。模块与控制器间的通信协议是AT 命令集。

收发短消息涉及的AT命令有:

(1)       选择短消息格式
发送AT+CMGF=n,由于我们要选择PDU格式,于是取n=0

(2)       设置短消息中心
AT+CSCA=<string>,string=”+8613********”,
根据地点的不同选择相应的号码

(3)       发送短消息
发送AT+CMGS=n,n为短消息PDU包的字符数,等模块返回〉符号后,发送短消息的内容,以~Z结束,开始发送短消息。

(4)       阅读短消息
发送AT+CSMS=<index>,<index>是短消息在当前存储区的索引号。

(5)       短消息列表(PDU格式下)
发送 AT+CMGL=<mtype>,mtype表示短消息的类型,0是未读,1是已读,4是全部。

GPRS模块与S3C2410XUART1进行通信,通过该串口,可以发送AT命令到GPRS模块并获取GPRS模块的输入。

如下函数发送cmdstring中的AT命令到GPRS模块中:

void gprs_send_cmd(char *cmdstring)

如下函数接收GPRS模块的数据,如果接收到正确的命令则返回GPRS_OK,否则返回GPRS_ERR

int gprs_recv_cmd(char *cmd)

发送SMS信息一共有三种方式,Block ModeText ModePDU ModeBlock Mode目前很少使用,Text Mode是纯文本方式,可使用不同的字符集,主要用于欧美地区传送字母、数字字符等,而且不适合做自定义的数据传输,国内手机一般不支持,PDU Mode支持所有手机,可以使用任何字符集,是当前大部分手机默认的编码方式。

四、             PDU模式收发短信

PDU串表明上是一串ASCII码,由0~9A~F这些数字和字母组成,是八位字节的十六进制数或BCD码十进制数。

       例如向手机号码“13951083725发送一条“你好”的短消息(USC2编码)(length>18,<pdu>代码则为“0891683110301405F011000D91683159013827F5000800044F60597D";

   对照规范,有如下发送PDU串对照表如表1所示:

  推荐精品文章

·2024年6月目录 
·2024年5月目录 
·2024年4月目录 
·2024年3月目录 
·2024年2月目录 
·2024年1月目录
·2023年12月目录
·2023年11月目录
·2023年10月目录
·2023年9月目录 
·2023年8月目录 
·2023年7月目录
·2023年6月目录 
·2023年5月目录

  联系方式
TEL:010-82561037
Fax: 010-82561614
QQ: 100164630
Mail:gaojian@comprg.com.cn

  友情链接
 
Copyright 2001-2010, www.comprg.com.cn, All Rights Reserved
京ICP备14022230号-1,电话/传真:010-82561037 82561614 ,Mail:gaojian@comprg.com.cn
地址:北京市海淀区远大路20号宝蓝大厦E座704,邮编:100089