【问题标题】:STM32F4Discovery: CAN filter configurationSTM32F4Discovery:CAN过滤器配置
【发布时间】:2012-07-28 06:39:07
【问题描述】:

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

【问题讨论】:

    标签: c arm stm32 can-bus


    【解决方案1】:

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

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

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

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

    关于 DM0090 的更多信息link

    【讨论】:

      猜你喜欢
      • 2015-12-13
      • 2016-07-13
      • 2015-05-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多