2012-07-30 65 views
2

我正在使用STM32F4Discovery工具包来构建一个简单的CAN接口。我设法配置它,所以我可以传输CAN消息,但是,我坚持接收它们。据我所知,为了接收CAN消息,它必须通过验收过滤器。我想将过滤器设置为接受从ID 0x700到0x7FF的所有(标准,2.0A)消息。我该怎么做呢?STM32F4Discovery:CAN过滤配置

我已阅读参考手册,但我不知道如何实际配置过滤。

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); 
} 

回答

7

过滤器在List或Mask模式下工作。它们可以是32位或16位。你可以有32个过滤器,但是0-13被分配给CAN1,14+被分配给CAN2。

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

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

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

有关DM0090的更多信息link