filter - 标准外设库中的 STM8A CAN 过滤
问题描述
我正在使用 STM8AF5286UDY 并尝试设置 CAN 接口。对于编程,我使用标准外设库。目前,我的 CAN 接口工作正常。唯一不起作用的是过滤。
我使用扩展 ID,并希望获取从 0x18FEC100 到 0x18FEC999 的所有 ID。我的代码如下所示:
/* CAN filter init */
CAN_FilterNumber = CAN_FilterNumber_0;
CAN_FilterActivation = ENABLE;
CAN_FilterMode = CAN_FilterMode_IdMask;
CAN_FilterScale = CAN_FilterScale_32Bit;
CAN_FilterID1=0x18FEC101;
CAN_FilterID2=0;
CAN_FilterID3=0;
CAN_FilterID4=0;
CAN_FilterIDMask1=0x1FFFF000;
CAN_FilterIDMask2=0;
CAN_FilterIDMask3=0;
CAN_FilterIDMask4=0;
CAN_FilterInit(CAN_FilterNumber, CAN_FilterActivation, CAN_FilterMode,
CAN_FilterScale,CAN_FilterID1, CAN_FilterID2, CAN_FilterID3,
CAN_FilterID4,CAN_FilterIDMask1, CAN_FilterIDMask2,
CAN_FilterIDMask3, CAN_FilterIDMask4);
我将不胜感激任何帮助!谢谢!
编辑:在我的初始代码中,我忘记在寻址时包含 IDE 和 RTR。此外,在库中,每个地址和掩码都是一个 8 位值。因此,我已将代码更改为以下内容:
/* CAN filter init */
CAN_FilterNumber = CAN_FilterNumber_2;
CAN_FilterActivation = ENABLE;
CAN_FilterMode = CAN_FilterMode_IdMask;
CAN_FilterScale = CAN_FilterScale_32Bit;
CAN_FilterID1=0xc7;
CAN_FilterID2=0xed;
CAN_FilterID3=0x02;
CAN_FilterID4=0x02;
CAN_FilterIDMask1=0xFF;
CAN_FilterIDMask2=0xE7;
CAN_FilterIDMask3=0xE0;
CAN_FilterIDMask4=0x00;
CAN_FilterInit(CAN_FilterNumber, CAN_FilterActivation, CAN_FilterMode,
CAN_FilterScale,CAN_FilterID1, CAN_FilterID2, CAN_FilterID3,
CAN_FilterID4,CAN_FilterIDMask1, CAN_FilterIDMask2,
CAN_FilterIDMask3, CAN_FilterIDMask4);
此过滤器适用于前 16 位,因此在使用 0x18FEC101 时,它会过滤 0x18FE。不知何故,它不适用于其他 16 位。
在库中,以下代码用于将地址和掩码写入 32 位滤波器组中:
else if (CAN_FilterScale == CAN_FilterScale_32Bit)
{
CAN->Page.Filter.FR01 = CAN_FilterID1;
CAN->Page.Filter.FR02 = CAN_FilterID2;
CAN->Page.Filter.FR03 = CAN_FilterID3;
CAN->Page.Filter.FR04 = CAN_FilterID4;
CAN->Page.Filter.FR05 = CAN_FilterIDMask1;
CAN->Page.Filter.FR06 = CAN_FilterIDMask2;
CAN->Page.Filter.FR07 = CAN_FilterIDMask3;
CAN->Page.Filter.FR08 = CAN_FilterIDMask4;
}
有什么想法,我的错误可能是什么?谢谢!
解决方案
我发布的代码(编辑版本)现在可以使用。原来我在手动计算地址时遇到了问题。
谢谢@Tagli。
推荐阅读
- javascript - JavaScript 中的控制台日志 JSON.stringify 值
- javascript - Blockly.Workspace 何时创建?
- java - 根据 RxJava 中的下一个元素将 Flowable 拆分为多个组
- java - 选择中的空值在 Records.mapping() 中产生 NullPointerException
- apache-kafka - Kafka:打开日志压缩时,带有空键的消息会发生什么?
- javascript - 在 node-express 应用程序中实现基于角色的访问控制
- python - Python Flask 执行器 | 如何将后台任务的结果传递到当前活动的 html 页面
- ruby-on-rails - 在 Rails 的 Turbo Frame 中查找当前 URL 或“主”控制器
- python - 使用新的或修改另一个行创建一个新的数据框
- laravel - 在laravel中返回redirect()->带有请求而不是参数的路由?