[STM32F1] stm32 can 清除接收中断标志

[复制链接]
5727|1
 楼主| liguang02 发表于 2014-10-8 15:54 | 显示全部楼层 |阅读模式
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

}
airwill 发表于 2014-10-9 06:45 | 显示全部楼层
当然是有用的。
因为 2个接收FIFO 有3级深度。可以容纳3个消息,释放 FIFO0 只清掉 3个消息里的最早的那 1 个。

您需要登录后才可以回帖 登录 | 注册

本版积分规则

56

主题

307

帖子

2

粉丝
快速回复 在线客服 返回列表 返回顶部