当前位置: 首页 > 范文大全 > 公文范文 >

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

时间:2022-03-22 09:22:51  浏览次数:


打开文本图片集

摘要:随着手机的广泛使用,GSM网络提供的短消息服务使得只需要增加少量投入便可以通过手机实现生活和生产中的远程控制和告警通知成为可能。讨论一种基于STM32的SMS短消息收发系统,主要内容包含STM32模块配置和短信收发系统的实现。特别对系统中STM32微处理器的RCC、EXTI、NVIC等模块的实现进行了详细讨论。

关键词:STM32;EXTI;短消息;GPIO;NVIC

中图分类号:TP311文献标识码:A文章编号:1009-3044(2012)20-4800-03

STM32 Short News Sending&Receiving System Originated from GSM

SONG Wei

(Guangdong Institute of Science and Technology, Guangzhou 510640,China)

Abstract:With the wide use of mobile phones, short message service GSM networks offered makes life and industrial remote control and alarm inform method through mobile phone possible only through a small increase in investment. This paper puts emphasis on a SMS mes sage sending and receiving system based on STM32, main contents include STM32 module configuration and implementation of SMS send ing and receiving system. Especially for system implementation on STM32 microprocessors, RCC, EXTI, NVIC,etc, were discussed.

Key words:STM32;EXTI;short message service;GPIO;NVIC

随着生活节奏的加快和生产效率的提高,不在一线现场也能及时了解第一手资料,以便及时处理生产生活过程中的突发事件,是现代控制系统发展的趋势,也是人们对现代生活便捷性追求的目标。随着手机的广泛普及,需要有一种方式让人们只需要增加少量投入便可以通过手机远程控制家里的电器或生产现场的设备,远程查看设备或安防系统状况,以降低时间和交通成本,提高工作效率。同时,一旦家中发生非法入侵、火灾、煤气泄漏[1]等安全事故时手机用户能够在短时间内获知险情,及时处理。为此本文设计了一种基于STM32和SMS的短信收发系统,在ST公司基于ARM Cortex-M3内核的嵌入式CPU上实现GSM短信的收发,以便处理用户发送短信控制设备,和设备异常时发送通知消息到用户的情况,实现用户和设备间的双向通信处理。

1系统结构及工作原理

本文所设计的STM32短信收发系统由CPU模块、电源模块、短信收发模块、时钟模块、后备电源模块、键盘模块、LED指示模块、驱动模块、检测模块等模块组成,如图1所示。

系统的工作过程为:用户通过手机将控制短信发送给GSM模块,STM32对GSM模块中的短信进行接收和解码的操作,然后对解码后的短信内容进行分析后控制相应电器,如空调、电源开关,房灯或其它照明设备的开通或关断,或转换为固定在系统中的设备操作指令,并将指令发给控制设备,控制设备通过配套操作指令产生相应动作。同时,STM32通过外部设备中断等方式获取外围烟感、气体传感器和防盗系统传递给CPU的信号,一旦家中或生产线上发生诸如非法入侵、火灾、煤气泄漏等险情时,系统立即向固定的手机发送告警短信,实现了家居和生产过程的告警通知和远程控制。

设计中采用STM32单片机和西门子公司的TC35i GSM模块实现具有中文短信功能的短消息收发系统。通过RS232串口将GSM模块与STM32相连,并在STM32平台上开发软件,实现中文短信点对点[2]的双向收发,从而实现与用户手机与GSM模块的远程通信功能。

发送和接收SMS短信有两种方式:基于AT命令的文本模式和基于AT命令的PDU(Protocol Description Unit Mode)模式。TC35i模块既支持文本模式也支持PDU模式,文本模式通常用来发送纯西文短信,PDU模式用于发送中文短信。在PDU模式下短信息正文经过编码后转换成UNICODE码被传送[3]。

2 STM32系统配置过程

系统采用意法半导体公司推出的STM32单片机作为嵌入式处理器。STM32系列微控制器基于专为要求高性能、低成本、低功耗的嵌入式应用专门设计的ARM Cortex-M3内核。该内核产品按性能可分成不同的系列:STM32F103“增强型”系列和STM32F101“基本型”系列[4],以及接口丰富的“互联型”系列等。增强型系列时钟频率达到72MHz,是同系列产品中主频最高的产品。各个系列均内置FLASH存储器,不同的是闪存容量、SRAM的最大容量和外设接口的组合。在选择型号时重点考虑FLASH容量和SRAM空间大小[5]。系统实现了固定内容的短信收发,不需要动态生成可能使用所有汉字内容的短信,因此节省了短信PDU编解码所需要的汉字码表空间,对于32K的FLASH即已足够。

