我需要将CAN过滤器设置为ID "$7E8“。但我需要设置ID High,Low和Mask。
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发送的消息
发布于 2020-12-10 06:02:08
下面的方法对我很有效。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();
}
https://stackoverflow.com/questions/64806122
复制相似问题