Начал осваивать CAN шину по примерам собрал отправку и прерывание по приему. только не понятно где задается адрес устройства которое слушает шину и принимает свои сообщения?
CAN_FilterInitStructure.CAN_FilterNumber = 1;
CAN_FilterInitStructure.CAN_FilterMode = CAN_FilterMode_IdMask;
CAN_FilterInitStructure.CAN_FilterScale = CAN_FilterScale_32bit;
CAN_FilterInitStructure.CAN_FilterIdHigh = 0x0000;
CAN_FilterInitStructure.CAN_FilterIdLow = 0x0000;
CAN_FilterInitStructure.CAN_FilterMaskIdHigh = 0x0000;
CAN_FilterInitStructure.CAN_FilterMaskIdLow = 0x0000;
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 = 0x0000; - Старшая часть фильтра
CAN_FilterInitStructure.CAN_FilterIdLow = 0x0000; - Младшая часть фильтра
CAN_FilterInitStructure.CAN_FilterMaskIdHigh = 0x0000; - Старшая часть маски
CAN_FilterInitStructure.CAN_FilterMaskIdLow = 0x0000; - Младшая часть маски
CAN_FilterInitStructure.CAN_FilterFIFOAssignment = 0; - Этот параметр не использую не в курсе
CAN_FilterInitStructure.CAN_FilterActivation = ENABLE; - ну и активация фильтра
CAN_FilterInit(&CAN_FilterInitStructure);
Единственное что при настройке фильтров при 11 битном и 29 битном ID Происходит по разному! я разбирался в железе при отладке, сперва тоже не вьехал! пока в документацию не заглянул.
тоесть если передатчик передает id=0x05; а фильтр настроен на
CAN_FilterInitStructure.CAN_FilterIdHigh = 0x0000; - Старшая часть фильтра
CAN_FilterInitStructure.CAN_FilterIdLow = 0x08; - Младшая часть фильтра
он примет данное сообщение?
неочень то и понятно судя по 2 таблице 32bit.
Mapping STIDE[0:10] 0-бит это 0, 1-бит это RTR, 2-IDE. c 3 по 10 бит я задаю уже нужный диапазон адресов?
если мне надо принимать диапазон адресов от 0х10 до 0х15, получается
F_H = ((0xFFFFF000 & (uint32_t)0х015))>>13;
F_L = ((0x0000FFFF & (uint32_t)0х10));