Перейти к содержанию
    

STM32 CAN Filter ID = 0

Использую STM32 f 103

ExtCAN с 29bit ID

Настраиваю фильтры приема двух ID

  // CAN filter init
  CAN_FilterInitStructure.CAN_FilterNumber         = 0;
  CAN_FilterInitStructure.CAN_FilterMode           = CAN_FilterMode_IdMask;
  CAN_FilterInitStructure.CAN_FilterScale          = CAN_FilterScale_32bit;
  CAN_FilterInitStructure.CAN_FilterIdHigh         = ( (0x02AE << 3) >> 16); 
  CAN_FilterInitStructure.CAN_FilterIdLow          = ( (0x02AE << 3) & 0xFFFF); 
  CAN_FilterInitStructure.CAN_FilterMaskIdHigh     = 0xFFFF;
  CAN_FilterInitStructure.CAN_FilterMaskIdLow      = 0xFFF8;
  CAN_FilterInitStructure.CAN_FilterFIFOAssignment = 0;
  CAN_FilterInitStructure.CAN_FilterActivation     = ENABLE;
  CAN_FilterInit(&CAN_FilterInitStructure);

  CAN_FilterInitStructure.CAN_FilterNumber         = 1;
  CAN_FilterInitStructure.CAN_FilterMode           = CAN_FilterMode_IdMask;
  CAN_FilterInitStructure.CAN_FilterScale          = CAN_FilterScale_32bit;
  CAN_FilterInitStructure.CAN_FilterIdHigh         = ( (0x1FFEE << 3) >> 16); 
  CAN_FilterInitStructure.CAN_FilterIdLow          = ( (0x1FFEE << 3) & 0xFFFF);
  CAN_FilterInitStructure.CAN_FilterMaskIdHigh     = 0xFFFF;
  CAN_FilterInitStructure.CAN_FilterMaskIdLow      = 0xFFF8;
  CAN_FilterInitStructure.CAN_FilterFIFOAssignment = 0;
  CAN_FilterInitStructure.CAN_FilterActivation     = ENABLE;
  CAN_FilterInit(&CAN_FilterInitStructure);

Но почемуто на приеме получаю пакеты с ID = 0. 

Это так задумано? Какие еще "левые" пакеты я могу так получить?

 

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Достаточно почитать букварь на контроллер, конкретно: reference manual, раздел про CAN контроллер, подраздел настройки фильтров. Там описано как работает фильтр в разных режимах, причём с примерами.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

2 часа назад, mitya1698 сказал:

Это так задумано? Какие еще "левые" пакеты я могу так получить?

Вы же настраиваете фильтр в режиме маски - т.е. под критерий "подходит" будут ловиться все кадры, у которых заданные биты по маске подходят, остальные не смотрятся. Поэтому да, ловить так можно много чего лишнего. Посмотрите на режим списка фильтров: там как раз ситуация наоборот - Вы задаете конкретный список идентификаторов, которые можно принимать.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

ыгы, спасибо, значит надо так:

// CAN filter init
  CAN_FilterInitStructure.CAN_FilterNumber         = 0;
  CAN_FilterInitStructure.CAN_FilterMode           = CAN_FilterMode_IdList;
  CAN_FilterInitStructure.CAN_FilterScale          = CAN_FilterScale_32bit;
  CAN_FilterInitStructure.CAN_FilterIdHigh         = ( (0x02AE << 3) >> 16); 
  CAN_FilterInitStructure.CAN_FilterIdLow          = ( (0x02AE << 3) & 0xFFFF) | CAN_ID_EXT; 
  CAN_FilterInitStructure.CAN_FilterMaskIdHigh     = ( (0x1FFEE << 3) >> 16);
  CAN_FilterInitStructure.CAN_FilterMaskIdLow      = ( (0x1FFEE << 3) & 0xFFFF) | CAN_ID_EXT;
  CAN_FilterInitStructure.CAN_FilterFIFOAssignment = 0;
  CAN_FilterInitStructure.CAN_FilterActivation     = ENABLE;
  CAN_FilterInit(&CAN_FilterInitStructure);

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

В 09.03.2024 в 21:33, Arlleex сказал:

Вы же настраиваете фильтр в режиме маски - т.е. под критерий "подходит" будут ловиться все кадры, у которых заданные биты по маске подходят

Кстати это не объясняет, почему 0 кадр ловится, у меня маска же все биты кроме служебных трех была

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

20 minutes ago, mitya1698 said:

Кстати это не объясняет, почему 0 кадр ловится, у меня маска же все биты кроме служебных трех была

CAN ID #000 такой же как и любой другой CAN ID, только с максимальным приоритетом арбитража. В режиме 11 бит можно использовать от 000 до 7FF, вопрос только лишь в приоритете.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

59 минут назад, mitya1698 сказал:

Кстати это не объясняет, почему 0 кадр ловится, у меня маска же все биты кроме служебных трех была

Может, еще, Start Bank в регистре FMR не правильно задан, и фильтр для нужного CAN вовсе не настраивается щас и принимает вообще все?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Нет, принимает в целом как ожидается, и долгое время всё было нормально, без неудобств

Код выше, пока не появились в сети STD пакеты с ID=0,  появились непонятки, и стал ковырять чтоже там понаписали.

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...