问题描述
我需要将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发送的消息
解决方法
以下对我有用。 id0
和id1
是您要允许的两个消息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();
}