正在实验CAN ,通过电脑把数据发送给实验板CAN在液晶上显示出来,电脑是用的是USB-CAN 转换器。
现在实验现象很奇怪,如果把过滤器设置成全F,实验板就接收不到数据,进不了中断.如果设置成全0就能通讯,液晶显示正常。在程序上自己实在找不出什么地方出错了,大家帮忙看看,谢谢。
static void CAN_Filter_Config(void)
{
CAN_FilterInitTypeDef CAN_FilterInitStructure;
CAN_FilterInitStructure.CAN_FilterNumber=0; //过滤器组0
CAN_FilterInitStructure.CAN_FilterMode=CAN_FilterMode_IdMask; //工作在标识符屏蔽位模式
CAN_FilterInitStructure.CAN_FilterScale=CAN_FilterScale_32bit; //过滤器位宽为单个32位。
CAN_FilterInitStructure.CAN_FilterIdHigh=(((u32)0x1314<<3)&0xFFFF0000)>>16; //0x0000;// 要过滤的ID高位
CAN_FilterInitStructure.CAN_FilterIdLow=(((u32)0x1314<<3)|CAN_ID_EXT|CAN_RTR_DATA)&0xFFFF; //0x0000; //要过滤的ID低位
CAN_FilterInitStructure.CAN_FilterMaskIdHigh=0x0000; //0x0000;// 过滤器高16位每位必须匹配
CAN_FilterInitStructure.CAN_FilterMaskIdLow=0x0000; //0x0000;// 过滤器低16位每位必须匹配
CAN_FilterInitStructure.CAN_FilterFIFOAssignment=CAN_Filter_FIFO0 ; //过滤器被关联到FIFO0
CAN_FilterInitStructure.CAN_FilterActivation=ENABLE; //使能过滤器
CAN_FilterInit(&CAN_FilterInitStructure);
CAN_ITConfig(CAN1, CAN_IT_FMP0, ENABLE);
}
void USB_LP_CAN1_RX0_IRQHandler(void)
{
CAN_Receive(CAN1, CAN_FIFO0, &RxMessage);
if((RxMessage.ExtId==0x1314) && (RxMessage.IDE==CAN_ID_EXT)&& (RxMessage.DLC==2))
{
a=RxMessage.Data[0];
a<<=8;
a|=RxMessage.Data[1];
LED3_ON();
Delay_10ms(2000);
LED3_OFF();
Delay_10ms(2000);
}
CAN_ClearITPendingBit(CAN1,CAN_IT_FMP0);
}
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
光看英语字母 你看到2016年也看不出啥来
一周热门 更多>