3

我正在使用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);
}
4

1 回答 1

11

过滤器在列表或掩码模式下工作。它们可以是 32 位或 16 位。您可以有 32 个过滤器,但 0-13 分配给 CAN1,而 14+ 分配给 CAN2。

在一个过滤器中有一个 32 位过滤器或两个 16 位过滤器

  • 一个用于 STDID[10:0]、EXTID[17:0]、IDE 和 RTR 位的 32 位滤波器。
  • STDID[10:0]、RTR、IDE 和 EXTID[17:15] 位的两个 16 位滤波器。

这是制作测试词的方法。在掩码模式下,CAN 在 TESTED & MASK == ID 时接受。在列表模式下,当 TESTED == ID 或 MASK == ID 时 CAN 接受。16 位有两个过滤器,32 位有一个过滤器 - 当 ID = IDHigh << 16 | IDLow(和加入掩码的方法相同)。

有关 DM0090链接的更多信息

于 2012-12-11T12:55:33.867 回答