c - STM32F4发现: CAN filter configuration

标签 c arm stm32 can-bus

我正在使用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/

相关文章:

arm - 我的 Go 工具是为错误的架构构建的吗?

execution-time - 处理器指令周期执行时间

ruby - `require' : File not found zlib. 所以

c++ - Pro*C 代码处理解决ORA-01405 : fetched column value is NULL

python - 捕获由 python 子进程创建的进程的运行时错误

c - linux中ioctl函数集的目的是什么?

c - ARM ITE指令在这种情况下有什么用吗

c - 为 FSMC LCD 编写非阻塞代码

stm32 - 在STM32中格式化HAL SPI发送的数据的正确方法是什么?

c - C中指向二维数组的指针