STM32 USART1 中断读写问题

接受一个由0x55开头的数组,这是中断服务程序:
void USART1_IRQHandler(void) //´®¿Ú1ÖжϷþÎñ³ÌÐò
{
u8 USART_RX_counter=0;
if(USART_GetITStatus(USART1, USART_IT_RXNE) != RESET)
{
USART_RX_BUF[USART_RX_counter]=USART_ReceiveData(USART1);//½ÓÊÜÊý¾Ý

if(USART_RX_counter==0&&USART_RX_BUF[0]!=0x55) return;//ÅжÏÖ¡Í·
USART_RX_counter++;
if(USART_RX_counter==11)
{
USART_RX_counter=0;
USART_ClearITPendingBit(USART1,USART_IT_RXNE);
USART_RX_flag=1;
}
}
哪里有问题啊,大神指教~~~

这是一个中断服务程序,每次中断发生时,才会执行,因此函数里面的局部变量USART_RX_counter每次都会被置0,因此这个缓存USART_RX_BUF里面只会有一个数据;应该把变量USART_RX_counter定位为全局变量,才可以。

u8 USART_RX_counter=0;   //全局变量定义

void USART1_IRQHandler(void)  
{
    if(USART_GetITStatus(USART1, USART_IT_RXNE) != RESET)  
    {
USART_RX_BUF[USART_RX_counter]=USART_ReceiveData(USART1);

if(USART_RX_counter==0&&USART_RX_BUF[0]!=0x55) 
    return;
USART_RX_counter++;
if(USART_RX_counter==11) 

         USART_RX_counter=0;
         USART_ClearITPendingBit(USART1,USART_IT_RXNE);
         USART_RX_flag=1;
}
    }
}

温馨提示:答案为网友推荐,仅供参考
相似回答