//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);
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
一周热门 更多>