STM32F4 UCOS ii 串口中断接收数据丢失

2019-07-21 01:40发布

目前是这样的情况,中断接收数据,有时候数据少一个字节,或者两个字节,并且出现 的时间不定,有时候收几W个字节丢一个,有时候几K个字节就丢了, 一但数据丢失,系统就不能正常运行(当然STM32F4这边是没有问题可以正常运行,但通讯的另一块板就无法正常运行,) 问一下有什么办法可以解决这个问题? 贴中断代码: uint32_t TotalCnt = 0;
__IO uint8_t USART2_Rcv_Index = 0;
extern __IO uint8_t SendPrintIndex;
extern uint8_t RecendCnt;
void USART2_IRQHandler (void)
{  
 #ifdef OS_TICKS_PER_SEC   //如果时钟节拍数定义了,说明要使用ucosII了.
  OSIntEnter();  
 #endif
  
 if(USART_GetITStatus(USART2,USART_IT_ORE) == SET)
 {
  USART_ReceiveData(USART2);
  SendPrintIndex++;
 }
 else if(USART_GetITStatus(USART2,USART_IT_RXNE) == SET)
 {
  USART2_RX_BUFFER[USART2_Rcv_Index] = USART_ReceiveData(USART2);   //读取串口2接收到的数据
  USART2_Rcv_Index++;
  TotalCnt++;
  if(USART2_RX_BUFFER[USART2_Rcv_Index - 1] == 0x0A)  //data receive over;
  {
    memcpy(cmdbuffer[bufindw],USART2_RX_BUFFER,USART2_Rcv_Index);
    bufindw = (bufindw + 1)%BUFSIZE;
    buflen = (buflen + 1);
    USART2_Rcv_Index = 0;
  }
 }
 
 #ifdef OS_TICKS_PER_SEC   //如果时钟节拍数定义了,说明要使用ucosII了.
  OSIntExit();
 #endif
}
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。