初级会员

- 积分
- 59
- 金钱
- 59
- 注册时间
- 2020-4-16
- 在线时间
- 18 小时
|
1金钱
CAN总线从机我设置ID列表模式。但是发现能接受0000地址发送的东西。如何不接收0000地址发送的东西?列表模式本来只接收两个ID,0x19B和0x1BB。
sFilterConfig.FilterNumber = 0; /* 过滤器组0 */
sFilterConfig.FilterMode = CAN_FILTERMODE_IDLIST; /* 工作在列表模式 */
sFilterConfig.FilterScale = CAN_FILTERSCALE_16BIT; /* 过滤器位宽为单个32位。*/
/* 使能报文标示符过滤器按照标示符的内容进行比对过滤,扩展ID不是如下的就抛弃掉,是的话,会存入FIFO0。 */
sFilterConfig.FilterIdHigh = 0x19B << 5; /* 要过滤的ID高位 */
sFilterConfig.FilterIdLow = 0x1BB << 5; /* 要过滤的ID低位 */
sFilterConfig.FilterMaskIdHigh = 0; /* 过滤器高16位每位必须匹配 */
sFilterConfig.FilterMaskIdLow = 0; /* 过滤器低16位每位必须匹配 */
sFilterConfig.FilterFIFOAssignment = 0; /* 过滤器被关联到FIFO 0 */
sFilterConfig.FilterActivation = ENABLE; /* 使能过滤器 */
sFilterConfig.BankNumber = 14;
HAL_CAN_ConfigFilter(&hCAN, &sFilterConfig);
|
最佳答案
查看完整内容[请看2#楼]
CAN_FMR寄存器的 CAN2SB位段 看下配置的对不对 14有没有给到相应的CAN模块
你左移了5bit 但是高16bit为0 所以 ID为0的也在列表中 就能收到ID为0的帧了
16bit的列表模式 CAN_FxR1和CAN_FxR2里一共定义了4个列表, 你这里把另外两个设置成了ID为0
|