一种在单片机中实现GSM模块控制的系统及方法与流程

文档序号:11158238阅读:2617来源:国知局
一种在单片机中实现GSM模块控制的系统及方法与制造工艺

本发明涉及无线通信领域,尤其涉及在单片机上实现GSM无线通信模块的低功耗控制的嵌入式系统及其工作方法,更具体地,涉及以嵌入式软件架构实现GSM模块的低功耗控制。



背景技术:

全球移动通信系统GSM(Global System for Mobile Communication)技术广为大众所熟知,其中的核心模块是GSM无线通信模块,其指的是符合GSM规范的,具有发送短信、语音通话、GPRS数据传输等基于GSM网络的所有基本功能的软件模块,又简称为GSM模块。

市面上大部分智能硬件产品都附带有通信模块,根据其需求,可能选择WIFI模块、蓝牙模块、GSM模块。其中,GSM模块网络覆盖面广,应用限制小,是智能硬件上最受欢迎的通信方案之一。一般的智能硬件开发,都是通过一个单片机来控制一个通信模块以及其余相关外设,其中,通信模块是最为复杂的部分,其控制逻辑是否完善直接影响着单片机的稳定性、功耗、功能性,进而影响到最终的智能硬件产品的价值。

现有的通过单片机控制通信模块的软件架构(以下简称软件架构),大致有两种:

(1)数据透传型:将GSM模块配置成“数据透传模式”,在整个系统的运行周期中,GSM模块都处于开启状态。这一方式编程简单,无需进行复杂的软件设计,但是能够使用的GSM模块功能局限于GPRS数据传输。同时GSM模块保持开启,导致电路功耗较大,不适合于对功耗有严格要求的产品。

(2)同步控制型:使用AT指令对GSM模块进行控制,发出一条AT指令后,程序阻塞,直到GSM模块返回结果。为了防止程序锁死,一般设置超时时间,返回时间若超过超时时间,则认为命令失败。这一方式编程比较简单,但是存在一定缺陷:耗时较长的AT指令其返回时间不固定,如果超时时间设置过短,则命令失败率高,如果设置过长,则系统阻塞时间过长,影响系统处理速度。此外,无论如何设置超时时间,系统都存在一定阻塞,导致用户体验下降。

这些现有技术中存在如下缺点。在数据透传型架构中,GSM模块开启时间过长,因而功耗较高,此外,由于GSM模块持续开启,因而无法使用除GPRS数据传输以外的功能。在同步控制型架构中,对长命令的超时时间难以进行合适的设置,过高则系统长时间阻塞,过低则命令成功率低,而且系统阻塞的存在必定导致用户体验的下降,进一步地,在同步控制逻辑中,主程序代码和GSM模块控制代码耦合程度较高,这导致一旦更换GSM模块,主程序代码必须相应修改,大大提高了开发人员的工作量。



技术实现要素:

本发明旨在解决上述现有技术中存在的问题,本发明的目的是通过以下技术方案实现的。

本发明提供一种在单片机中实现GSM模块控制的方法,其特征在于,所述方法包括:

步骤S1:检测是否接收到模块启用命令,如果未接收到,则返回到其余业务逻辑,继续等待,如果接收到,则判断要执行的任务是否是GSM任务,如果不是,则关闭GSM模块,如果是,则进入步骤S2;

步骤S2:执行GSM任务调度;

步骤S3:GSM任务调度结束后,返回其余业务逻辑,继续等待新的命令。

进一步地,步骤S2中GSM任务调度的执行方法包括:

步骤S201:由依据本发明的系统的GSM任务调度层判断任务是否在进行中,如果任务正在进行中,则进入任务执行处理环节,如果任务不在进行中,则从任务队列中取出一条任务,并进入任务执行处理环节;

步骤S202:在任务执行处理环节,判断模块是否出错,如果没有出错,则表示执行成功,退出当前任务;如果出错,则将错误计数器中的数值加1,并进入步骤S203;

步骤S203:判断错误计数器的数值是否超过预先设定的阈值,如果没有超过,则对GSM状态机进行校正,并退出当前任务;如果超过阈值,则执行任务撤销操作S204;

