klen 1 5 февраля, 2010 Опубликовано 5 февраля, 2010 · Жалоба Сабж в заголовке . пробую запустить сразу два CAN сначала решил по одиночке запустить в режиме loopback - генерацию прерываний. написано по образу примера из фирменной библиотеки. функции инициализации и отправки пакета идентичны , принимают параметр CAN1 или CAN2. CAN2 не генерит прерываний и не принимает пакет. передачик говорит что все передано CAN_TransmitStatus(CANx, TransmitMailbox) возвращает CANTXOK. Приемник CAN2 тупо ниче нихочет делать :( че делать? после просмотра подиаганаоли даташита терзают смутные сомнения что CAN1 и CAN2 "две большие разницы" .... вод код инициализации модулей, мутотень с GPIO вырезал void can_init(CAN_TypeDef* CANx) { // активация модуля CAN1 //RCC_APB1PeriphClockCmd(RCC_APB1Periph_CAN1, ENABLE); if (CANx==CAN1) RCC_APB1PeriphClockCmd(RCC_APB1Periph_CAN1,ENABLE); else RCC_APB1PeriphClockCmd(RCC_APB1Periph_CAN2,ENABLE); NVIC_InitTypeDef NVIC_InitStructure; NVIC_PriorityGroupConfig(NVIC_PriorityGroup_0); // установка канала CANx_RX0_IRQn контроллера прервыаний NVIC if (CANx==CAN1) NVIC_InitStructure.NVIC_IRQChannel = CAN1_RX0_IRQn; else NVIC_InitStructure.NVIC_IRQChannel = CAN2_RX0_IRQn; NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0x0; NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0x0; NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; NVIC_Init(&NVIC_InitStructure); // сброс регистров модуля CAN CAN_DeInit(CANx); CAN_InitTypeDef CAN_InitStructure; CAN_StructInit(&CAN_InitStructure); // инициалищация модуля CAN CAN_InitStructure.CAN_TTCM = DISABLE; CAN_InitStructure.CAN_ABOM = DISABLE; CAN_InitStructure.CAN_AWUM = DISABLE; CAN_InitStructure.CAN_NART = DISABLE; CAN_InitStructure.CAN_RFLM = DISABLE; CAN_InitStructure.CAN_TXFP = DISABLE; //CAN_InitStructure.CAN_Mode = CAN_Mode_Normal; CAN_InitStructure.CAN_Mode = CAN_Mode_LoopBack; CAN_InitStructure.CAN_SJW = CAN_SJW_1tq; CAN_InitStructure.CAN_BS1 = CAN_BS1_3tq; CAN_InitStructure.CAN_BS2 = CAN_BS2_5tq; CAN_InitStructure.CAN_Prescaler = 4;//2 CAN_Init(CANx, &CAN_InitStructure); // инициализация фильтра CAN CAN_FilterInitTypeDef CAN_FilterInitStructure; 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); // разрешение прерыания по приему сообщения в FIFO #0 модуля CAN1 CAN_ITConfig(CANx, CAN_IT_FMP0 , ENABLE); } //--------------------------------------------------------------------------------------- uint32_t can_tx(CAN_TypeDef* CANx , uint8_t* data , uint32_t size) { CanTxMsg TxMessage; uint8_t TransmitMailbox = 0; //подготовка пакета для передачи TxMessage.StdId = 0x321; TxMessage.ExtId = 0x01; TxMessage.RTR = CAN_RTR_DATA; TxMessage.IDE = CAN_ID_STD; TxMessage.DLC = 1; TxMessage.Data[0] = 0x55; // передача пакета TransmitMailbox=CAN_Transmit(CANx, &TxMessage); uint32_t i = 0xffff; // таймер таймаута по завершении передачи while((CAN_TransmitStatus(CANx, TransmitMailbox) != CANTXOK) && i ) { i--; } if ( !i ) return 0xFFFFFFFF; return size; } //-------------------------------------------------------------------------- void CAN1_RX0_IRQHandler(void) { while(1); // ловим прерывания под отладчиком } void CAN2_RX0_IRQHandler(void) { while(1); // ловим прерывания под отладчиком } для теста вызываются can_init(CAN1); tmp = can_tx( CAN1 , NULL , 32) ; программа зацикливается в обработчике прерывания CAN1_RX0_IRQHandler can_init(CAN2); tmp = can_tx( CAN2 , NULL , 32) ; программа не циклится :( чек делать кроме чтения даташита который уже читаю? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
klen 1 25 февраля, 2010 Опубликовано 25 февраля, 2010 · Жалоба так я и не смог разобратся в чем дело. второй CAN у меня не работает. остался один вариант... есть например такая плата MCBSTM32C или STM3210C-EVAL на них как раз stm32f107vct запаяна, у которой два CAN выведены наружу, и как я понимаю, должны работать независимо. Но почему то демо-кода недают ни Keil ни ST. вероятно он на дисках в комплекте. просба счастливых обладателей этих демобордов поделится кодом. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
AlexandrY 3 25 февраля, 2010 Опубликовано 25 февраля, 2010 · Жалоба Зачем вам эти либы от ST? Ведь видно, что ламерами писалось. Советую обратить внимание на биты 13:8 CAN2SB[5:0]: CAN2 start bank в регистре CAN_FMR. Оба CAN-а в STM32 делят общую память с банками фильтров. Назначив фильтр одному CAN-у надо убедиться что вы не отобрали фильтр у другого CAN-а Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
AHTOXA 18 25 февраля, 2010 Опубликовано 25 февраля, 2010 · Жалоба просба счастливых обладателей этих демобордов поделится кодом. Ну я "счастливый":-) Только нет там кода. Практически нет. Все демки в бинарном виде... Я поэтому до сих пор безуспешно ищу пример работы с USB-хостом:) Всё, что было в комплекте, качается вот отсюда: http://www.st.com/mcu/familiesdocs-110.html STM3210C-EVAL demonstration firmware: zip, pdf. ЗЫ. Это всё про STM3210C-EVAL, насчёт кейла не знаю. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
klen 1 25 февраля, 2010 Опубликовано 25 февраля, 2010 · Жалоба 2_AHTOXA мдя... очень интересный подход - продать демоплату и бинарники к ней без исходников. я думал так умеют моск выносить только в нашей стране. еще один гвоздь в крышку гроба stm32! 2_AlexandrY спасибо за наводку. но это мало мне щас поможет, нада брать и тупо даташит курить, потом. щас уже поезд уехал. :( какие еще различие могут быть? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
SapegoAL 0 26 февраля, 2010 Опубликовано 26 февраля, 2010 · Жалоба Ббббб. А я уже заложил f105 для использования двух CAN-ов. :unsure: Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
klen 1 26 февраля, 2010 Опубликовано 26 февраля, 2010 · Жалоба Ббббб. А я уже заложил f105 для использования двух CAN-ов. :unsure: уверен что "стою на асфальте я в лыжы обутый", некогда было серьезно CAN изучать - я его в первый раз вообще пробую. хотелось с кандачка с использованием фирменной библы быстро получить результат. наверняка есть зЮбры которые запустили на 105 107 два CAN только чето они молчат :1111493779: Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
AlexandrY 3 26 февраля, 2010 Опубликовано 26 февраля, 2010 · Жалоба Вы как будто не в Keil-е работаете. Пару минут в симуляторе на рабочем участке вашего кода открыть вкладку фильтов CAN-а и посмотреть откуда начитаются фильтры CAN2 и есть ли там хоть один нормальный активированный фильтр. Хотя и так видно что вы создаете один фильтр, а надо делать два. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
cebotor 0 28 февраля, 2010 Опубликовано 28 февраля, 2010 · Жалоба в 105 два CAN-а отлично работают.. Какая крышка гроба , о чем Вы у филипса на кортексе с CAN - ом вобще голяк - линейка пуста. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
klen 1 28 февраля, 2010 Опубликовано 28 февраля, 2010 · Жалоба в 105 два CAN-а отлично работают.. Какая крышка гроба , о чем Вы у филипса на кортексе с CAN - ом вобще голяк - линейка пуста. а не поделитесь куском кода где делается чтоб они оба работали? разницы между 105 и 107 не должно быть. я выше то и говорил - гдето я туплю или в библиотеке ошибка и я ее немогу найти. Скорее всего глупость гдето моя. про крышку гроба - ну очень нравится стиль документации у NXP и также сильно ненравится у ST. на мой взгляд подход NXP - дока отвечает почему именно так нада далать, а у ST -тупо делай так, вот тебе еще либа, тоже без описания и нелезь внутрь. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
cebotor 0 1 марта, 2010 Опубликовано 1 марта, 2010 · Жалоба а не поделитесь куском кода где делается чтоб они оба работали? разницы между 105 и 107 не должно быть. я выше то и говорил - гдето я туплю или в библиотеке ошибка и я ее немогу найти. Скорее всего глупость гдето моя. про крышку гроба - ну очень нравится стиль документации у NXP и также сильно ненравится у ST. на мой взгляд подход NXP - дока отвечает почему именно так нада далать, а у ST -тупо делай так, вот тебе еще либа, тоже без описания и нелезь внутрь. я не могу поделиться куском ибо сейчас не на работе , а Вам как я понял нужно срочно , однако могу показать где у Вас "глюка закралася". Уважаемый AlexandrY абсолютно верно вам показал на бит 13:8 CAN2SB[5:0]: CAN2 start bank в регистре CAN_FMR , в эти биты грузится номер стартового фильтра для второго CAN-а после ресета там согластно доке - 1110b то бишь 14 , (по братски фильтры делят). а Вы инитите 0й фильтр, проинитьте 14й в случае второго CAN- а или используйте процедуру из либы void CAN_SlaveStartBank(uint8_t CAN_BankNumber); // у меня версия либы V3.1.2 с параметром ноль , хотя это нелогично С уважением Илья. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
klen 1 1 марта, 2010 Опубликовано 1 марта, 2010 · Жалоба я не могу поделиться куском ибо сейчас не на работе , а Вам как я понял нужно срочно , однако могу показать где у Вас "глюка закралася". Уважаемый AlexandrY абсолютно верно вам показал на бит 13:8 CAN2SB[5:0]: CAN2 start bank в регистре CAN_FMR , в эти биты грузится номер стартового фильтра для второго CAN-а после ресета там согластно доке - 1110b то бишь 14 , (по братски фильтры делят). а Вы инитите 0й фильтр, проинитьте 14й в случае второго CAN- а или используйте процедуру из либы void CAN_SlaveStartBank(uint8_t CAN_BankNumber); // у меня версия либы V3.1.2 с параметром ноль , хотя это нелогично С уважением Илья. огромное спасибо AlexandrY cebotor. дело было не бобине.... а в фильтрах :) все работает. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Pavlike 0 5 августа, 2011 Опубликовано 5 августа, 2011 · Жалоба Добрый всем вечер! Я пробую запустить CAN на STM32-discovery (заменил камень только на 105й) Собрал пакет из библиотеки STM32F10x_stdPeriph_Lib ( там есть примеры с 2мя канами и с одним LoopBack) В обоих случаях в дебагере я не вижу прерывания по приему(просто оно не компилируется) Не могу понять почему... Пробовал в 100% рабочий проект из боарда воткнуть библиотеку, тоже компилируется, дисплей, светодиоды, кнопки - все работает а CAN передавать - передает, а на приеме нет прерывания ... куда копать? (проект я могу весь выложить или частями) P.S Iar ARM 6.20 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Pavlike 0 6 августа, 2011 Опубликовано 6 августа, 2011 · Жалоба Добрый всем вечер! Я пробую запустить CAN на STM32-discovery (заменил камень только на 105й) Собрал пакет из библиотеки STM32F10x_stdPeriph_Lib ( там есть примеры с 2мя канами и с одним LoopBack) В обоих случаях в дебагере я не вижу прерывания по приему(просто оно не компилируется) Не могу понять почему... Пробовал в 100% рабочий проект из боарда воткнуть библиотеку, тоже компилируется, дисплей, светодиоды, кнопки - все работает а CAN передавать - передает, а на приеме нет прерывания ... куда копать? (проект я могу весь выложить или частями) P.S Iar ARM 6.20 ================== РЕШЕНО!!!====================== В разделе EWARMv5 содержался файл startup_STM32F10x_MD_VL.s, заменил его на коннект лайн для 32F105 startup_STM32F10x_CL.s и все ОК! Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
igler_u 0 1 февраля, 2013 Опубликовано 1 февраля, 2013 · Жалоба дело было не бобине.... а в фильтрах :) все работает. вот обозначат тему, попросят помочь... кто-то время уделит, подскажет, поможет... вопрос разрешиться...А решение рассказать другим?! Дык нет ведь - надо написать что "всё работает" и всё. Эгоистично как-то ((( Придется дальше время поубивать на поиски решения. AlexandrY и cebotor - спасибо за подсказку Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться