里面还是会有点BUG存在,只是确保功能正常。当i>=数组长度时的数据处理还没写好。有空再处理一下!
void USART1_IRQHandler(void)
{
u8 Res;
static u8 i=0;
static u8 flag=0;
if(USART_GetITStatus(USART1, USART_IT_RXNE) != RESET) //接收中断(接收到的数据必须是0x0d 0x0a结尾)
{
if(flag==1) //下一次接收时能清楚上一次的BUF
{
memset(USART_RX_BUF,0,USART_REC_LEN);
flag=0;
}
if(flag==0)
{
Res=USART_ReceiveData(USART1); //读取接收到的数据
if(i<USART_REC_LEN)
{
USART_RX_BUF=Res;
i++;
}
else
{
printf(&quot;接收溢出,请重新输入&quot;);
}
}
}
else if(USART_GetITStatus(USART1,USART_IT_IDLE ) != RESET)//空闲中断,判断接收什么时候结束使其可以按时接收第二帧数据
{
USART1->ICR |= 1<<4; // 清除中断
i=0;
flag=1;
}
USART_ClearFlag(USART1,USART_FLAG_TC);
} |