我用的是STM32F103VET6 + SIM900A的GPRS板子,自己写点程序。目的是只有我自己的手机号给板子打电话才能接听,否则则挂断。 代码大致如下: 经过测试发现,只有第一次拨号,无论是不是本机号码,printf("call is coming, phone is %s\r\n", call_info.source_phone);都可以正确打印来电号码。 但第二次再拨打,绝对是保存不了,内容是空。 我为了找问题,再以下四个注释的地方,加入了printf("1,2,3,4\r\n");.......结果就正确了,每次电话号码都可以显示。但一去,就又不行了。这有影响吗?
/**************************电话部分*************************************/
if(strstr((const char*)USART2_RX_BUF, "+CLIP:")) //有电话呼入
{
len = 0;
memset(call_info.source_phone, 0, 14);
for(i = 0; i < USART2_Recv_Len; i++)
{
printf(“1\r\n”);
if((start_flag != 1) && (USART2_RX_BUF[i] == 0x22)) // " 是 0x22
{
printf(“2\r\n”);
start_flag = 1; //第一次收到"作为开始标志
continue;
}
if(start_flag == 1)
{
if(USART2_RX_BUF[i] != 0x22)
{
printf(“3\r\n”);
call_info.source_phone[len++] = USART2_RX_BUF[i];
}
else
{
printf(“4\r\n”);
start_flag = 0;
break;
}
}
}
printf("call is coming, phone is %s\r\n", call_info.source_phone);
if(strcmp(call_info.source_phone, "1XXXXXXXX") == 0) //电话号码滤去
{
if(gprs_send_cmd("ATA\r\n","OK",1500)) //接听来电
{
printf("answer phone call success\r\n");
}
else
{
printf("answer phone call failed\r\n");
}
}
else
{
if(gprs_send_cmd("ATH\r\n","OK",1500)) //拒接来电
{
printf("refuse phone call success\r\n");
}
else
{
printf("refuse phone call failed\r\n");
}
}
memset(USART2_RX_BUF, 0, USART2_MAX_RECV_LEN);
USART2_Recv_Len = 0;
Rec_Over_Flag2 = 0;
start_flag = 0;
}
|