关 闭

新闻中心

EEPW首页>工控自动化>设计应用> 基于STM32的SMS短消息收发系统

基于STM32的SMS短消息收发系统

作者: 时间:2012-12-22 来源:网络 收藏

对发送队列缓冲区的操作分为人队操作和出队操作,入队操作是由外部采集模块产生的中断事件,在该中断的处理例程中构造好具有发送具体内容PDU编码、目标手机号等资讯的结构体,并将构造好的结构体存放到发送队列中,此时一旦主程序中的短消息控制器在进行收发处理完毕后处于idle状态,将立即切换到开始发送状态,完成对发送队列中历史积累的发送处理,在发送前首先进行出队操作。
对接收队列缓冲区的操作也分为输入和输出部分。系统设定条件为一旦处于idle状态达到5 ms时间(意味着发送队列中待发短消息已全部处理完毕)则状态切换到开始接收状态,即通过AT指令从模块读取短消息协议数据单元,解析为-PDU格式并将其放入接收队列。输出部分主要通过定时器设置10 ms轮询,一旦有解析好的短消息到来,则马上控制被控设备产生相应动作。
系统实现中,通过main函数调用短消息控制器循环运作状态迁移转换处理程序来实时完成与GSM模块的交互,通过TIM2中断处理例程完成对接收队列中已到达短消息的调度(dispatch)处理,该处理程序会根据接收到的短消息内容的不同来实现具体的控制功能。发送时,也采用类似的中断方式和队列形式来完成多线程的模拟。为了防止对接收指令的误响应和减小与模块交互读取时间,每次接收短消息后都将GSM模块上已收短消息删除。
系统采用来实现不同状态处理的切换,过程中短消息数据收发的状态迁移图如图1所示。

本文引用地址://m.amcfsurvey.com/article/159593.htm

d.JPG



4处理控制机与GSM模块的交互
通过AT指令完成与GSM模块交互。与GSM模块交互读取短消息有多种方式,如AT+CMGR;AT+CMGL等。由于多个用户可以同时操作,考虑到可能到来的多条短消息,系统中使用CMGL AT指令完成对GSM模块的通信操作,以便利一次读取,提高系统的响应速度。
CMGL指令在SMS PDU mode下的格式如下:
c.JPG
SMS规范中定义了message_status的5种不同状态下的操作:
0表示已接收到的未读短信,
1表示已接收到的已读短信,
2表示已存储的未发送短信,
3表示已存储的已发送短信,
4表示列出全部SMS短信。
如果GSM模块成功从存储区读到短消息,将会返回到形如:
b.jpg
e.JPG
格式的反馈信息。其中+CMGL后第一个1所在字段作为索引index,指示短消息在短消息存储区中的位置。注意这个位置小并不表明该短消息是先到达的控制短消息。第二个1所在的字段指示短消息的状态,同上述message_status的状态,但只有0~4的取值范围。24所在字段指示仅随其后的的TPDU编码的有效部分长度,以10进制表示。如果CMGL后面不加“=”号和任何数字,默认为“CMGL=0”的效果。系统中根据TPDU编码的内容进行解析,并将解析结果保存到一个临时SMS_PDU结构体类型的数据单元中。然后交由短消息处理保存到队列中进行处理。

5 结束语
由于GSM模块收发SMS的响应速度受运营商服务的限制,短消息控制器的状态设计中需要把发送AT指令给模块和从GSM模块收到响应字符串区分为两种不同的状态,以及区分其它预备和执行状态,并利用MPU定时器产生精准毫秒延时来判定响应是否超时。但这只能提高状态切换精度,无法保证SMS服务响应的时间精度,即,系统必须等待GSM模块返回响应信息,这意味着系统实时性的高低瓶颈仍然取决与运营商。


上一页 1 2 下一页

评论


相关推荐

技术专区

关闭