[mw_shl_code=c,true]我通过串口调试助手发送5A A5 04 80 03 00 03,但是只是LED1闪了一下,蜂鸣器一直亮着,我想问题是在下面的中断里,但不知道错在哪里?[/mw_shl_code]
[mw_shl_code=c,true]void USART2_IRQHandler(void)
{
u8 res;
if(USART_GetITStatus(USART2, USART_IT_RXNE) != RESET)//??????????
{
res=USART_ReceiveData(USART2); //????????????????×???????
if(USART2_RX_STA<USART2_MAX_RECV_LEN) //????200×?????????????????
{
TIM_SetCounter(TIM4,0);//?????÷????
TIM4_Set(1); //?????¨?±?÷4??????
if(RXAAOK)
{
USART2_RX_BUF[RXP]=res;
RXP++; //????????????1
LED1 = !LED1;
USART2_RX_STA++;
}
if(!RXAAOK&&(res==0x5A)) //???????·5a
{
RXAAOK=1;
RXP=0;
BEEP = !BEEP;
USART2_RX_STA++;
}
}
else
{
USART2_RX_STA|=1<<15; //????±ê???????ê??
}
}
} [/mw_shl_code]
主函数如下
int main(void)
{
u8 change_picture_3[7] = {0x5A,0XA5,0X04,0X80,0X03,0X00,0X03};
u8 t=0;
u8 len;
u8 flag_start=0;
delay_init(); //???±??????????
NVIC_Configuration();
USART2_Init(9600); //???????®??2??:9600
Led_Init(); //LED??????????
BEEP_Init();
for(t=0;t<sizeof(change_picture_3);t++)//sizeof(change_picture_3)=7
{
USART_SendData(USART2, change_picture_3[t]);
while(USART_GetFlagStatus(USART2,USART_FLAG_TC)!=SET);//????·????á??
}
while(1)
{
if(USART2_RX_STA&0x8000)
{
flag_start = 0;
len=USART2_RX_STA&0x3fff;//?????????????????????¤??
if(USART2_RX_BUF[0]==0x5A)
{
flag_start = 1; LED0=!LED0;
BEEP = !BEEP;
len = len-2;
if(len == USART2_RX_BUF[2]+1) //len = 5
for(t=0;t<len;t++)
{
USART_SendData(USART2, USART2_RX_BUF[t+2]);//?ò?®??2·???????
while(USART_GetFlagStatus(USART2,USART_FLAG_TC)!=SET);//????·????á??
}
}
USART2_RX_STA=0;
}
}
}
|