首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >将CAN Filter设置为特定ID STM32

将CAN Filter设置为特定ID STM32
EN

Stack Overflow用户
提问于 2020-11-12 22:46:39
回答 1查看 116关注 0票数 0

我需要将CAN过滤器设置为ID "$7E8“。但我需要设置ID High,Low和Mask。

代码语言:javascript
运行
复制
    FilterConfig.FilterIdHigh = 0x0000;
    FilterConfig.FilterIdLow = 0x0000;
    FilterConfig.FilterMaskIdHigh = 0x0000;
    FilterConfig.FilterMaskIdLow = 0x0000;

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

并尝试了该代码:

代码语言:javascript
运行
复制
    FilterConfig.FilterIdHigh = 0x00000008;
    FilterConfig.FilterIdLow = 0x00000008;
    FilterConfig.FilterMaskIdHigh = 0x1FFFFFFF;
    FilterConfig.FilterMaskIdLow = 0x1FFFFFFF;

但它不能识别用$7E8发送的消息

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-12-10 06:02:08

下面的方法对我很有效。id0id1是您希望允许的两个消息ID (在ID列表模式下,您始终为每个过滤器组设置两个)。如果你只想设置一个,我假设你可以重复第一个。

代码语言:javascript
运行
复制
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();
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64806122

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档