CAN_ClearITPendingBit(CAN1,CAN_IT_FMP0); //清除FIFO0消息挂号中断标志位 这句话是不是没有用,等于没写
而CAN_FIFORelease(CAN1,CAN_FIFO0);//释放FIFO0 相当于清除FIFO0消息挂号中断标志位
求解!
void USB_LP_CAN1_RX0_IRQHandler(void) //can1 中断服务程序
{
u8 i=0;
CanRxMsg RxMessage;//定义CAN接收消息结构体
NVIC_DisableIRQ(USB_LP_CAN1_RX0_IRQn); //失能CAN1消息接收中断
CAN_ClearITPendingBit(CAN1,CAN_IT_FMP0); //清除FIFO0消息挂号中断标志位
CAN_Receive(CAN1,CAN_FIFO0, &RxMessage);//将FIFO0中接收数据信息存入消息结构体中
if ((RxMessage.IDE == CAN_ID_STD)) //如果消息标识符的类型为标准帧模式
{
for(i=0;i<8;i++)
jieshou=RxMessage.Data;
flag=1; //接收完成标志位置位
//printf(" %d\n",RxMessage.FMI);
}
//CAN1->RF0R|=1<<5;
CAN_FIFORelease(CAN1,CAN_FIFO0);//释放FIFO0
} |