将CAN过滤器设置为特定ID STM32

问题描述

我需要将CAN过滤器设置为ID“ $ 7E8”。但是我需要设置ID高,低和掩码。

    FilterConfig.FilterIdHigh = 0x0000;
    FilterConfig.FilterIdLow = 0x0000;
    FilterConfig.FilterMaskIdHigh = 0x0000;
    FilterConfig.FilterMaskIdLow = 0x0000;

我找到了这篇文章https://schulz-m.github.io/2017/03/23/stm32-can-id-filter/

并尝试了该代码

    FilterConfig.FilterIdHigh = 0x00000008;
    FilterConfig.FilterIdLow = 0x00000008;
    FilterConfig.FilterMaskIdHigh = 0x1FFFFFFF;
    FilterConfig.FilterMaskIdLow = 0x1FFFFFFF;

但是它无法识别通过$ 7E8发送的消息

解决方法

以下对我有用。 id0id1是您要允许的两个消息ID(在ID列表模式下,每个过滤器组始终设置两个)。如果您只想设置一个,我想您可以重复第一个。

CAN_FilterTypeDef filter;
filter.FilterActivation = ENABLE;
filter.FilterFIFOAssignment = CAN_FILTER_FIFO0;

// Allow two IDs per entry
filter.FilterScale = CAN_FILTERSCALE_16BIT;
filter.FilterMode = CAN_FILTERMODE_IDLIST;

// Mask seems to have no effect when using CAN_FILTERMODE_IDLIST
filter.FilterMaskIdHigh = 0x0000;
filter.FilterMaskIdLow  = 0x0000;

filter.FilterIdLow  = id0;
filter.FilterIdHigh = id1;

filter.FilterBank = 0;

if (HAL_CAN_ConfigFilter(hcan,&filter)) {
    Error_Handler();
}