摘要:针对厂方提出的规划一个可以完结短信收发与数据无线传输的模块的要求,本文选用了ARM Cortex—M3内核的主流产品STM32作为主控芯片,选用SIMCom公司的SIM900A作为通讯芯片。在查阅很多相关文献以及相关芯片的数据手册之后,本文规划了一个长途无线通讯模块。该模块在实验室试运转一周后,没有呈现掉线的状况,数据收发的速度也很快。该模块具有功用安稳,外形细巧,性价比高级长处。厂方投入运用之后,反响杰出。
跟着网络和现代通讯技能的不断发展,长途无线通讯技能经过多年的研讨与实践运用,现如今在工业操控范畴有了非常重要的方位,而且发挥着越来越大的作用。文中依据厂家的要求,规划的无线通讯模块,首要完结了短信与数据收发功用,而且做到了模块的安稳,掉线之后可以主动重连。
1 无线通讯模块全体规划方案
模块首要有电源部分、主控部分、通讯部分、数据传输部分4个部分组成。通讯模块选用SIM900A进行无线通讯。主控模块选用STM32作为主控芯片,来操控短信的收发与数据传输的顺利进行。长途终端可所以手机或许上位机的数据中心软件,经过处理之后,贮存下来,便利日后的查询。本模块具有低功耗,便利灵敏,操作简略而且安稳,掉线之后可以主动衔接,运转进程非常安稳,而且本钱较低。
2 无线通讯模块硬件规划
2.1 功用需求
本文规划的无线通讯模块,要求单12V电源输入,模块上电运转后有相应的指示灯来指示模块的运转状况。别的要求模块可以完结短信以及数据透传两大首要功用,在手机发送短信给模块之后,模块可以动作,并给出回应。最终要求在树立TCP链接时,依然可以收发短信。
2.2 电源部分
在主电路中,主控芯片STM32的作业电压为2.0~3.6 V,通讯芯片SIM900A的作业电压为3.1~4.6 V,为使模块各个部分正常作业,有必要对两者进行别离供电,电源供电电路如下:
图中V12外接12 V电源,经过%&&&&&%滤波后输入到LM2576,完结12 V到4 V的转化,R1、R2在线路中起到分压作用,D2灯亮起时,表明模块现已正常供电。LM2576是美国国家半导体公司出产的3 A电流输出降压开关型集成稳压电路,具有完善的维护电路,比较安稳。
2.3 主控芯片
主控模块选用STM32单片机作为微操控器,该芯片能作业于-40~105℃的温度规模,MAX3232芯片用于串行口的电平改换,完结操控器与通讯接口之间的通讯。串口1与电源电平转化芯片Max3223相连,USART1_TX(输出,所以在装备GPIO时,界说该口的方法为推拉输出,USART1_ RX为输入,界说为悬浮输入方法。串口2与SN65LBC184D通讯,完结数据的收发,USART2_RTS、USART2_RX为输入端口,方法界说为悬浮输入方法,USART2_CTS、USART2_TX为输出端口,方法界说为推拉输出。串口3用来操控SIM900A芯片,USART3_RTS、USART3_RX为输入端口,方法界说为悬浮输入,USART3_CTS、USART3_TX为输出端口,方法界说为推拉输出。
2.4 通讯芯片
通讯芯片选用SIMCom公司的新式紧凑型产品SIM900A,它归于双频GSM/GPRS模块,彻底选用SMT封装方法,功用安稳,外观精巧,性价比高,而且可以满意用户的多种需求。在完结断线主动重连功用时,涉及到DCD、RI两个引脚的运用。DCD引脚用来完结模数转化,当模块掉线时,会给DCD引脚一个高电平,当这个电平被DCD引脚检测到之后,模块便是采纳相应的动作,来从头衔接上线。RI引脚在模块上线之后,就一向坚持高电平,在有电话和短信进来的时分,RI管脚就会有一个低电平呈现,当RI引脚检测到这个低电平的时分,模块就会采纳相应动作,进入到短信或许电话方法。
3 无线通讯模块软件规划
3.1 STM32的底层装备
为了完结STM32单片机与SIM900A模块之间的数据通讯,完结短信收发与数据传输两大功用。首要要树立开发渠道,在工程中参加需求用到的库函数以及装备文件,然后装备体系时钟、中止操控器、输入输出的GPIO以及相应的串口。在装备这些参数的时分,首要需求对照原理图进行编写,然后查看芯片用到哪些端口和这些端口的作用,这样才干确保无误。接下来就要对各个部分进行装备,以确保模块可以正常运转。
3.1.1 串口装备
开发环境树立好之后,就可以装备端口参数了。关于本模块,设置USART传输的比特率为9 600 b/s,字长为8 bit,1bit中止位,无查验方法。在对串口1、2、3初始化之后,翻开串口的中止呼应函数:USART_ITConfig(USART1,USART_IT_RXNE,ENABLE)(以串口1为例),使能相应的串口:USART_Cmd(USART1,ENABLE),这样串口的装备就基本完结了。
3.1.2 中止操控器的装备
首要装备优先级分组,设置先占优先级1位,从优先级3位。本模块界说了5个大局中止,别离为:两个RTC大局中止、USART1大局中止、USART2大局中止、USART3大局中止,别离对每一个中止装备优先级,使能串口再初始化即可。需求留意的是,PC15管脚作为EXTI15的外部中止输入管脚,当该管脚的电平为低电平的时分触发,模块进入短信方法,因而给这个中止一个比较高的优先级,所以界说该中止先占优先级1位,从优先级0位。在设置优先级的时分,有必要依据模块的运转状况,挑选最优的中止分组和优先级,才干确保程序运转时,可以快速的呼应中止。
3.2 无线通讯模块短信功用的完结
1)短信收发详细进程
短信功用的完结首要涉及到两个要害部分,一个是AT指令,另一个是串口的读写。AT指令是主控芯片STM32和SIM900A之间的通讯协议,完结对SIM900A的操控。短信的收发首要有两种方法,一种是文本方法,该方法只支撑英文内容,另一种是PDU方法。本模块在完结初始化之后,首要经过USART向SIM900A发送“AT+回车”指令来查看AT指令是否正常作业,假如回来OK,则表明可以进行接下来的短信功用。
SIM900A的短信功用首要分为两个部分,榜首:读取短消息。读取短消息的设置指令为:AT+CMGR,该指令收效后有两个回来值:index和mode,index便是接纳到的短信的编号,咱们将接纳到的index内容放在一个长度为30的buf中,再将buf写入到串口3中,然后再读取串口3中的内容,这样,短信的编号就获取完毕。获取了短信的编号之后,就能去获取短信的详细内容,而短信的内容则寄存在alpha中,它处于呼应的第三个方位,经过get_fw(at_string,phnum,19,2)可将短信的内容取出来,这样短信的内容就获取到了。第二:发送短消息。发送短消息的设置指令为:AT+CMGS,首要将发送短信的电话号码存入到一个buf中,将这个buf写入到串口3中,以此获取手机号码。而短信在发送的时分,短信内容之前会带一个“>”号,在程序规划时,只需检测到“>”号时,后边的内容也便是短信发送的内容,最终将短信的内容写到串口3即可。
2)相应的AT指令
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给服务器时,不需求带着数据。
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]中,然后i++,再次接纳数据。
至于数据读取到什么时分完毕,本程序界说了3种完毕的状况:1)假如用户界说了数据的长度,就读取到最终一个字节才完毕。2)假如用户没有界说数据的长度,就在读取到回车符的时分完毕。3)假如遇到既没有已界说的数据包长度,又没有读取到回车符的状况时,就在数据寄存的长度超越user_string[i]总长度的四分之三的时分完毕,或许在超越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引脚的电平便会由高电平变为低电平,此刻便会触发大局中止,模块当即转而处理短信收发或许数据传输。
6 测验作用
本模块在规划完结之后,在实验室安稳运转了2周时刻,没有呈现什么问题。然后又进行了特殊状况的测验,在模块断电后康复供电,数据中心断电后从头上电的状况下,都可以从头衔接上线,而且可以持续安稳运转。随后模块又被送到厂方运用,在被运用了3周之后,厂方反响模块运转状况杰出,没有掉线的状况。
7 定论
本文规划的无线通讯模块,是使用STM32来操控SIM900A芯片,来完结短消息的收发与数据的无线传输。本规划完结了无线通讯的硬件部分和软件部分的规划与完结。在屡次运转实验时,本模块没有呈现掉线以及发热等问题,非常安稳。本次规划本钱较低,运转安稳牢靠,运用规模非常广泛,使用SIM900A,降低了模块的本钱,使其愈加具有商业价值。
- STM32单片机中文官网
- STM32单片机官方开发工具
- STM32单片机参阅规划