步骤S204:执行模块检测,如果检测不通过,则停用该模块,并退出当前任务;如果检测通过,则清空该错误计数器的值,并退出当前任务。

进一步地,所述任务执行处理环节包括:

步骤S201-1:根据异步等待标志位,判断是否正在等待异步回复,如果不是,则进入步骤S201-2,如果是,则进入步骤S201-3;

步骤S201-2:判断当前正在执行哪项任务,根据任务编号调用任务执行函数,如果任务执行函数出错,则设置GSM状态变量中的模块错误位,并退出任务执行处理环节;如果任务执行函数没有出错,则在执行完毕后退出任务执行处理环节;

步骤S201-3:检测是否接收到异步回复,如果异步回复超时或失败,则设置GSM状态变量中的模块错误位,并退出任务执行处理环节;如果没有检测到异步回复超时或失败,则继续进行异步回复成功检测,如果该异步回复成功,则重置所述异步等待标志位,并退出任务执行处理环节;如果仍然没有检测到异步回复成功,则直接退出任务执行处理环节。

进一步地,任务执行函数的运行方法包括:

步骤S201-2-a:根据任务内容判断当前模块的状态,确定需要执行哪项功能封装函数;

步骤S201-2-b:根据所确定的功能封装函数编号,调用相应功能封装函数;

步骤S201-2-c:判断功能封装函数是否出错,如果出错,则返回“错误”,否则返回“正常”。

进一步地,其中所述功能封装函数将一条或多条AT命令组合,进行连续执行,对于短时间内有回复的AT命令,以同步方式执行;

对于回复时间长的AT命令,将该AT命令放在功能封装函数的最后,并且设置等待长回复标志位。

进一步地,功能封装函数的执行方法包括:

步骤ss1:执行短时间内有回复的AT命令,并判断是否执行成功,如果不成功,返回“失败”;如果执行成功,则设置GSM状态变量中的GSM模块状态机,并继续执行后续AT命令;

步骤ss2:执行长时间回复的AT命令,设置等待长回复标志位,并设置GSM状态变量中的GSM模块状态机;

步骤ss3:AT命令均执行完成后,返回“成功”。

进一步地,将特定命令保存在长时间AT命令列表中,系统在处理待执行AT命令时,查询该长时间AT命令列表,如果待执行AT命令包括在该列表中,则该待执行AT命令属于长时间回复的AT命令,如果不包括在该列表中,则属于短时间内有回复的AT命令。

本发明还提供一种在单片机中实现GSM模块控制的系统,该系统包括:

GSM任务调度层,用于进行GSM任务切换,并调用任务处理函数和任务撤销函数,如果检测到模块错误,则进行GSM状态机校正;

任务处理与撤销层,用于根据当前任务调用相应的任务处理函数;当需要撤销任务时,调用相应的任务撤销函数,根据当前任务进行相应的撤销工作;

任务执行层,包括至少一个任务执行函数,每一个GSM任务对应于一个任务执行函数,用于根据具体的业务逻辑与模块当前的状态,调用相应的功能函数;

功能封装层,用于将一条或多条AT指令打包,控制GSM模块实现特定功能;

底层驱动层,用于执行AT命令的发送以及回复的接收和检测;

所述系统还包括全局变量层,其包括GSM状态变量,用于在所述GSM任务调度层、所述任务处理与撤销层、所述任务执行层、所述功能封装层和所述底层驱动层之间交换信息;

其中,所述GSM任务调度层、所述任务处理与撤销层、所述任务执行层、所述功能封装层和所述底层驱动层依次连接,并均与所述全局变量层连接。

进一步地,所述GSM状态变量中保存有:GSM模块状态机、GSM任务队列、当前执行的任务、当前执行的功能函数、接收缓存和发送缓存、模块错误位,在每条功能封装执行成功后,需设置GSM模块状态机。

进一步地,其中底层驱动层包括三个底层驱动函数:命令发送函数、回复接收函数和回复检测函数,其配置用于:首先,所述命令发送函数清空接收缓存,然后将发送缓存里的内容通过串口发送到GSM模块;其次,在串口中断里调用回复接收函数,将串口回复的字符串存入到接收缓存中;并且,所述回复检测函数扫描接收缓存来判断是否有回复以及回复内容。

