mitya1698 18 9 марта Опубликовано 9 марта · Жалоба Использую 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. Это так задумано? Какие еще "левые" пакеты я могу так получить? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
HardWareMan 2 9 марта Опубликовано 9 марта · Жалоба Достаточно почитать букварь на контроллер, конкретно: reference manual, раздел про CAN контроллер, подраздел настройки фильтров. Там описано как работает фильтр в разных режимах, причём с примерами. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Arlleex 180 9 марта Опубликовано 9 марта · Жалоба 2 часа назад, mitya1698 сказал: Это так задумано? Какие еще "левые" пакеты я могу так получить? Вы же настраиваете фильтр в режиме маски - т.е. под критерий "подходит" будут ловиться все кадры, у которых заданные биты по маске подходят, остальные не смотрятся. Поэтому да, ловить так можно много чего лишнего. Посмотрите на режим списка фильтров: там как раз ситуация наоборот - Вы задаете конкретный список идентификаторов, которые можно принимать. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
mitya1698 18 9 марта Опубликовано 9 марта · Жалоба ыгы, спасибо, значит надо так: // 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); Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
mitya1698 18 9 марта Опубликовано 9 марта · Жалоба В 09.03.2024 в 21:33, Arlleex сказал: Вы же настраиваете фильтр в режиме маски - т.е. под критерий "подходит" будут ловиться все кадры, у которых заданные биты по маске подходят Кстати это не объясняет, почему 0 кадр ловится, у меня маска же все биты кроме служебных трех была Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
HardWareMan 2 9 марта Опубликовано 9 марта · Жалоба 20 minutes ago, mitya1698 said: Кстати это не объясняет, почему 0 кадр ловится, у меня маска же все биты кроме служебных трех была CAN ID #000 такой же как и любой другой CAN ID, только с максимальным приоритетом арбитража. В режиме 11 бит можно использовать от 000 до 7FF, вопрос только лишь в приоритете. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Arlleex 180 9 марта Опубликовано 9 марта · Жалоба 59 минут назад, mitya1698 сказал: Кстати это не объясняет, почему 0 кадр ловится, у меня маска же все биты кроме служебных трех была Может, еще, Start Bank в регистре FMR не правильно задан, и фильтр для нужного CAN вовсе не настраивается щас и принимает вообще все? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
mitya1698 18 10 марта Опубликовано 10 марта · Жалоба Нет, принимает в целом как ожидается, и долгое время всё было нормально, без неудобств Код выше, пока не появились в сети STD пакеты с ID=0, появились непонятки, и стал ковырять чтоже там понаписали. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться