金牌会员
 
- 积分
- 1289
- 金钱
- 1289
- 注册时间
- 2014-6-15
- 在线时间
- 143 小时
|
5金钱
今天在看STM32 CAN的过滤器屏蔽模式,
我的设置如下,
CAN_FilterInitStructure.CAN_FilterNumber=0; //设置过滤器组0,范围为0~13
CAN_FilterInitStructure.CAN_FilterMode=CAN_FilterMode_IdMask; //设置过滤器组0为屏蔽模式
CAN_FilterInitStructure.CAN_FilterScale=CAN_FilterScale_32bit; //设置过滤器组0位宽为32位
#if 1
CAN_FilterInitStructure.CAN_FilterIdHigh=(((u32)0XFF<<3)&0xFFFF0000)>>16;;//0x07<<5; /* 设置标准ID地址,注意要左移5位,因为标准ID 是11位的,而寄存器是16位,所以左移5位来补齐到16位 */
CAN_FilterInitStructure.CAN_FilterIdLow=(((u32)0xFF<<3)|CAN_ID_STD|CAN_RTR_DATA)&0xFFFF;
CAN_FilterInitStructure.CAN_FilterMaskIdHigh=0xFFFF;//0x07<<5; //设置屏蔽规则,同样也要左移5位
CAN_FilterInitStructure.CAN_FilterMaskIdLow=0xFF00;
#endif
#if 0
CAN_FilterInitStructure.CAN_FilterIdHigh=0x00;//0x07<<5; /* 设置标准ID地址,注意要左移5位,因为标准ID 是11位的,而寄存器是16位,所以左移5位来补齐到16位 */
CAN_FilterInitStructure.CAN_FilterIdLow=0x0000;
CAN_FilterInitStructure.CAN_FilterMaskIdHigh=0x00;//0x07<<5; //设置屏蔽规则,同样也要左移5位
CAN_FilterInitStructure.CAN_FilterMaskIdLow=0x0000;
#endif
仿真后看到F0R1寄存器值为:0x000007F8
F0R1寄存器值为 0XFFFFFF00
我认为这样设置以后就能收到ID为0X000000XX的CAN数据包
但是测试发现接收不正常 0X000000XX里很多ID还是接收不到,为啥呀?
我的CAN接收配置肯定是正常的,
|
|