短消息服务(Short Message Senice)作为GSM网络提供给用户的一种基本的数字业务,已成为诸多领域远程监控的一种通信手段。在很多应用场合中都通过PC机直接控制短消息收发模块完成系统的数据采集或远程信息传输,但对于偏远地区、架设通信线路比较困难的地方,需要一种方便携带的设备控制短消息收发模块。系统通过在STM32上完成对短消息模块的控制,提出了一种嵌入式短消息收发系统的实现方法。
本文讨论一类通用的SMS短消息收发系统的实现方法,包含短消息调度和SMS短消息处理控制器的实现机制,特别对STM32嵌入式微处理器下短消息收发调度的实现过程和短消息处理状态机进行了详细讨论。在嵌入式系统中,时间和并行性(concurrency)是必不可少的。通过对超时时间的控制和不同条件的切换,使得对短消息的收发处理在较小时间段内显示出并发特性。能够处理多条短消息同时控制的情况,具有良好的通用性。
1 系统的功能与结构
SMS是GSM系统提供给广大移动用户的一种双向通信、具有一定的交互能力、占用GSM网络的信令信道的数字业务。SMS提供了在GSM移动站台(MS)与一个短消息实体(SME)之间通过服务中心(SC)传送短消息的方法。SC提供了在MS与SME之间消息传送的相互联系和转播的功能。SMS采用存储转发模式,短消息被发送出去之后,不是直接地发送给接收方,而是先存储在短消息服务中心,然后再由服务中心将其转发给接收方。如果接收方当时关机或不在服务区内,服务中心会自动保存该短消息,捧队并尝试再次发送给接收方。由于短消息使用了服务中心的这种存储和转发机制,因此SMS具有较高的可靠性。这也意味着GSM模块收发SMS的响应速度受运营商服务中心的限制。因此,要提高响应速度,需要一个持续在线的终端一直运行。
系统在两个短消息实体间增加本地SMSC(短消息服务中心),通过SMSC完成短消息的解析并执行相应的动作、控制、无线通信功能。确保GSM终端模块持续运行,以提高响应速度。
系统由TC35i GSM模块和运行在STM32微处理器上的短消息处理控制机两部分组成。TC35i负责短消息的收发。短消息处理控制机用来向GSM模块发送或读取TC35i收到的短消息,并执行相应的动作和控制。二者之间通过RS232串口实现数据交换。用户可以利用手机通过GSM网络和系统进行交互完成控制功能。
2 STM32片上资源的分配和使用
STM32是意法半导体基于Cortex—M3的32位嵌入式处理器,Cortex—M3核性价比高,价格低,可以与8位51核单片机竞争。
处理器和GSM模块之间通过RS232串口实现数据交换,TC35i集成了标准的RS232接口,通过MAX232芯片做电平转换,与处理器USART接口进行通信。因此处理器需要提供两个串行通信接口,其中一个串口用于和GSM模块进行通信,另一个串口用于和上位机软件交换数据或调试。在处理器选型时需要考虑这个问题,而STM32全系列微处理器均能满足这个要求。系统选用的处理器型号为F103RBT6,该产品系列带有128k片内FLASH,20kRAM,无需外扩存储器即可以满足系统对于多条控制短消息同时处理耗费内存空间的需要。STM32F103RB带有3个USART接口,可以满足系统对串口资源的需求。芯片带有4个独立定时器,1个RTC实时时钟,系统只用到其中2路:1路用于产生较准确的系统延时,用于一般延时定时和状态切换超时判断。一路用于通过定时轮询方式读取短消息。GSM模块短消息收发和运行状态的监测通过USART的中断处理程序实现。
3 SMS短消息控制状态机的实现
由于系统旨在完成一类通用的SMS短消息控制机实现方法,因此在系统实现时从逻辑上将SMS提供方和使用方剥离,将发送子系统和接收子系统分离。这通过两个全局队列实现,发送队列和接收队列。
定义一个结构体类型:
作为短消息的基本数据单元。
并定义SMS_PDU类型的队列,分别作为发送队列和接收队列,即,SMS_PDU类型的结构体数组。如下:
SMS_PDU m_QuerySend[MAX_SMS_SEND];
SMS_PDU m_QueryRecv[MAX_SMS_RECV];
以上定义均为全局队列。对全局变量的操作会涉及到并发和多线程访问技术,本系统考虑到实时性采用前后台系统实现方式,通过STM32多路定时和中断功能来完成多线程的模拟,主程序调用一个无限循环的控制器处理函数,在控制器循环中调用相应的驱动函数完成相应的功能。同时中断系统作为前台,遇到外部触发条件则立即构造短消息并加入到输出队列中。[page]
对接收队列缓冲区的操作也分为输入和输出部分。系统设定条件为一旦状态机处于idle状态达到5 ms时间(意味着发送队列中待发短消息已全部处理完毕)则状态切换到开始接收状态,即通过AT指令从模块读取短消息协议数据单元,解析为SMS-PDU格式并将其放入接收队列。输出部分主要通过定时器设置10 ms轮询,一旦有解析好的短消息到来,则马上控制被控设备产生相应动作。
系统实现中,通过main函数调用短消息控制器循环运作状态迁移转换处理程序来实时完成与GSM模块的交互,通过TIM2中断处理例程完成对接收队列中已到达短消息的调度(dispatch)处理,该处理程序会根据接收到的短消息内容的不同来实现具体的控制功能。发送SMS时,也采用类似的中断方式和队列形式来完成多线程的模拟。为了防止对接收指令的误响应和减小与模块交互读取时间,每次接收短消息后都将GSM模块上已收短消息删除。
系统采用状态机来实现不同状态处理的切换,过程中短消息数据收发的状态迁移图如图1所示。
4 STM32处理控制机与GSM模块的交互
STM32通过AT指令完成与GSM模块交互。与GSM模块交互读取短消息有多种方式,如AT+CMGR;AT+CMGL等。由于多个用户可以同时操作,考虑到可能到来的多条短消息,系统中使用CMGL AT指令完成STM32对GSM模块的通信操作,以便利一次读取,提高系统的响应速度。
CMGL指令在SMS PDU mode下的格式如下:
SMS规范中定义了message_status的5种不同状态下的操作:
0表示已接收到的未读短信,
1表示已接收到的已读短信,
2表示已存储的未发送短信,
3表示已存储的已发送短信,
4表示列出全部SMS短信。
如果GSM模块成功从存储区读到短消息,将会返回到形如:
格式的反馈信息。其中+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模块返回响应信息,这意味着系统实时性的高低瓶颈仍然取决与运营商。
上一篇:嵌入式Modbus/TCP网关的设计与实现
下一篇:基于Zigbee无线传感器网络的智能灯光跟随系统
推荐阅读最新更新时间:2024-03-16 13:15
设计资源 培训 开发板 精华推荐
- Allegro MicroSystems 在 2024 年德国慕尼黑电子展上推出先进的磁性和电感式位置感测解决方案
- 左手车钥匙,右手活体检测雷达,UWB上车势在必行!
- 狂飙十年,国产CIS挤上牌桌
- 神盾短刀电池+雷神EM-i超级电混,吉利新能源甩出了两张“王炸”
- 浅谈功能安全之故障(fault),错误(error),失效(failure)
- 智能汽车2.0周期,这几大核心产业链迎来重大机会!
- 美日研发新型电池,宁德时代面临挑战?中国新能源电池产业如何应对?
- Rambus推出业界首款HBM 4控制器IP:背后有哪些技术细节?
- 村田推出高精度汽车用6轴惯性传感器
- 福特获得预充电报警专利 有助于节约成本和应对紧急情况