|  | 
 
 发表于 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;
 }
 }
 | 
 |