微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > 基于STM32的无线通信模块设计

基于STM32的无线通信模块设计

时间:11-13 来源:互联网 点击:

3.3 短信命令的定义
本模块自定义了许多短消息命令来设置或者查询模块的参数,具体为:SIP:IP地址设置命令、SPT:端口号设置命令、DID:ID号设置命令、ACON:自动连接命令、PRT:打印命令、LIVE:心跳操作命令、CSQ:信号强度查询命令。这些指令通过短信的方式来实现对模块的操作。
拿SIP来举例,它的实现过程为:首先把短信中的‘=’之前的字符取出来存放在sms_cmd中,然后将sms_cmd与SIP、SIT、DID、ACON、PRT、LIVE、CSQ来比较,如果等于其中一个,则程序跳转到相应的部分来执行相应的操作。这里,strcmp(sms_cmd,“SIP”)==0,程序跳转到SIP部分来执行IP部分的操作。然后,将‘=’之后的字符取出来存放在sms_para中。通过字符串比较函数来判断它是‘?’还是数字。如果是‘?’,则表示该短信命令是一个查询命令,就只需要用输出显示IP号给用户看。如果是数字,则表示该短信命令是一个设置命令,就需要重新设置某些参数值,来改变模块的运行过程。对于SIP,如果‘=’之后是数字,就表示该短信是用户用来设置模块的IP地址的。此时,就要把当前的IP值赋给模块的IP值就可以了。最后输出显示IP地址设置成功,则SPT部分的操作就完成了。

4 无线通信模块数据传输的实现
4.1 数据格式的定义
数据包的具体格式如下:

数据包头已经定义为S_PACKET_HEADER结构类型,link_id为DWORD类型,对于发送,填写目标link_id,对于接收到的数据包,则为源link_id(由服务器自动转换填写),结束标志为0x01,数据Data则根据具体的命令而各不相同。

4.2 登陆、退出的协议过程
后台软件根据指定的服务器地址和端口号发起TCP连接请求,连接成功后开始命令交互。工作过程描述如下:
1)后台软件首先采用CMD_LOGIN命令,登陆到通信服务器,在登陆成功之前,发送其他任何命令服务器都不处理。发送CMD_LOGIN:FORWARD给服务器,携带数据为S_TERMINAL。该命令的目标link_id设为0,表示发送给服务器,而不是给其他终端。
2)服务器在CMD_LOGIN:RESPONSE_OK中将其他在线模块的信息发送过来,从而在客户端应用程序形成在线模块列表。后台若收到CMD_LO GIN:;RESPONSE_FAILED回应,则失败。收到CMD_LOGIN:RESPONSE_OK回应,则成功,携带数据为S_TERMINAL。
3)后台软件定时发送CMD_KEEP_LIVE命令,以维持链路不被网络和服务器终止。每个在线设备必须在一定的时间间隔内向服务器发送CMD_ KEEP_LIVE信息。服务器将对此作检查,若某设备在一定的时间间隔内没有发送CMD_KEEP_LIVE信息,则认为该设备已经“死亡”,服务器将
断开其连接。
4)后台软件可对模块列表中的任意模块进行操控。
5)后台软件退出时,用户设备应首先发送CMD_LOGOFF命令到服务器,告诉服务器“我要退出”,该命令的目标link_id设为0。在发送CMD _LOGOFF:FORWARD给服务器时,不需要携带数据。

图5 登陆,推出的协议过程

4.3 数据传输具体过程
首先要定义建立TCP连接与关闭TCP连接的函数,涉及到的AT指令为AT+CIPSTART和AT+CIPCLOSE。建立TCP连接时,先把AT+CIPSTART指令写到串口3中,然后该指令生效后,会返回一个“CONNECT”,之后只要检测到有返回值“CONNECT”,就表示TCP连接已经建立成功。关闭TCP
连接与建立TCP连接类似,AT+CIPCLOSE指令生效后会返回一个“CLOSE OK”,只要检测到“CLOSE OK”,就表示TCP连接已经关闭。
TCP连接建立好以后,透传模式就已经被开启,此时就可以实现数据的发送与读取。
当用户要发送数据时,就必须根据数据包的结构来发送数据,首先把包头写入到串口3中,如果有数据,则把数据内容和接收对象一并写入到串口3中,这样数据的发送就完成了。
读取数据时,只要有数据过来,就一次一个字节,把数据存放到user_string中,然后i++,再次接收数据。
至于数据读取到什么时候结束,本程序定义了3种结束的情况:1)如果用户定义了数据的长度,就读取到最后一个字节才结束。2)如果用户没有定义数据的长度,就在读取到回车符的时候结束。3)如果遇到既没有已定义的数据包长度,又没有读取到回车符的情况时,就在数据存放的长度超过user_string总长度的四分之三的时候结束,或者在超过100毫秒没有数据发过来的时候结束数据的读取。
4.4 相应的AT命令

5断线重连的处理
5.1 TCP链接的关闭和建立
TCP链接的建立涉及到的AT命令是at+cipstart,该指令有两个返回值,分别是模块的IP地址和端口号。首先将at+cipstart指令返回的当前模块的IP地址和端口号存放到一个buf中,然后将这个buf写入到串口3中,如果之后能够读取到返回值“CONNECT”,就表示TCP链接已经建立好。
TCP链接的关闭涉及到的AT命令是at+cipclose,该指令没有返回值,可以直接将该指令写到串口3中,如果检测到“CLOSE OK”,就表示TCP链接已经被关闭。
5.2 DCD的检测
当TCP建立起来之后,DCD引脚的电压值便由高电平变为低电平,因此DCD引脚的电平状态可以用过来指示TCP的连接情况。在程序中,本文设置时钟在检测DCD引脚的状态值,当该引脚的电平值由高电平变为低电平时,就表示模块模块已经掉线,然后模块就重新开始登陆,直到登陆上为止。
5.3 TCP链接下的短信收发
本文定义了一个全局中断,当有短信或者电话到达模块时,RI引脚的电平便会由高电平变为低电平,此时便会触发全局中断,模块立即转而处理短信收发或者数据传输。

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top