реклама на сайте
подробности

 
 
> Адресация и фильтрация CAN сообщений на STM32F4
DmitryG
сообщение Oct 2 2016, 08:45
Сообщение #1





Группа: Участник
Сообщений: 7
Регистрация: 27-09-16
Пользователь №: 93 508



Добрый день!

У меня CAN-шиной соединены 4 устройства STM32F4. Каждое из них подсоединено к компьютеру по USART для возможности вывода на экран входящих и исходящих сообщений. При отправке данных от одного устройства к конкретному другому, сообщение всё равно отображают все 4 устройства. Объясните, пожалуйста, каким образом правильно настроить адресацию и фильтрацию сообщений на STM32F4.
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
amiller
сообщение Oct 2 2016, 09:38
Сообщение #2


Частый гость
**

Группа: Участник
Сообщений: 176
Регистрация: 20-02-14
Из: Томск
Пользователь №: 80 612



Если не ошибаюсь, то в стандарте Can нет такого понятия, как адрес устройства. Есть понятие - идентификатор посылки.
В системе, где несколько устройств, и каждое из устройств может отправить посылку любому другому, целесообразно, чтобы в идентификаторе содержалась след информация:
Идентификатор получателя, идентификатор отправителя, тип посылки.
Соответственно фильтры настраиваются на идентификаторы посылок.
Например так:
CODE
// -------------------------------------------- // Настройки модуля фильтрации
setmask(CAN1->FMR, CAN_FMR_FINIT); // To Initialization mode for the filter
// -------------------------------------------- // Настройки банка 0
clrmask(CAN1->FA1R, CAN_FA1R_FACT0); // Deactivation
clrmask(CAN1->FM1R, CAN_FM1R_FBM0); // Mask mode
clrmask(CAN1->FS1R, CAN_FS1R_FSC0); // 16-bit scale
clrmask(CAN1->FFA1R, CAN_FFA1R_FFA0); // Assign to FIFO 0
CAN1->sFilterRegister[0].FR1 = ((int32u)0x1FF8 << 16) + ((int32u)Dev2_to_Dev1 << 5);
CAN1->sFilterRegister[0].FR2 = ((int32u)0x1FF8 << 16) + ((int32u)Dev3_to_Dev1 << 5);
setmask(CAN1->FA1R, CAN_FA1R_FACT0); // Activation

clrmask(CAN1->FMR, CAN_FMR_FINIT); // From Initialization mode for the filter

Вроде бы работало, детали уже увы не помню, надо заглядывать в документацию.
Go to the top of the page
 
+Quote Post
DmitryG
сообщение Oct 2 2016, 10:05
Сообщение #3





Группа: Участник
Сообщений: 7
Регистрация: 27-09-16
Пользователь №: 93 508



Цитата(amiller @ Oct 2 2016, 12:38) *
.



Хорошо. Я вас понял.

Главный вопрос в инициализации у меня относительно строк CAN_FilterIdHigh, CAN_FilterIdLow, CAN_FilterMaskIdHigh, CAN_FilterMaskIdLow. Я не очень понимаю, что конкретно в них писать. В них нужно писать диапазон Id? Если да, то зачем нужны какие-то скобки?


Код
  CAN_FilterInitStructure.CAN_FilterNumber = 0;
  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);


Сообщение отредактировал IgorKossak - Oct 2 2016, 12:53
Причина редактирования: бездумное цитирование, [codebox] для длинного кода, [code] - для короткого!
Go to the top of the page
 
+Quote Post
Непомнящий Евген...
сообщение Oct 3 2016, 08:52
Сообщение #4


Знающий
****

Группа: Свой
Сообщений: 771
Регистрация: 16-07-07
Из: Волгодонск
Пользователь №: 29 153



Цитата(DmitryG @ Oct 2 2016, 13:05) *
Хорошо. Я вас понял.

Главный вопрос в инициализации у меня относительно строк CAN_FilterIdHigh, CAN_FilterIdLow, CAN_FilterMaskIdHigh, CAN_FilterMaskIdLow. Я не очень понимаю, что конкретно в них писать. В них нужно писать диапазон Id? Если да, то зачем нужны какие-то скобки?


Вы начните с чтения мануала на процессор. Там довольно подробно расписана фильтрация, какие режимы есть и что надо писать в регистры. Дальше если вы хотите использовать Cube / HAL, то уже смотрите, что их функции пишут в эти регистры и таким образом понимаете, что вам надо в них передавать

Я честно говоря с HAL еще не сталкивался, но из опыта работы с CMSIS - его дока очень слабая, без мануала на проц не обойтись. Может быть в HAL это поправили.

И опять же из опыта работы с CMSIS - для CAN от него толку ноль. Он слишком уж тонкая обертка над железом и вообще нет никаких плюшек по сравнению с прямой работой с регистрами CAN-модуля процессора.
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- DmitryG   Адресация и фильтрация CAN сообщений на STM32F4   Oct 2 2016, 08:45
|- - amiller   Цитата(DmitryG @ Oct 2 2016, 13:05) Главн...   Oct 2 2016, 11:50
- - редактор   Не скажу конкретно про ваш STM, но в CAN-модуле с ...   Oct 3 2016, 06:16
|- - SasaVitebsk   Цитата(редактор @ Oct 3 2016, 09:16) Поэт...   Oct 3 2016, 09:12
|- - nanorobot   Цитата(SasaVitebsk @ Oct 3 2016, 14:12) Т...   Jul 30 2018, 12:55
|- - jcxz   Цитата(nanorobot @ Jul 30 2018, 15:55) Ра...   Jul 30 2018, 13:26
||- - nanorobot   Цитата(jcxz @ Jul 30 2018, 18:26) Ну если...   Jul 30 2018, 13:34
|- - DmitryM   Цитата(nanorobot @ Jul 30 2018, 15:55) Ра...   Jul 31 2018, 05:21
|- - nanorobot   Цитата(DmitryM @ Jul 31 2018, 10:21) Лини...   Jul 31 2018, 08:42
- - Obam   А мастер почему простаивает, пусть он распределит....   Jul 30 2018, 16:10
|- - nanorobot   Цитата(Obam @ Jul 30 2018, 21:10) А масте...   Jul 30 2018, 16:22
|- - Obam   Цитата(nanorobot @ Jul 30 2018, 19:22) Вс...   Jul 30 2018, 16:29
|- - jcxz   Цитата(nanorobot @ Jul 30 2018, 19:22) Вс...   Jul 30 2018, 16:32
|- - dimka76   Цитата(nanorobot @ Jul 30 2018, 19:22) Вс...   Jul 31 2018, 19:47
- - AlanDrakes   У Вас есть кристалл с уникальным ID, прошитым на п...   Jul 31 2018, 11:28
|- - nanorobot   Цитата(AlanDrakes @ Jul 31 2018, 16:28) Р...   Jul 31 2018, 17:00
|- - jcxz   Цитата(nanorobot @ Jul 31 2018, 20:00) В ...   Aug 1 2018, 08:44
- - yes   если невнимательно читал - извиняйте есть стандар...   Aug 6 2018, 13:36


Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 30th July 2025 - 05:07
Рейтинг@Mail.ru


Страница сгенерированна за 0.02191 секунд с 7
ELECTRONIX ©2004-2016