STM32F4Discovery:CAN过滤器配置

jur*_*rij 2 c arm can-bus stm32

我正在使用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);
}
Run Code Online (Sandbox Code Playgroud)

小智 9

过滤器正在列表或掩码模式下工作.它们可以是32位或16位.您可以有32个过滤器,但0-1分配给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.在列表模式下,CAN接受TESTED == ID或MASK == ID.16位有两个滤波器,32位有一个滤波器 - 当ID = IDHigh << 16 |时 IDLow(和连接掩码的方式相同).

有关DM0090 链接的更多信息