CAN шина на STM32F103
CAN шина на STM32F103
Начал осваивать 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);
- Реклама
Re: CAN шина на STM32F103
Что значит адрес устройства которое слушает шину? В CAN шине все устройства слушают шину!
Re: CAN шина на STM32F103
и получается что у всех контроллеров будут возникать прерывания по приему при каждой посылке в шине?
- ARV
- Ум, честь и совесть. И скромность.
- Сообщения: 18561
- Зарегистрирован: Чт дек 28, 2006 08:19:56
- Откуда: Новочеркасск
- Контактная информация:
Re: CAN шина на STM32F103
нет, только при приеме сообщений, прошедших фильтр
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
Re: CAN шина на STM32F103
Естественно! не будет его лишь у того который передал пакет, и у тех у которых активирован фильтр. А принимать будут все по любому.
- Реклама
Re: CAN шина на STM32F103
а можите описать каждую строчку в настройке фильтра в 1 посте что за что отвечает
Re: CAN шина на STM32F103
А что тут описывать это все в даташите изложено, настройка маски и фильтра! сами имена вроде за себя говорят!
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 Происходит по разному! я разбирался в железе при отладке, сперва тоже не вьехал! пока в документацию не заглянул.
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 Происходит по разному! я разбирался в железе при отладке, сперва тоже не вьехал! пока в документацию не заглянул.
Re: CAN шина на STM32F103
тоесть если передатчик передает id=0x05; а фильтр настроен на
CAN_FilterInitStructure.CAN_FilterIdHigh = 0x0000; - Старшая часть фильтра
CAN_FilterInitStructure.CAN_FilterIdLow = 0x08; - Младшая часть фильтра
он примет данное сообщение?
CAN_FilterInitStructure.CAN_FilterIdHigh = 0x0000; - Старшая часть фильтра
CAN_FilterInitStructure.CAN_FilterIdLow = 0x08; - Младшая часть фильтра
он примет данное сообщение?
Re: CAN шина на STM32F103
неочень то и понятно судя по 2 таблице 32bit.
Mapping STIDE[0:10] 0-бит это 0, 1-бит это RTR, 2-IDE. c 3 по 10 бит я задаю уже нужный диапазон адресов?
Mapping STIDE[0:10] 0-бит это 0, 1-бит это RTR, 2-IDE. c 3 по 10 бит я задаю уже нужный диапазон адресов?
Re: CAN шина на STM32F103
Получается адрес нужно запихивать со сдвигом на 3 бита в лево
Re: CAN шина на STM32F103
для 29 битного ID как то так.
F_H = ((0xFFFFF000 & (uint32_t)id_data))>>13;
F_L = ((0x0000FFFF & (uint32_t)id_data)) <<3 | +4;
для 11 битного потребуется сдвиг только старшей части.
F_H = ((0xFFFFF000 & (uint32_t)id_data))>>13;
F_L = ((0x0000FFFF & (uint32_t)id_data)) <<3 | +4;
для 11 битного потребуется сдвиг только старшей части.
Re: CAN шина на STM32F103
если мне надо принимать диапазон адресов от 0х10 до 0х15, получается
F_H = ((0xFFFFF000 & (uint32_t)0х015))>>13;
F_L = ((0x0000FFFF & (uint32_t)0х10));
F_H = ((0xFFFFF000 & (uint32_t)0х015))>>13;
F_L = ((0x0000FFFF & (uint32_t)0х10));
Re: CAN шина на STM32F103
Ну не понимаю я настройку этого фильтра. Может для примера выложите пару настроек под конкретный ID Чтобы хоть как-то прояснить что и как прописывать.
- Mishany
- Электрический кот
- Сообщения: 1031
- Зарегистрирован: Чт июн 20, 2013 00:00:58
- Откуда: москва, м.Сходненская
Re: CAN шина на STM32F103
http://radiokot.ru/forum/viewtopic.php? ... start=2560 вот тут поднимался вопрос по фильтру может поможет