本发明基于独创的在单片机上控制GSM模块的软件架构,具有以下特点:1、本发明的软件架构具有较低功耗,尤其适用于便携式智能硬件产品。2、本发明将同步控制与异步控制结合,把阻塞环节的耗时减少到最小。3、本发明由于GSM模块的灵活性,对于收发的GPRS数据没有任何限制。4、本发明能够支持短信收发、GPRS数据传输这两项GSM基础功能。5、本发明能够实现对GSM功能的封装以及与主程序代码的解耦,减少GSM模块更换时需要重写的代码量。通过本发明的改进,能够在单片机上实现GSM模块的低功耗、高效率、高兼容性的控制。

与现有方法相比,本发明通过五层划分加一套全局变量的软件架构,将GSM的任务划分成GSM模块的功能序列,每次调用任务执行函数,执行一个功能封装函数,该功能封装函数通过异步控制,对于短时间内有回复的AT命令,通过同步方式检测其回复,可以较迅速地做出响应,而对于回复时间较长的AT命令,通过异步方式检测其回复,大大减少了回复的等待时间。

综上所述,本发明的优点在于:与数据透传型架构相比,本发明在空闲时关闭GSM模块,有任务时开启,可以降低功耗,并且GSM模块无需一直保持在GPRS连接状态(仅在需要时开启),因此可以使用短信功能;与同步控制型架构相比,本发明将耗时长的AT命令以异步方式检测回复,相比同步方式,可以设置更大的超时时间,因此稳定性更高,而且不会影响用户体验,此外,对需要实现的程序代码进行了明确的封装和分装,其中与GSM模块直接相关的只有功能封装层,因此减少了模块发生变动时需要修改的代码数量。

附图说明

通过阅读下文优选实施方式的详细描述,各种其他的优点和益处对于本领域普通技术人员将变得清楚明了。附图仅用于示出优选实施方式的目的,而并不认为是对本发明的限制。而且在整个附图中,用相同的参考符号表示相同的部件。在附图中:

附图1示出了根据本发明实施方式的在单片机中实现GSM模块控制的系统框架图。

附图2示出了根据本发明实施方式系统中的主程序执行流程图。

附图3示出了根据本发明实施方式的GSM任务调度的具体执行方法流程图。

附图4示出了根据本发明实施方式的任务处理与撤销层的具体工作方法流程图。

附图5示出了根据本发明实施方式的任务执行函数的运行方法流程图。

附图6示出了根据本发明实施方式的功能封装函数的执行方法流程图。

具体实施方式

下面将参照附图更详细地描述本公开的示例性实施方式。虽然附图中显示了本公开的示例性实施方式,然而应当理解,可以以各种形式实现本公开而不应被这里阐述的实施方式所限制。相反,提供这些实施方式是为了能够更透彻地理解本公开,并且能够将本公开的范围完整的传达给本领域的技术人员。

根据本发明的实施方式,本发明在硬件方面至少包括8位单片机;1KB以上RAM,其中512B作为接收缓存,512B作为发送缓存;GSM模块;GSM模块和单片机间的串口连接,例如连接TX和RX线。该单片机通过串口中断方式接收GSM模块回复。

在软件方面,本发明的在单片机中实现GSM模块控制的系统包括五层结构,图1示出了本发明软件系统的构成框图,包括五层结构,依次为:GSM任务调度层、任务处理与撤销层、任务执行层、功能封装层、底层驱动层。五层之间使用一套全局变量(GSM状态变量)来交换信息,其中各层的构成原理按照在程序调用树中的层级来排布。

