ps:最近做的一个小项目中用上了GMS短信模块,型号是SIM900A,用来发送短信,因为习惯用HAL库(因为好用、方便),加上在做项目前看了一套便准库中的SIM900A发送短信的代码,感觉挺容易的,无非就是串口发送AT指令,但是后面将其移植到HAL库项目中后就出现各种问题无法发送短信,后面单独开了一个测试工程,最后也是成功了,∴记录一下以免忘记。
一、SIM900A
SIM900A是一款基于GMS/GPRS网络的通信模块,支持语音通话、短信等功能。
1、AT功能测试
将SIM900A模块与CH340正确连接(供电使用5V,SIM900A的Rx与Tx也选择5V的那一排),且插入电话卡(一般都用移动,但是也看到了其他文章说别的运营商的卡也能用,但是博主只有移动卡,还没试过其他的)随后接上电脑的串口助手进行AT指令的操作
(1)AT
检测模块是否正常,成功返回OK (记得勾选发送新行)
(2)AT+CMGF=1
选择消息格式(0:PDU , 1:文本)成功返回OK (记得勾选发送新行)
(3)AT+CSCS="UCS2"
选择字库集,成功返回OK(记得勾选发送新行)
(4)AT+CSCA?
保存SMS设置,成功返回OK(记得勾选发送新行)
(5)AT+CSMP=17,167,0,25
设置消息文本模式,结尾的 ” 25 “可换成其他的,具体的要看手册,成功返回OK(记得勾选发送新行)
(6)AT+CMGS="003x003x003x003x003x003x003x003x003x003x003x"
引号里面的是接收方的电话号码,要转为unicode码,有专门的转码工具,链接放在文章末尾,也可以直接用上面的,只要将号码挨个依次填入 ’ 3 ‘ 后面的 ’ x ‘ 里即可。
成功返回 >**************************************,一堆东西。(记得勾选发送新行)
(7)xxxxxxxxxxxxxxxxxxx
要发生的短信内容,也需要转为unicode码。成功后返回 > ,(然后不要勾选发送新行,顺便把发送16进制的勾选上)
(8)1A
发送十六进制的结束符标志,成功返回OK。短信即可发送成功。
在操作过程中,会有很多情况导致发送完AT指令后返回ERROR,这个时候可以查看一下SIM900A模块的状态指示灯是否正常(电源灯常亮,信号指示灯亮1秒灭3秒,即是正常的)。其他情况均为无法发送短信,具体解决方法可可根据操作手册测试,或者简单粗暴一些,直接重新上电(有时候可以)。
2、使用STM32使用AT指令操作SIM900A发送短信
2.1、硬件连接
为了方便查看STM32发送的指令是否被成功接收,可以将STM32单片机的Tx引脚连接SIM900A模块的Rx引脚,SIM900A的Tx引脚连接CH340的Rx引脚,CH340的USB端连接电脑,并打开串口调试助手,以便查看返回。
2.2、STM32CubeMX配置
ps:本文章使用的是STM32F103C8T6芯片。基础配置就不演示了,正常这些都应该要会的
使用的是串口3,串口波特率注意是115200,随后开启串口中断,最后生成工程。