打印
[STM32F1]

stm32 can 清除接收中断标志

[复制链接]
5043|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

粉丝