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

 
 
> STM32F042 Настройка CAN
RadiatoR
сообщение Apr 6 2016, 14:29
Сообщение #1


Местный
***

Группа: Свой
Сообщений: 270
Регистрация: 8-08-15
Из: Москва
Пользователь №: 87 901



Всем привет.
У меня есть готовая инициализация can шины. Работает она нормально. Когда я писал на нее код особо времени много не было разбираться что да как и я воткнул готовый. Откуда взял не помню) Инициализация выглядит так:
Код
    RCC->APB1ENR|=RCC_APB1ENR_CANEN;
     CAN->MCR|=CAN_MCR_INRQ;// init mode on
     while(!(CAN->MSR|=CAN_MSR_INAK));// wait for init mode ready
     CAN->MCR &=~ CAN_MCR_SLEEP;// exit sleep mode
    
     CAN->BTR =0x001c0005; // mode, speed
     CAN->MCR&=~(uint32)CAN_MCR_INRQ; // exit init mode
     while(CAN->MSR & CAN_MSR_INAK);// wait exiting init mode
     CAN->FMR |= CAN_FMR_FINIT;// filter mode on
     CAN->FA1R |= CAN_FA1R_FACT0|CAN_FA1R_FACT1|CAN_FA1R_FACT2|CAN_FA1R_FACT3|CAN_FA1R_FACT4;// active filter 0-4
     CAN->FS1R=(1<<4)|(1<<3);// 4 and 5 filter - 32bit
     CAN->sFilterRegister[0].FR1 = Id1 << 5 | 0xFF70U << 16;// ID and mask
     CAN->sFilterRegister[1].FR1 = Id2 << 5 | 0xFF70U << 16;// ID and mask
     CAN->sFilterRegister[2].FR1 = Display_CAN_ID << 5 | 0xFF70U << 16;// ID and mask
     CAN->sFilterRegister[3].FR1 = 0x18FF1F03;// ID and mask
     CAN->sFilterRegister[3].FR2 = 0x18FF1F03;// ID and mask
     CAN->sFilterRegister[4].FR1 = 0x18FECA03;// ID and mask    
     CAN->sFilterRegister[4].FR2 = 0x18FECA03;// ID and mask
     CAN->FMR &=~ CAN_FMR_FINIT;// exit filter mode


     CAN->IER|=CAN_IER_FMPIE0;// interrupt on receive pack to fifo0

     NVIC_EnableIRQ(CEC_CAN_IRQn);


Здесь есть все что нужно для передачи/приема по 11 битному серийнику.
Возникла необходимость добавить получение 29 битного серийника и тут я стал разгребать дебри...
Вышеуказанный код не пашет. Ловит все подряд.
Тут я пытаюсь 0-2 фильтры сделать 11 битными (они работают отлично), а 4,5 29 битными (их я сейчас пилю)

Подскажите откуда берутся сдвиги << 5 | 0xFF70U << 16 и зачем они нужны? По крайней мере с 5 вроде понятно - уравнивает 11 к 16 битам, то для чего в старшие 2 байта вписывается это число не понятно. Без него не работает.
Go to the top of the page
 
+Quote Post



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

 


RSS Текстовая версия Сейчас: 23rd June 2025 - 23:57
Рейтинг@Mail.ru


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