系统运行时首先要对STM32进行初始化。初始化过程如图2所示:

如图所示,系统首先进行的是时钟和复位配置。时钟是STM32单片机的脉搏,是单片机片上外设和内部总线的驱动源。因此初始化代码中首先进行RCC时钟的配置。STM32单片机的时钟可以由以下3个时钟源提供:HSI、HSE、LSE。其中LSE一般作为RTC时钟精确定时使用。程序中使用HSE来产生PLL时钟,然后倍频为72M后作为系统时钟。STM32单片机将时钟信号经过分频或倍频(PLL)后,使能PLL时钟,得到系统时钟,系统时钟经过分频,产生外设所使用的时钟。具体过程如下:

STM32上电默认是使用内部高速RC时钟(HSI)启动运行,程序中首先打开HSE,等待其稳定,然后配置倍频并使能PLL,再等PLL稳定后设置为系统时钟,等系统时钟切换完成后就可以提供给外设使用。由于使用任何一个外设都必须打开相应的时钟,在RCC_Config函数中还完成了对各使用到的外设进行时钟使能操作。对于系统中不需要使用到的外设,就把它的时钟关掉,这样可以降低系统的功耗,达到节能目的,实现低功耗的效果。

其次是进行GPIO的配置。GPIO配置函数用来设置LED,KEY,外部触发中断口和串口的输入输出属性。在配置IO口时,先要打开相应GPIO组对应的时钟。对于LED需要将GPIO配置为推挽输出状态。对于按键,需要根据外接电路的状态将其设置为上拉输入或下拉输入状态,还需要进行EXTI的设置。EXTI是STM32产品上专用的外部中断控制模块,它负责管理映射到GPIO引脚上的外中断和片内几个集成外设的中断,以及软件中断。它的输出最终被映射到NVIC的相应通道。EXTI配置中有关键影响的一点是触发模式EXTI_Trigger的选择,这和按键外围电路有关。系统中的按键接法是,按下时接通到GND,因此GPIO配置时应设为上拉输入模式,且EXTI中需要使用下降沿触发EXTI_Trigger_Falling,这样可以确保按键动作能够正确产生中断。

然后进行NVIC的设置。NVIC是Cortex-M3核心的一部分,用来指示中断源的优先级级别。系统设计中对USART1和USART2,以及RTC,KEY,外部开关信号都使用了中断操作,因此需要设定各种中断的优先级别。包含抢占式优先级和响应优先级设置。设置时首先选择优先级分组为NVIC_PriorityGroup_1。然后对串口优先级进行设定。由于GSM模块的返回信息需要及时保存和处理,因此将连接到GSM模块的串口抢占和子优先级都设置为最高,为0。对于其它中断源,将抢占优先级设置为1,这样防止其它各中断对GSM模块返回值处理过程的干扰。优先级设置顺序为,串口最高,按键其次,外部中断再次,RTC最低。由于系统中并不需要非常精确的确定事件发生时间,相比而言,用户控制短信及时收取并处理,以及及时通知用户的意义更大,因此RTC计时只是作为参考,将其设置为抢占优先级最低。

3 STM32短消息收发处理

用GSM模块进行短信收发处理,主要有两个部分需要考虑,一个是AT指令,一个串口读写。AT指令作为主控芯片和GSM模块之间的通信协议,完成对GSM模块的控制功能。TC35i GSM模块在收发短信时,分为两种模式,一种是TEXT模式,一种是PDU模式,如果只需要发送英文内容,TEXT模式就可以。系统实现中文短信的收发以增强交互性,因此使用PDU模式。模式的设置通过AT指令完成。系统在初始化后,首先通过USART1向GSM模块发送“AT\r”命令查询短信模块是否工作正常。这个过程是首先发送“AT\r”,然后延时100ms,然后查询GSM模块返回值(这个返回值是在100ms内由GSM模块通过USART1把返回字符一个个依次保存到自定义的串口缓冲区中完成赋值的),将返回字符串和“OK”字符串作比较,如果返回结果中能找到“OK”字符串即表示模块工作正常。然后通过USART1发送"AT+CMGF=0\r"[6]指令给GSM模块,初始化短信发送状态为PDU模式。然后进入主循环,在主循环中进行两个动作:一个是根据外围设备的状态取得告警事件,即安全状态扫描;一个是检测是否有新的短信到来,这通过"AT+ CMGL=0\r"指令完成,该指令会列出未读短信。通过取得返回值“+CMGL”后第7个位置的值,得到新短信的index号,再通过AT+ CMGS=index指令获得新短信的PDU编码。如果有新短信到来,从PDU编码中提取出短信号码和短信内容,将短信号码与指定号码进行比较,判断是否为指定用户的号码,如果是,再将短信内容与固定的汉字UNICODE内容字符串进行比较,判断具体是哪条操作控制命令,如提取的内容是“5F00542F5E039632”,则表示“开启布防”控制命令,于是系统控制相应的继电器动作来控制门禁系统的布防开关。这样固定的汉字处理方式不需要进行PDU编码的转码过程,节省了FLASH空间和处理时间。

