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

一、问题描述。

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

最后成功运行结果如下:

 

     

 

  • 1
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值