ВходНаше всё Теги codebook 无线电组件 Поиск Опросы Закон Среда
17 апреля
1158808 Топик полностью
Argon (26.12.2021 15:50, просмотров: 229) ответил Costic на Попробуйте вместо нулей, вот так: sFilterConfig.FilterIdHigh = 0x000F;
Случилось то, чего боялся - маппинг нужен, т.е. сдвиги. 

Вот так все работает как надо:


uint32_t id = 0x00000000;

uint32_t mask = 0x1FFFFFF0;

sFilterConfig.FilterBank = 0;

sFilterConfig.FilterMode = CAN_FILTERMODE_IDMASK;

sFilterConfig.FilterScale = CAN_FILTERSCALE_32BIT;

sFilterConfig.FilterIdHigh = (uint16_t)(id >> 13);

sFilterConfig.FilterIdLow = (uint16_t)(id << 3) | CAN_ID_EXT;

sFilterConfig.FilterMaskIdHigh = (uint16_t)(mask >> 13);

sFilterConfig.FilterMaskIdLow = (uint16_t)(mask << 3) | CAN_ID_EXT;

sFilterConfig.FilterFIFOAssignment = CAN_RX_FIFO0;

sFilterConfig.FilterActivation = ENABLE;

sFilterConfig.SlaveStartFilterBank = 14;



А зачем нужны эти сдвиги и почему HAL это не делает вместо меня - пока не понял.

UPD: уже понял