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);


友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
5条回答
正点原子
1楼-- · 2019-08-14 02:24
帮顶。。。。
as2807479
2楼-- · 2019-08-14 07:53
我顶!~~~~
robynrao
3楼-- · 2019-08-14 12:39
顶起哦。。。顺便请教一下,为什么我连接收中断都进入不了啊?配置方式应该差不多,是不是有哪里需要特别注意的?
as2807479
4楼-- · 2019-08-14 15:46
回复【4楼】robynrao:
---------------------------------
配置方式,我直接用的示例代码。
快乐柠檬
5楼-- · 2019-08-14 16:27
 精彩回答 2  元偷偷看……

一周热门 更多>