2012-07-30 4 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

필터는 목록 또는 마스크 모드에서 작동합니다. 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은 TESTED & MASK == ID 일 때 받아들입니다. 목록 모드에서 CAN은 TESTED == ID 또는 MASK == ID 일 때 받아들입니다. 16 비트의 필터와 32 비트의 필터가 두 개 있습니다. ID = ID가 높은 경우 < < 16 | IDLow (그리고 마스크에 가입하는 것과 같은 방법).

자세한 내용은 DM0090 link