首先sim800c模块主要是通过AT指令操作发短信和打电话的,一般在串口助手上调试,但是这种方法并不适合我们实际做项目。所以我们通常通过MCU控制串口发送字符串(注意:换行(\r\n)和双引号(\"))来操作sim800c模块。
以下是我在做项目时遇到的问题和解决方法。
for(m=0; m < phone_count; m++) /*phone_count是号码的个数*/
{
for (i = 0;i < 11;i++)
{
b[i][0] = 0;
b[i][1] = 0;
b[i][2] = 3;
b[i][3] = (int)read_iphone[m][i]; /*read_iphone二维数组里存放的多组号码*/
}
u3_printf("AT+CMGF=1\n");//发送短信内容到GSM模块
delay_ms(1000); /*要想连续发送短信,必须在AT指令执行后加上1s左右的延迟*/
u3_printf("AT+CSMP=17,167,2,25\n");
delay_ms(1000);
u3_printf("AT+CSCS=\"UCS2\"\n");
delay_ms(1000);
u3_printf("AT+CMGS=");
u3_printf("\"");
for (i = 0;i < 11;i++)
for(j=0; j<4; j++)
u3_printf("%d", b[i][j]);
u3_printf("\"");
u3_printf("\n");
delay_ms(1000);
u3_printf("7740706B4E86");/*短信内容:着火了*/
delay_ms(1000);
USART_SendData(USART3,0X1A);
memset(b ,0, sizeof(b));
delay_ms(1000);
}
首先,phone_count是flash中存储的号码个数,通过一个for循环连续给手机发送信息。由于发短信需要将手机号码转成unicode编码,但我发现手机号码转成unicode编码时有一个规律,比如,手机号码为12345678900转化成unicode编码就是"00310032003300340035003600370038003900300030"。发现规律了嘛。就是在我们输入的手机号每一位前面加上003!!!所以我将二维数组read_iphone内保存的手机号码转化成unicode编码保存在二维数组b中(就是将手机号码每一位的前面加上003)
最重要的来了!接下来就是发送AT指令,我之前写的每发送一条AT指令后延迟200ms,但是出现了错误,就是模块会隔一个手机号发送一次短信(只会发第1,3,5个手机号的短信)。最后调试发现在每条AT指令后都得延迟1s左右的时间,(注意是每条AT指令后都得加延迟)最终实现的连续发送短信的功能。