can通讯接收数据量过大,接收中断进入死循环

2019-08-14 00:57发布

//CAN接收数据
//void CAN1_RX1_IRQHandler(void)
//USB和 CAN是共用一组  IO
void USB_LP_CAN1_RX0_IRQHandler(void)
{
// u8 key = 0 ;
// u8 canbuf[8] = {0} ;
// u8 i = 0 ;
   if(SET == CAN_GetITStatus(CAN1,CAN_IT_FF0))  //满中断
   {
        CAN_ClearITPendingBit(CAN1,CAN_IT_FF0);
printf("aa ");
   }
   else if(SET == CAN_GetITStatus(CAN1,CAN_IT_FOV0))  //溢出中断
   {
        CAN_ClearITPendingBit(CAN1,CAN_IT_FOV0);
printf("bb ");
   }  
   else if(CAN_GetITStatus(CAN1 , CAN_IT_FMP0))  //1个报文存入
   {
CAN_ClearITPendingBit(CAN1 , CAN_IT_FMP0);
// WriteCANRcvCyBuf(CAN_N0_1);
printf("cc ");
}
}

上位机向主板发送数据 5ms一个   发送1000个, 当主板接收到第300-400的数据时  会造成  CAN_IT_FMP0 语句分支内死循环。 串口助手上  显示满屏的 cc

下面是 中断配置
//使能中断
#if CAN_RX0_INT_ENABLE

CAN_ITConfig(CAN1,CAN_IT_FMP0 | CAN_IT_FF0 | CAN_IT_FOV0,ENABLE);    //FIFO0消息挂号中断允许.   
CAN_ITConfig(CAN1,CAN_IT_FMP1 | CAN_IT_FF1 | CAN_IT_FOV1,ENABLE);   

  
  NVIC_InitStructure.NVIC_IRQChannel = USB_LP_CAN1_RX0_IRQn;
  NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1;     // 主优先级为1
  NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;            // 次优先级为0
  NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
  NVIC_Init(&NVIC_InitStructure);


友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。