果云GA6单片机STM32、51官方例程——自动收发短信错误代码更正

版权声明:本文为博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/qq_38796548/article/details/88863284

一、问题描述。

    使用果云官方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");
}

最后成功运行结果如下:

 

     

 

展开阅读全文

没有更多推荐了,返回首页