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

 
 
> STM32F091 CAN filters init, инициализация CAN фильтров на определенный сообщения
max_mart
сообщение Feb 17 2017, 17:39
Сообщение #1


Местный
***

Группа: Участник
Сообщений: 248
Регистрация: 30-09-11
Пользователь №: 67 474



Народ всем привет.

Использую STM32F091. Необходимо фильтровать CAN сообщения на аппаратном уровне, чтобы успешно приходили CAN сообщения определенного ID, например, 0x434, 0x3b3, 0x171, 0x42f, 0x041.

Как это сделать?

Пробовал различные варианты по инициализации CAN_FilterIdHigh, CAN_FilterIdLow, CAN_FilterMaskIdHigh, CAN_FilterMaskIdLow, но все равно пропускается большой поток ненужных сообщений.
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
pvo125
сообщение Feb 19 2017, 06:49
Сообщение #2


Участник
*

Группа: Участник
Сообщений: 37
Регистрация: 9-04-14
Из: Черногорск Хакасия
Пользователь №: 81 299



Выбираете 11 битный идентификатор. Далее в режиме ID List чтоб только полное совпадение ID пропускалось фильтром. Далее 16 битный режим фильтров. Получится на один банк например первый настроить 4 фильтра ( для сообщений 0x434 0x3b3 0x171 0x42f) для пятого ID нужно будет задействовать второй банк. Далее пример с записью в регистры CAN. Если на SPL будете делать все равно отладчиком надо сравнить значения самих фильтров со значением ниже. Как мапятся показано ниже
STDID[10:3] STDID[2:0] RTR IDE EXID[17:15]
Код
CAN1->FM1R |= CAN_FM1R_FBM1;           //Filters bank 1  mode ID List
CAN1->FS1R&=~CAN_FS1R_FSC1          // Filters bank 1  scale 16 bits    
CAN1->FFA1R|=CAN_FFA1R_FFA1;         // Filters bank 1   FIFO1        

    4        3         4        RTR    IDE    EXTID
1 0 0 | 0 0 1 1 | 0 1 0 0 |   0   |   0   |   000     
1 0 0  0 | 01 1   0|1 0 0     0|       0      000        =       0x 8680                
    
    3            b       3        RTR   IDE   EXTID
0 1 1 |1  0 1 1 | 0  0 1 1 |   0  |   0   |  000    
0 1 1  1| 0 1 1   0 |0 1 1     0  |   0       000       =          0x7660          

CAN1->sFilterRegister[1].FR1=0x76608680; //Filters bank 1 fmi=00 ID=0x434 IDE=0 RTR=0   data_frame ( 11 bit ID  )
                                             //Filters bank 1 fmi=01 ID=0x3b3 IDE=0 RTR=0     data_frame
   1            7         1       RTR     IDE     EXTID
0 0 1| 0  1 1 1 | 0  0  0 1 |   0   |   0   | 000     
0 0 1  0 |1 1 1   0 |0  0 1      0  |   0      000            =       0x 2E20

    4             2        f      RTR    IDE   EXTID
1 0 0| 0  0 1 0 | 1  1 1 1 |   0  |   0   |  000    
1 0 0  0 |0 1 0   1| 1 1 1      0 |   0       000      =    0x85E0


CAN1->sFilterRegister[1].FR2=0x85E0 2E20;    //Filters bank 1 fmi=02 ID=0x171 IDE=0 RTR=0    data_frame
                                                    //Filters bank 1 fmi=03 ID=0x42f  IDE=0 RTR=0   data_frame

Go to the top of the page
 
+Quote Post



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

 


RSS Текстовая версия Сейчас: 18th August 2025 - 15:08
Рейтинг@Mail.ru


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