[mw_shl_code=c,true]while(1)
{
if(Key1_Flag == 0)
{
USART_ITConfig(USART2, USART_IT_RXNE, ENABLE);
Read_Message();
}
if(Key1_Flag == 1)
{
USART_ITConfig(USART2, USART_IT_RXNE, DISABLE);
GPIO_SetBits(GPIOB, GPIO_Pin_8);
while(Rev_Num <= 96);
Rev_Num = 0;
Send_GPS_Message();
Key1_Flag = 0;
Delay_Time(0x2FFFFF);
printf("AT+CMGF=1\r\n");
Delay_Time(0x06FFFF);
printf("AT+CMGDA=\"DEL ALL\"\r\n");
Delay_Time(0x06FFFF);
printf("AT+CMGDA=\"DEL ALL\"\r\n");
Delay_Time(0x06FFFF);
printf("AT+CMGDA=\"DEL ALL\"\r\n");
LED1(OFF);
GPIO_ResetBits(GPIOB, GPIO_Pin_8);
}
if(Key2_Flag == 1)
{
GPIO_SetBits(GPIOB, GPIO_Pin_8);
while(Rev_Num <= 96);
Rev_Num = 0;
Gsm_Send_Help();
Key2_Flag = 0;
LED2(OFF);
GPIO_ResetBits(GPIOB, GPIO_Pin_8);
}
}
这是主函数main.c中while(1)死循环的代码,然后下面是PB13外部中断,USART1和USART2中断服务函数
void USART1_IRQHandler(void)
{
GPS_RX_BUF();
}
void USART2_IRQHandler(void)
{
uint8_t ch2;
if(USART_GetITStatus(USART2, USART_IT_RXNE) != RESET)
{
ch2 = USART_ReceiveData(USART2);
if(ch2 == ':')
{
LED1(ON);
Key1_Flag = 1;
}
}
}
void EXTI15_10_IRQHandler(void)
{
if(EXTI_GetITStatus(EXTI_Line13) != RESET)
{
LED2(ON);
Key2_Flag = 1;
}
EXTI_ClearITPendingBit(EXTI_Line13);
}
三个中断组以及优先级分别是:4.0.0(PB.13);4.1.0(USART2);4.2.0(USART1)
现在问题来了,为什么我每次按下PB.13触发中断时,会顺带运行主函数main.c里面的
if(Key1_Flag == 1)
{
USART_ITConfig(USART2, USART_IT_RXNE, DISABLE);
GPIO_SetBits(GPIOB, GPIO_Pin_8);
while(Rev_Num <= 96);
Rev_Num = 0;
Send_GPS_Message();
Key1_Flag = 0;
Delay_Time(0x2FFFFF);
printf("AT+CMGF=1\r\n");
Delay_Time(0x06FFFF);
printf("AT+CMGDA=\"DEL ALL\"\r\n");
Delay_Time(0x06FFFF);
printf("AT+CMGDA=\"DEL ALL\"\r\n");
Delay_Time(0x06FFFF);
printf("AT+CMGDA=\"DEL ALL\"\r\n");
LED1(OFF);
GPIO_ResetBits(GPIOB, GPIO_Pin_8);
}
明明PB.13指示改变了Key2_Flag的值,为什么会这样?我真是百思不得其解,求各位大哥大姐打救一下小弟
[/mw_shl_code]
|