|
发表于 2020-12-5 19:41:58
|
显示全部楼层
你可以参考这个我写的串口中断接收函数,返回的数据在DWIN_Data数组里,主函数判断wrong的值,为0时再对数据进行处理,NUM为自己设定的数组长度,差不多就这个逻辑吧。
void USART2_IRQHandler(void)
{
uint8_t Clear =Clear;
int i,j;
if(USART_GetITStatus(USART2, USART_IT_RXNE) != RESET) //判断读寄存器是否非空
{
USART_ClearITPendingBit(USART2, USART_IT_RXNE); //清除中断标志
Raw_Data[counter++] = USART_ReceiveData(USART2);
}
else if(USART_GetITStatus(USART2,USART_IT_IDLE) != RESET)
{
Clear = USART2->SR;
Clear = USART2->DR; //清除IDLE标志
for(i=0;i<counter;i++)
{
if((Raw_Data==0x5A)&&(Raw_Data[i+1] ==0xA5))//5a a5 05 82/83
{
if(Raw_Data[2]<NUM)//NUM为定义的数组长度
{
for(j=0;j<(NUM-Raw_Data[2]);j++)
DWIN_Data[Raw_Data[2]+j]=0;
for(j=0;j<Raw_Data[2];j++)
{
DWIN_Data[j]=Raw_Data[i+j+3];
}
wrong=0;
}
else wrong=1;
}
counter=0;
}
} |
|