Jump to content
    

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. 

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

 

 

Share this post


Link to post
Share on other sites

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

Share this post


Link to post
Share on other sites

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

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

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

Share this post


Link to post
Share on other sites

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

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

 

Share this post


Link to post
Share on other sites

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

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

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

Share this post


Link to post
Share on other sites

20 minutes ago, mitya1698 said:

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

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

Share this post


Link to post
Share on other sites

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

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

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

Share this post


Link to post
Share on other sites

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

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

 

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Create New...