具体而言,GSM状态变量中保存有:GSM模块状态机、GSM任务队列、当前执行的任务、当前执行的功能函数、接收缓存和发送缓存、模块错误位等,用于在各层之间进行衔接和控制。GSM任务调度层用于进行GSM任务切换,并调用任务处理函数和任务撤销函数,如果检测到模块错误,则进行状态机校正。任务处理与撤销层根据当前任务调用相应的任务处理函数;当需要撤销任务时,调用相应的任务撤销函数,根据当前任务进行相应的撤销工作。任务执行层包括至少一个任务执行函数,其根据具体的业务逻辑与模块当前的状态,调用相应的功能函数。每一个GSM任务都有一个对应的任务执行函数。功能封装层将一条或多条AT指令打包,控制GSM模块实现某个功能。在每条功能封装执行成功后,需设置GSM模块的状态机。底层驱动层用于执行AT命令的发送以及回复的接收和检测。

图2示出了基于本发明的系统的主程序执行流程。本发明的在单片机中实现GSM模块控制的方法,首先对装置中的模块进行检测,如果检测不通过,则停用该模块,并进入其余业务逻辑,如果检测通过,则直接进入其余业务逻辑,并执行以下步骤:

步骤S1:检测是否接收到模块启用命令,如果未接收到,则返回其余业务逻辑,继续等待,如果接收到,则判断要执行的任务是否是GSM任务,如果不是,则关闭GSM模块,如果是,则进入步骤S2;

步骤S2:执行GSM任务调度;

步骤S3:GSM任务调度结束后,返回其余业务逻辑,继续等待新的命令。

其中,步骤S2中GSM任务调度的具体执行方法流程如图3所示,包括:

步骤S201:由依据本发明的系统的GSM任务调度层判断任务是否在进行中,如果任务正在进行中,则进入任务执行处理环节,如果任务不在进行中,则从任务队列中取出一条任务,并进入任务执行处理环节;所述从任务队列中取出一条任务,优选为选择优先级最高的任务;

步骤S202:在任务执行处理环节,判断模块是否出错,如果没有出错,则表示执行成功,退出当前任务;如果出错,则将错误计数器中的数值加1,并进入步骤S203;

步骤S203:判断错误计数器的数值是否超过预先设定的阈值,如果没有超过,则对GSM状态机进行校正,并退出当前任务;如果超过阈值,则执行任务撤销操作S204;

步骤S204:执行模块检测,如果检测不通过,则停用该模块,并退出当前任务;如果检测通过,则清空该错误计数器的值,并退出当前任务。

需要注意的是,本发明中GSM任务调度的具体执行过程并不仅仅由系统中的GSM任务调度层完成。在执行过程中,需要调用任务处理与撤销层的任务处理模块、任务撤销模块,以进行任务执行处理和任务撤销操作,该任务处理模块和任务撤销模块分别包括任务执行函数和任务撤销函数。此外,上述步骤S202和S203中的判断步骤可以由任务处理模块执行,也可以由GSM任务调度层来执行。

所述任务处理与撤销层的具体工作方法如图4所示,所述任务执行处理的方法具体包括:

步骤S201-1:根据异步等待标志位,判断是否正在等待异步回复,如果不是,则进入步骤S201-2,如果是,则进入步骤S201-3;

步骤S201-2:判断当前正在执行哪项任务,根据任务编号调用任务执行函数,例如调用任务1执行函数、任务2执行函数、任务3执行函数等,如果任务执行函数出错,则设置GSM状态变量中的模块错误位,并退出任务执行处理环节;如果任务执行函数没有出错,则在执行完毕后退出任务执行处理环节;

步骤S201-3:检测是否接收到异步回复,如果异步回复超时或失败,则设置GSM状态变量中的模块错误位,并退出任务执行处理环节;如果没有检测到异步回复超时或失败,则再进行异步回复成功检测,从而反复确定该异步回复的正确性,提高系统运行的准确度。如果该异步回复成功,则重置所述异步等待标志位,并退出任务执行处理环节;如果仍然没有检测到异步回复成功,则直接退出任务执行处理环节。

上述任务执行函数包括在系统的任务执行层中,其包括根据任务而定的业务逻辑。任务执行函数在被调用时,通过实际任务内容来判断需要执行的功能封装函数,并且根据功能封装函数的执行结果来返回错误/正确,参考图5。任务执行函数的运行方法包括:

步骤S201-2-a:根据任务内容判断当前模块的状态,确定需要执行哪项功能封装函数;

