基于STM32和SIM900A的无线通信模块设计 |
您所在的位置:网站首页 › gsm模块作用 › 基于STM32和SIM900A的无线通信模块设计 |
设计一个可以实现短信收发与数据无线传输的模块的要求,本文采用了ARM Cortex—M3内核的主流产品STM32作为主控芯片,采用SIMCom公司的SIM900A作为通信芯片。在查阅大量相关文献以及相关芯片的数据手册之后,本文设计了一个远程无线通信模块。该模块在实验室试运行一周后,没有出现掉线的情况,数据收发的速度也很快。该模块具有性能稳定,外形小巧,性价比高等优点。厂方投入使用之后,反应良好。
随着网络和现代通信技术的不断发展,远程无线通信技术经过多年的研究与实际应用,现如今在工业控制领域有了非常重要的地位,并且发挥着越来越大的作用。文中根据厂家的要求,设计的无线通信模块,主要实现了短信与数据收发功能,并且做到了模块的稳定,掉线之后能够自动重连。
1 无线通信模块整体设计方案 模块主要有电源部分、主控部分、通信部分、数据传输部分4个部分组成。通信模块采用SIM900A进行无线通信。主控模块采用STM32作为主控芯片,来控制短信的收发与数据传输的顺利进行。远程终端可以是手机或者上位机的数据中心软件,经过处理之后,储存下来,方便日后的查询。本模块具有低功耗,方便灵活,操作简单并且稳定,掉线之后可以自动连接,运行过程十分稳定,并且成本较低。
更多STM32及无线通信方案目录参考。
2 无线通信模块硬件设计
2.1 功能需求
本文设计的无线通信模块,要求单12V电源输入,模块上电运行后有相应的指示灯来指示模块的运行状态。另外要求模块能够实现短信以及数据透传两大主要功能,在手机发送短信给模块之后,模块能够动作,并给出回应。最后要求在建立TCP链接时,仍然能够收发短信。
图1 无线通信模块结构图 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 电源模块 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为输出端口,模式定义为推拉输出。
图3 主控芯片STM32 2.4 通信芯片 通信芯片采用SIMCom公司的新型紧凑型产品SIM900A,它属于双频GSM/GPRS模块,完全采用SMT封装形式,性能稳定,外观精巧,性价比高,并且能够满足用户的多种需求。在实现断线自动重连功能时,涉及到DCD、RI两个引脚的使用。DCD引脚用来实现模数转换,当模块掉线时,会给DCD引脚一个高电平,当这个电平被DCD引脚检测到之后,模块就是采取相应的动作,来重新连接上线。RI引脚在模块上线之后,就一直保持高电平,在有电话和短信进来的时候,RI管脚就会有一个低电平出现,当RI引脚检测到这个低电平的时候,模块就会采取相应动作,进入到短信或者电话模式。
图4 SIM900A通信芯片 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命令
图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]中,然后i++,再次接收数据。
至于数据读取到什么时候结束,本程序定义了3种结束的情况:1)如果用户定义了数据的长度,就读取到最后一个字节才结束。2)如果用户没有定义数据的长度,就在读取到回车符的时候结束。3)如果遇到既没有已定义的数据包长度,又没有读取到回车符的情况时,就在数据存放的长度超过user_string[i]总长度的四分之三的时候结束,或者在超过100毫秒没有数据发过来的时候结束数据的读取。 4.4 相应的AT命令
|
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |