Форум программистов, компьютерный форум, киберфорум
Наши страницы
Микроконтроллеры ARM, Cortex, STM32
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.79/19: Рейтинг темы: голосов - 19, средняя оценка - 4.79
Morkusho
0 / 0 / 0
Регистрация: 25.09.2011
Сообщений: 17
1

Внимание, засада с CAN фильтрами!

11.04.2012, 13:29. Просмотров 3356. Ответов 1
Метки нет (Все метки)

Отлаживал намедни устройство общающееся с собратьями по шине CAN.
Вылезла проблема, при прямой инициализации заголовка (ID) сообщения, прерывание по RX не происходило.
Оказалось что при инициализации нужно смещать ID и маску на 3 бита влево.
Код
void init_filter_mask(unsykned int idFilterMask,unsykned char filterBank,unsykned char filterFifo)
{
unsykned int shiftedFilter=idFilterMask<<3;
CAN_FilterInitTypeDef CAN_FilterInitStructure;
/* CAN filter init */
CAN_FilterInitStructure.CAN_FilterNumber = filterBank;
CAN_FilterInitStructure.CAN_FilterMode = CAN_FilterMode_IdMask;
CAN_FilterInitStructure.CAN_FilterScale = CAN_FilterScale_32bit;
CAN_FilterInitStructure.CAN_FilterIdHigh = ((unsykned short)((shiftedFilter&0xFFFF0000)>>16));
CAN_FilterInitStructure.CAN_FilterIdLow = ((unsykned short)(shiftedFilter&0x0000FFFF)) ;
CAN_FilterInitStructure.CAN_FilterMaskIdHigh = ((unsykned short)((shiftedFilter&0xFFFF0000)>>16));
CAN_FilterInitStructure.CAN_FilterMaskIdLow = ((unsykned short)(shiftedFilter&0x0000FFFF));
CAN_FilterInitStructure.CAN_FilterFIFOAssyknment = filterFifo;
CAN_FilterInitStructure.CAN_FilterActivation = ENABLE;
CAN_FilterInit(&CAN_FilterInitStructure);
}
В таком виде все работает правильно.
По непроверенным данным для 11-bit ID смещать нужно уже на 5 бит.

P.S. Самое противное, что в документации от ST я даже полслова об этом не нашел.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
11.04.2012, 13:29
Ответы с готовыми решениями:

засада со sprintf
int i; char *str1; char *str2 str1 = &quot;OBS&quot;; str2 = &quot;DEF&quot;; i =...

засада с энкодером
вчера целый день убил на подключения безымянного энкодера к stm32f103 сделал...

Засада с двоичным семафором в FreeRTOS
Начинаю потихоньку осваивать FriiRTOS на STM32, решил попробовать двоичный...

А правда, что оптимизатор не берет во внимание обработчики прерываний при компиляции?
Всем привет, Intel 8051-подобный микроконтроллер (nRF24LE1), компилятор Keil...

Засада
Собираю комп. Материнка ASROCK 970 Pro3 R2.0, проц AMD Phenom II X4 960. В...

1
otxmt
0 / 0 / 0
Регистрация: 27.05.2010
Сообщений: 95
21.04.2012, 01:26 2
Напишите об этом в ST, они включат в это в эррату. Заодно и семплов стрельните.
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
21.04.2012, 01:26

Засада с представлениями
Требуется совет, суть такая: имеется library.php в которую соответственно...

засада с кодировками
Начинаю только знакомится с php, так что просьба сильно не пинать за детские...

writeln - засада ...
Состоит в том, что когда нажимаю на кнопку, выполняется скрипт, а все что было...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru