stm32 can通信不正常,

2019-08-17 05:46发布

       正在实验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); 
}
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
3条回答
sdwhupk
1楼-- · 2019-08-17 07:35
全0代表过滤器不起作用,全是F代表过滤器每位都起作用,ID对应不上就被屏蔽了。
jermy_z
2楼-- · 2019-08-17 10:43
你自己看对应的寄存器是干嘛的!

光看英语字母  你看到2016年也看不出啥来
SHIBO
3楼-- · 2019-08-17 15:01
有点复杂,

一周热门 更多>