步骤S201-2-b:根据所确定的结果,调用相应功能封装函数,例如功能1封装函数、功能2封装函数、功能3封装函数;

步骤S201-2-c:判断功能封装函数是否出错,如果出错,则返回“错误”,否则返回“正常”。

所述功能封装函数包含在本发明系统的功能封装层中,其将一条或多条AT命令组合在一起进行连续执行。具体而言,对于短时间内有回复的AT命令,以同步方式进行;而如果功能封装函数中需要执行长时间AT命令,则该命令必须放在功能封装函数的最后,并且要设置长回复等待位。如果功能封装函数执行成功,需要相应设置GSM状态变量中的GSM模块状态。本发明功能封装函数的执行方法的一个示例流程图如图6所示,包括:

步骤I:首先执行短时间内有回复的AT命令1,并判断是否执行成功,如果不成功,返回“失败”;如果执行成功,则设置GSM状态变量中的GSM模块状态机,并继续执行后续AT命令;

步骤II:执行短时间内有回复的AT命令2,并判断是否执行成功,如果不成功,返回“失败”;如果执行成功,则再次设置GSM状态变量中的GSM模块状态机,并继续执行后续AT命令;

步骤III:执行长时间回复的AT命令1,设置等待长回复标志位,并设置GSM状态变量中的GSM模块状态机。所述等待长回复标志位用于指示系统正在等待该长时间回复的AT命令1的回复。

步骤IV:AT命令均执行完成后,返回“成功”。

在上述方法中,短时间内有回复的AT命令数目不限,图6中以2个AT命令作为示意,仅仅是为了使得示例清楚易懂,实际系统中,AT命令的数目可以是1个或大于2个,则步骤I的重复次数则相应地改变。但是需要注意的是,如果AT命令数量过多,执行时间过长,则系统每个主循环的最大延时会增加,这将不利于系统的运行。

此外,长时间回复的AT命令1相对应的流程在图6中以虚线框表示,因为其为可选项,如果存在长时间回复的AT命令,则执行步骤III,如果不存在,则步骤III可以忽略。同样地,此处仅仅以1个AT命令作为示意,实际系统中可以不限于1个。

进一步地,所述短时间内有回复的AT命令、长时间回复的AT命令的区分标准可以由开发人员预先设定。例如,可以将特定命令设置为长时间回复的AT命令,其余命令均属于短时间内有回复的AT命令。具体而言,可以将特定命令保存在长时间AT命令列表中,系统在分辨待执行AT命令的种类时,查询该长时间AT命令列表,如果待执行AT命令包括在该列表中,则该待执行AT命令属于长时间回复的AT命令,如果不包括在该列表中,则属于短时间内有回复的AT命令。

所述区分标准还可以由系统进行训练,例如,设置时间阈值t,当同一条AT命令的回复时间超过t的次数达到预定限值时,将该条AT命令记为长时间回复的AT命令,否则记为短时间内有回复的AT命令。系统训练的好处在于,能够根据该系统的实际情况,灵活调节AT命令的分类,从而使得AT命令的执行过程能够更好地适应当前平台。

底层驱动层包括三个底层驱动函数:命令发送函数、回复接收函数和回复检测函数。具体执行时,首先,所述命令发送函数清空接收缓存,然后将发送缓存里的内容通过串口发送到GSM模块;其次,在串口中断里调用回复接收函数,将串口回复的字符串存入到接收缓存中;此外,回复检测函数扫描接收缓存来判断是否有回复以及回复内容。

本发明的在单片机中实现GSM模块控制的系统还包括两个错误处理函数:GSM状态机校正函数和模块检测函数。其中,GSM状态机校正函数用于在程序发生错误时,发送相关的AT命令来确认GSM模块当前的状态,并相应设置GSM模块状态机,该GSM状态机校正函数例如可用于执行GSM状态机校正。模块检测函数用于发送相关AT命令来检测模块功能是否正常,可用于执行模块检测。

以上所述,仅为本发明较佳的具体实施方式,但本发明的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本发明揭露的技术范围内,可轻易想到的变化或替换,都应涵盖在本发明的保护范围之内。因此,本发明的保护范围应以所述权利要求的保护范围为准。

当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1