以上过程实现了用户对设备的远程操控。对短消息的远程发送处理流程,则在主循环中调用一个安全监测函数来处理。在安全监测函数中轮询IO口高低电平的状态标志。这个状态标志是在外部设备异常时通过IO中断处理例程来设置的。如果某个设备状态标志异常,则转入该设备的告警例程,通过构造固定的PDU字符串向用户发送提示短消息。系统中通过AT+CMSS=index直接从SIM卡中取得预存的固定中文短信并发送给用户手机,这种方式省去了构造短信PDU字符串的麻烦。

为了方便计时,在系统中实现了实时时钟,用于家庭火灾、煤气泄露、工厂被盗等各种险情发生时间点的记录。因此需要进行RTC实时时钟的配置,还需要进行RTC与外界时间的同步操作。系统的RTC外部晶振采用负载电容为6pF的32.768kHz晶振以便起振容易,降低功耗。RTC配置涉及对电源相关配置寄存器(PWR)、备份区域(BKP)和RCC寄存器的改写。备份区域中有可写入标志数据的空间,由于掉电后备份区域中的内容仍保持,可以通过对写入的标志数据的比较,知道备份区域中的设置是否存在。若不存在,则向备份寄存器写入一个标志数据。通过这种方式来判断实时时钟RTC是否设置。

程序中使用BKP_ReadBackupRegister来读取备份区域的备份寄存器BKP_DR1的值,该值与事先定义的标志数据作比较,如果相等表明RTC已配置。如果不相等则开始配置RTC,这种配置只需要一次,由于RTC的预分频器、计数器和闹钟寄存器在备份区域中,这可以保证系统掉电后,在电池供电时仍能计数。在配置之前首先使用BKP_WriteBackupRegister固件库函数向BKP_DR1写入标志数据,以便下次不用重复配置。配置程序中首先启用PWR和BKP的时钟,然后将后备域解锁以使能RTC和备份寄存器的访问,再选择LSE作为为RTC时钟并等待其稳定后开启RTC驱动时钟源,开启后等待APB1时钟与RTC时钟同步,并确定上一次操作已经结束,然后进行寄存器读写操作。这个操作主要完成对RTC分频器的设置,将预分频值设置为32767,这样使得RTC时钟频率为1Hz,即可实现秒计数的功能。每次读写RTC的寄存器操作后都要等待寄存器写入完成。然后使能秒中断,RTC计数器即开始计数,并在每秒结束时产生一个中断事件。

RTC与外界时间的同步是通过接收到的配置短信来提取出接收时间,并将其作为RTC计数器的值,以实现与北京时间同步。

4结束语

系统实现了STM32下的短信收发处理过程,短消息的收发采用轮询顺序处理方式,即收到控制短信后就处理控制短信,控制短信处理完后再去查看告警装置的状态,如果状态异常就转入发送告警短信处理过程,长此往复。系统实现了通过手机实现生活和生产中的远程控制和告警通知,只需要增加少量投入,但未考虑收发的时间因素和多用户情况下同时处理的可能。

参考文献:

[1]鲜晓东,常超,胡颖,等.基于WSNs和GSM的室内环境监测预警系统设计[J].传感器与微系统,2011, 30(6):141-145.

[2]黄道斌,黄明和,王海华.基于短消息中文寻址的设计与实现[J].微型电脑应用,2007, 23(7):35-37.

[3]刘晋.手机短消息服务在OA系统中的实现[J].计算机工程.2004, 30(z1):202-204.

[4] Cortex-M3内核32位MCU提供增强与基本两种类型选择[J].电子设计技术,2007, 14(8):35-37.

[5]宋维,崔晓坤.基于STM32的GSM模块综合应用[J].电脑知识与技术,2012,18(8):4536-4537.

[6]吕芳,胡林静,臧琛.基于TC35 GSM的汽车防盗报警系统的软件设计[J].测控技术,2009,28(z1) :125-127.

推荐访问: 收发 短消息 系统 STM32 SMS