如图所示,我要发送3不同ID(报文编号就是前面打√的0,1,2)的报文给单片机,目前我只能实现选中1个发送,单片机正常接受,如果选中2个或全选则前面的会被后面的替代掉(选中0和2,0会被2替代掉),请问程序怎么处理才能将所有报文正常接受过来且能实现接受更多不同ID的报文?使用接受中断的方式,想就用FIFO1的消息挂号中断实现
void CAN1_RX1_IRQHandler(void)
{
CanRxMsg RxMessage;
IWDG_ReloadCounter();//喂狗
CAN_Cnt_1=0;
CAN_Receive(CAN1,CAN_FIFO1,&RxMessage);
if(0 == RxMessage.FMI) YuRe_Data_OK=1; //采用检查过滤器匹配序号的方式检查是哪个ID的报文
else YuRe_Data_OK=0;
if(1 == RxMessage.FMI) Water_Data_OK=1;
else Water_Data_OK=0;
if(2 == RxMessage.FMI) ZhuanSu_Data_OK=1;
else ZhuanSu_Data_OK=0;
if(YuRe_Data_OK)
CAN_YuRe_Data=RxMessage.Data[3];
else
YuRe_CAN_LED_Flag=0;
if(Water_Data_OK)
CAN_Water_Data=RxMessage.Data[0];
else
Task_TempWaterAD();
if(ZhuanSu_Data_OK)
{
ZhuanSu_L = RxMessage.Data[3];
ZhuanSu_H = RxMessage.Data[4];
}
else
HR_Signal = 0;
CAN_ClearITPendingBit(CAN1,CAN_IT_FMP1); // 清除挂起的中断
}
请教各位大神指点,谢谢
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
对,就是收不过来,两个中断都打开是完全没有问题的,早就验证过的,2个FIFO收2个不同ID,互不干扰,这样一搞,单片机所有资源用了才只能同时接受2个报文,即便三级深度用了,一共才6个,实际应用中远不止6个,别人家产品我也是用同样的方式发送的,没有问题的
你好,你的问题解决了没?我不知道你的代码写的如何,我这边并不存在你这个问题!~
你肯定没弄好!~我在中断中delay_ms(5);都没关系的
一周热门 更多>