我正在使用STM32F4Discovery构建简单的套件CAN界面。我设法对其进行配置,以便可以传输 CAN 消息,但是,我无法接收它们。据我所知,要接收 CAN 消息,它必须通过接受过滤器。我想将过滤器设置为接受从 ID 0x700 到 0x7FF 的所有(标准、2.0A)消息。我该怎么做?
我已阅读引用手册,但我不知道如何实际配置过滤。
void CAN_FilterConfiguration(void) {
CAN_FilterInitTypeDef CAN_FilterInitStructure;
/* CAN2 filter configuration */
CAN_FilterInitStructure.CAN_FilterNumber = 1; // filter number = 1 (0<=x<=13)
CAN_FilterInitStructure.CAN_FilterMode = CAN_FilterMode_IdMask;
CAN_FilterInitStructure.CAN_FilterScale = CAN_FilterScale_16bit;
CAN_FilterInitStructure.CAN_FilterIdHigh = 0x0000;
CAN_FilterInitStructure.CAN_FilterIdLow = 0x0000;
CAN_FilterInitStructure.CAN_FilterMaskIdHigh = 0x0000;
CAN_FilterInitStructure.CAN_FilterMaskIdLow = 0x0000;
CAN_FilterInitStructure.CAN_FilterFIFOAssignment = CAN_FIFO0; // FIFO = 0
CAN_FilterInitStructure.CAN_FilterActivation = ENABLE;
CAN_FilterInit(&CAN_FilterInitStructure);
}
最佳答案
过滤器在列表或屏蔽模式下工作。它们可以是 32 位或 16 位。您可以有 32 个过滤器,但 0-13 分配给 CAN1,14+ 分配给 CAN2。
一个过滤器中有一个 32 位过滤器或两个 16 位过滤器
- 一个用于 STDID[10:0]、EXTID[17:0]、IDE 和 RTR 位的 32 位滤波器。
- 两个 16 位滤波器,用于 STDID[10:0]、RTR、IDE 和 EXTID[17:15] 位。
这是制作测试词的方法。在掩码模式下,当 TESTED & MASK == ID 时 CAN 接受。在列表模式下,当 TESTED == ID 或 MASK == ID 时 CAN 接受。 16 位有两个过滤器,32 位有一个过滤器 - 当 ID = IDHigh << 16 | IDLo(以及加入掩码的相同方法)。
有关 DM0090 的更多信息 link
关于c - STM32F4发现: CAN filter configuration,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11724145/