你可用一個標志(flag)變量來檢測,我引用了正點原子一段程序,你看看
u8 HC05_Init(void)
{
u8 retry=10,t;
u8 temp=1;
GPIO_InitTypeDef GPIO_InitStructure;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE); //ê1ÄüPORTA
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_15; // ¶Ë¿úÅäÖÃ
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU; //éÏà-êäèë
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; //IO¿úËù¶èÎa50MHz
GPIO_Init(GPIOA, &GPIO_InitStructure); //¸ù¾Yé趨2Îêy3õê¼»ˉA15
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_4; // ¶Ë¿úÅäÖÃ
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; //íÆíìêä3ö
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; //IO¿úËù¶èÎa50MHz
GPIO_Init(GPIOA, &GPIO_InitStructure); //¸ù¾Yé趨2Îêy3õê¼»ˉGPIOA4
GPIO_SetBits(GPIOA,GPIO_Pin_4);
GPIO_PinRemapConfig(GPIO_Remap_SWJ_JTAGDisable,ENABLE);
HC05_KEY=1;
HC05_LED=1;
usart3_init(9600); //3õê¼»ˉ′®¿ú2Îa:9600,2¨ìØÂê.
while(retry--)
{
HC05_KEY=1; //KEYÖøß,½øèëATÄ£ê½
delay_ms(10);
u3_printf("AT\r\n"); //·¢ËíAT2aêÔÖ¸áî
HC05_KEY=0; //KEYà-μí,íË3öATÄ£ê½
for(t=0;t<10;t++) //×î3¤μè′y50ms,à′½óêÕHC05Ä£¿éμÄ»Øó|
{
if(USART3_RX_STA&0X8000)break;
delay_ms(5);
}
if(USART3_RX_STA&0X8000) //½óêÕμ½ò»′Îêy¾YáË
{
temp=USART3_RX_STA&0X7FFF; //μÃμ½êy¾Y3¤¶è
USART3_RX_STA=0;
if(temp==4&&USART3_RX_BUF[0]=='O'&&USART3_RX_BUF[1]=='K')
{
temp=0;//½óêÕμ½OKÏìó|
break;
}
}
}
if(retry==0)temp=1; //¼ì2a꧰ü
return temp;
} |