CAN: настройка фильтров FIFO процессора Cortex-M3


Настройка фильтров FIFO CAN-контроллера можно выполнить с помощью функции стандартной библиотеки (stm32f10x_can.h):

void  CAN_FilterInit (CAN_FilterInitTypeDef*  CAN_FilterInitStruct);

поддерживает только интерфейс CAN1;


  CAN_FilterInitStruct - структура с параметрами инициализации фильтров CAN-контроллера:

//-  stm32f10x_can.h

typedef struct
{
  uint16_t  CAN_FilterIdHigh;           /* Старшие разряды ID в 32-битном режиме или первый ID в 16-битном режиме */
  uint16_t  CAN_FilterIdLow;            /* Младшие разряды ID в 32-битном режиме или второй ID в 16-битном режиме */
  uint16_t  CAN_FilterMaskIdHigh;       /* Старшие разряды Mask/ID в 32-битном режиме или первый Mask/ID в 16-битном режиме */
  uint16_t  CAN_FilterMaskIdLow;        /* Младшие разряды Mask/ID в 32-битном режиме или второй Mask/ID в 16-битном режиме */
  uint16_t  CAN_FilterFIFOAssignment;   /* Назначает FIFO (0 или 1) для фильтра */
  uint8_t   CAN_FilterNumber;           /* Номер фильтра от 0 до 13 */
  uint8_t   CAN_FilterMode;             /* Режим работы фильтра (IdMask или IdList) */
  uint8_t   CAN_FilterScale;            /* Разрядность фильтра 32- или 16-бит */
  FunctionalState  CAN_FilterActivation;   /*  Устанавливает активность фильтра: ENABLE или DISABLE */
} CAN_FilterInitTypeDef;

CAN_FilterFIFOAssignment - номер FIFO, назначенный фильтру CAN-контроллера:

#define CAN_Filter_FIFO0    ((uint8_t)0x00)   /* Filter FIFO 0 assignment for filter x */
#define CAN_Filter_FIFO1    ((uint8_t)0x01)   /* Filter FIFO 1 assignment for filter x */

CAN_FilterMode - режим работы фильтра CAN-контроллера:

#define CAN_FilterMode_IdMask   ((uint8_t)0x00)   /* identifier/mask mode */
#define CAN_FilterMode_IdList   ((uint8_t)0x01)   /* identifier list mode */

CAN_FilterScale - разрядность фильтра CAN-контроллера:

#define CAN_FilterScale_16bit   ((uint8_t)0x00)   /* Two 16-bit filters */
#define CAN_FilterScale_32bit   ((uint8_t)0x01)   /* One 32-bit filter */