一、问题描述。
使用果云官方GA6例程代码去跑自动收发短信功能,仍然无法实现相应功能。问题可能出现在:
1.GA6模块供电不足。
2.驱动板STM32芯片的选择。
3.代码错误需要修改。
二、针对问题解决问题。
1.GA6模块供电不足。
GA6模块不能直接由STM32模块进行供电。GA6模块属于GSM模块,在拨打、接听、收发短信的时候需要的电流很大,STM32无法提供所需电流电压,因此需要额外供电给GA6模块。
2.驱动板STM32芯片的选择。
经过验证STM32F103ZET6的性能和处理能力远比STM32F103C8T6的强,模块调试的时候效果比较好,建议优先选择STM32F103ZET6。
3.代码错误需要修改。
需要修改的地方在提取号码这个函数里面void extract_phone_number(void),由于我们收到短信的号码完全格式是+86158********,而不是单是158********,如图1所示:
所以我们提取号码的时候不应该忽略掉+86前面三个字符,所以我们在函数void extract_phone_number(void)修改代码如下,主要是修改了for循环里面判断字符加上了+86的判断。
void extract_phone_number(void)
{
u8 pos;
u8 i;
char AT_CMGS_TEMP[25];
char phone_number[12];
memset(phone_number,'\0',12);
for(i = 0;i < Buf2_Max;i++)
{
if(Uart2_Buf[i] == '\"' && Uart2_Buf[i+1] == ',' && Uart2_Buf[i+2] == '\"'&& Uart2_Buf[i+3] == '+'&& Uart2_Buf[i+4] == '8'&& Uart2_Buf[i+5] == '6') //串口缓存收到","+86的字符
{
pos = i + 6;//串口2收到
break;
}
}
i = 0;
while(Uart2_Buf[pos] != '\"' && i < 12) //pos=3
{
phone_number[i] = Uart2_Buf[pos];//
pos++;
i++;
}
memset(AT_CMGS_TEMP,'\0',25);
strcpy(AT_CMGS_TEMP,"AT+CMGS=\"");//AT+CMGS="
strcat(AT_CMGS_TEMP,phone_number); //AT+CMGS="158*****
strcat(AT_CMGS_TEMP,"\"\r"); //AT+CMGS="158*****"回车
UART1_SendString("提取的号码是:");
UART1_SendString(phone_number);
UART1_SendString("\r\n");
memset(extract_phone_num,'\0',30);
strcpy(extract_phone_num,AT_CMGS_TEMP);//extract_phone_num[30]=AT+CMGS="158*****"回车
//return extract_phone_num;
UART1_SendString(extract_phone_num);
UART1_SendString("\r\n");
}
最后成功运行结果如下: