最近自己做了个关于gsm短信报警的毕设,调了两天终于通了,困惑期间查了很多网上的资料,发现网上也有很多朋友遇到了与我相似的问题,但都没有得到很好的解决,而且原子哥的例程是寄存器版的,很多初学者看不懂。所以我就拿出了自己改写的库函数版本讲解一下应该注意的问题。也算作回馈大家。代码如下
[mw_shl_code=c,true] USART2_printf(USART2,"AT+CSCS=\"GSM\"\r");
delay_ms(1000);
USART2_printf(USART2,"AT+CMGF=1\r"); //设置短信模式中文/英文
delay_ms(1000);
USART2_printf(USART2,"AT+CMGS=\"+8613009634851\"\r"); //目标好码
delay_ms(1000);
USART2_printf(USART2,"HELLO\r");
delay_ms(1000);
USART_SendData(USART2,0x1a);[/mw_shl_code]
[mw_shl_code=c,true]大家的问题都是能打电话但发短信不行,因为拨号简单,只有一条指令。以上程序中有几点需要注意[/mw_shl_code]
[mw_shl_code=c,true]1.目标号码加不加‘+86’?这个不影响,加不加都能发,因为都是中国的号码。[/mw_shl_code]
[mw_shl_code=c,true]2.电话号码部分和‘GSM’这两部分的符号多了\“******\”这个,不同于其他。要注意。[/mw_shl_code]
[mw_shl_code=c,true]3.每条指令后面都有‘\r’,有的版本还加了‘\n’,其实\n有没有不影响结果。[/mw_shl_code]
[mw_shl_code=c,true]4.延时要合理,不要太短,特别是发完号码后的延时要足够,才能发送短信内容。原理就不讲了,很简单。[/mw_shl_code]
[mw_shl_code=c,true]5.最后一条,也是最重要的。最后要发送‘0x1a’作为结束符号。不知道大家发现没有,我的最后的串口发送函数与前面的不一样,因为前面的函数要求发送的是字符串,要加双引号,这样发的“0x1a”不对,必须是作为单个字符发送,不加双引号。[/mw_shl_code]
|