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

 
 
2 страниц V   1 2 >  
Reply to this topicStart new topic
> stm32f107vct непонятки с CAN, в loopback CAN1 работает а CAN2 нет
klen
сообщение Feb 5 2010, 23:43
Сообщение #1


бессмертным стать можно тремя способами
*****

Группа: Свой
Сообщений: 1 405
Регистрация: 9-05-06
Из: Москва
Пользователь №: 16 912



Сабж в заголовке .
пробую запустить сразу два CAN
сначала решил по одиночке запустить в режиме loopback - генерацию прерываний. написано по образу примера из фирменной библиотеки.

функции инициализации и отправки пакета идентичны , принимают параметр CAN1 или CAN2.

CAN2 не генерит прерываний и не принимает пакет. передачик говорит что все передано CAN_TransmitStatus(CANx, TransmitMailbox) возвращает CANTXOK. Приемник CAN2 тупо ниче нихочет делать sad.gif

че делать? после просмотра подиаганаоли даташита терзают смутные сомнения что 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) ;
программа не циклится sad.gif

чек делать кроме чтения даташита который уже читаю?
Go to the top of the page
 
+Quote Post
klen
сообщение Feb 25 2010, 18:35
Сообщение #2


бессмертным стать можно тремя способами
*****

Группа: Свой
Сообщений: 1 405
Регистрация: 9-05-06
Из: Москва
Пользователь №: 16 912



так я и не смог разобратся в чем дело. второй CAN у меня не работает.

остался один вариант...

есть например такая плата MCBSTM32C или STM3210C-EVAL
на них как раз stm32f107vct запаяна, у которой два CAN выведены наружу, и как я понимаю, должны работать независимо. Но почему то демо-кода недают ни Keil ни ST. вероятно он на дисках в комплекте.
просба счастливых обладателей этих демобордов поделится кодом.
Go to the top of the page
 
+Quote Post
AlexandrY
сообщение Feb 25 2010, 19:12
Сообщение #3


Ally
******

Группа: Модераторы
Сообщений: 6 232
Регистрация: 19-01-05
Пользователь №: 2 050



Зачем вам эти либы от ST? Ведь видно, что ламерами писалось.

Советую обратить внимание на биты 13:8 CAN2SB[5:0]: CAN2 start bank в регистре CAN_FMR.
Оба CAN-а в STM32 делят общую память с банками фильтров.
Назначив фильтр одному CAN-у надо убедиться что вы не отобрали фильтр у другого CAN-а
Go to the top of the page
 
+Quote Post
AHTOXA
сообщение Feb 25 2010, 20:40
Сообщение #4


фанат дивана
******

Группа: Свой
Сообщений: 3 387
Регистрация: 9-08-07
Из: Уфа
Пользователь №: 29 684



Цитата(klen @ Feb 25 2010, 23:35) *
просба счастливых обладателей этих демобордов поделится кодом.

Ну я "счастливый":-) Только нет там кода. Практически нет. Все демки в бинарном виде... Я поэтому до сих пор безуспешно ищу пример работы с USB-хостомsmile.gif

Всё, что было в комплекте, качается вот отсюда:
http://www.st.com/mcu/familiesdocs-110.html

STM3210C-EVAL demonstration firmware: zip, pdf.

ЗЫ. Это всё про STM3210C-EVAL, насчёт кейла не знаю.


--------------------
Если бы я знал, что такое электричество...
Go to the top of the page
 
+Quote Post
klen
сообщение Feb 25 2010, 20:59
Сообщение #5


бессмертным стать можно тремя способами
*****

Группа: Свой
Сообщений: 1 405
Регистрация: 9-05-06
Из: Москва
Пользователь №: 16 912



2_AHTOXA
мдя... очень интересный подход - продать демоплату и бинарники к ней без исходников. я думал так умеют моск выносить только в нашей стране. еще один гвоздь в крышку гроба stm32!

2_AlexandrY
спасибо за наводку. но это мало мне щас поможет, нада брать и тупо даташит курить, потом. щас уже поезд уехал. sad.gif
какие еще различие могут быть?
Go to the top of the page
 
+Quote Post
SasaVitebsk
сообщение Feb 26 2010, 08:04
Сообщение #6


Гуру
******

Группа: Свой
Сообщений: 2 712
Регистрация: 28-11-05
Из: Беларусь, Витебск, Строителей 18-4-220
Пользователь №: 11 521



Ббббб. А я уже заложил f105 для использования двух CAN-ов. unsure.gif
Go to the top of the page
 
+Quote Post
klen
сообщение Feb 26 2010, 08:49
Сообщение #7


бессмертным стать можно тремя способами
*****

Группа: Свой
Сообщений: 1 405
Регистрация: 9-05-06
Из: Москва
Пользователь №: 16 912



Цитата(SasaVitebsk @ Feb 26 2010, 11:04) *
Ббббб. А я уже заложил f105 для использования двух CAN-ов. unsure.gif

уверен что "стою на асфальте я в лыжы обутый", некогда было серьезно CAN изучать - я его в первый раз вообще пробую. хотелось с кандачка с использованием фирменной библы быстро получить результат. наверняка есть зЮбры которые запустили на 105 107 два CAN только чето они молчат 1111493779.gif
Go to the top of the page
 
+Quote Post
AlexandrY
сообщение Feb 26 2010, 20:18
Сообщение #8


Ally
******

Группа: Модераторы
Сообщений: 6 232
Регистрация: 19-01-05
Пользователь №: 2 050



Вы как будто не в Keil-е работаете. Пару минут в симуляторе на рабочем участке вашего кода открыть вкладку фильтов CAN-а и посмотреть откуда начитаются фильтры CAN2 и есть ли там хоть один нормальный активированный фильтр.

Хотя и так видно что вы создаете один фильтр, а надо делать два.
Go to the top of the page
 
+Quote Post
cebotor
сообщение Feb 28 2010, 13:04
Сообщение #9


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

Группа: Свой
Сообщений: 135
Регистрация: 6-04-07
Из: Бронницы
Пользователь №: 26 809



в 105 два CAN-а отлично работают..
Какая крышка гроба , о чем Вы у филипса на кортексе с CAN - ом вобще голяк - линейка пуста.


--------------------
если еррата пуста - это не хорошо а плохо
Go to the top of the page
 
+Quote Post
klen
сообщение Feb 28 2010, 23:33
Сообщение #10


бессмертным стать можно тремя способами
*****

Группа: Свой
Сообщений: 1 405
Регистрация: 9-05-06
Из: Москва
Пользователь №: 16 912



Цитата(cebotor @ Feb 28 2010, 16:04) *
в 105 два CAN-а отлично работают..
Какая крышка гроба , о чем Вы у филипса на кортексе с CAN - ом вобще голяк - линейка пуста.


а не поделитесь куском кода где делается чтоб они оба работали? разницы между 105 и 107 не должно быть.
я выше то и говорил - гдето я туплю или в библиотеке ошибка и я ее немогу найти. Скорее всего глупость гдето моя.

про крышку гроба - ну очень нравится стиль документации у NXP и также сильно ненравится у ST. на мой взгляд подход NXP - дока отвечает почему именно так нада далать, а у ST -тупо делай так, вот тебе еще либа, тоже без описания и нелезь внутрь.
Go to the top of the page
 
+Quote Post
cebotor
сообщение Mar 1 2010, 12:21
Сообщение #11


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

Группа: Свой
Сообщений: 135
Регистрация: 6-04-07
Из: Бронницы
Пользователь №: 26 809



Цитата(klen @ Mar 1 2010, 02:33) *
а не поделитесь куском кода где делается чтоб они оба работали? разницы между 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
с параметром ноль , хотя это нелогично
С уважением Илья.


--------------------
если еррата пуста - это не хорошо а плохо
Go to the top of the page
 
+Quote Post
klen
сообщение Mar 1 2010, 13:14
Сообщение #12


бессмертным стать можно тремя способами
*****

Группа: Свой
Сообщений: 1 405
Регистрация: 9-05-06
Из: Москва
Пользователь №: 16 912



Цитата(cebotor @ Mar 1 2010, 15:21) *
я не могу поделиться куском ибо сейчас не на работе , а Вам как я понял нужно срочно , однако могу показать где у Вас "глюка закралася".
Уважаемый 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.

дело было не бобине.... а в фильтрах smile.gif
все работает.
Go to the top of the page
 
+Quote Post
Pavlike
сообщение Aug 5 2011, 15:39
Сообщение #13





Группа: Участник
Сообщений: 11
Регистрация: 16-05-08
Пользователь №: 37 560



Добрый всем вечер!

Я пробую запустить CAN на STM32-discovery (заменил камень только на 105й)

Собрал пакет из библиотеки STM32F10x_stdPeriph_Lib ( там есть примеры с 2мя канами и с одним LoopBack)

В обоих случаях в дебагере я не вижу прерывания по приему(просто оно не компилируется)

Не могу понять почему...

Пробовал в 100% рабочий проект из боарда воткнуть библиотеку, тоже компилируется, дисплей, светодиоды, кнопки - все работает
а CAN передавать - передает, а на приеме нет прерывания ...
куда копать?
(проект я могу весь выложить или частями)
P.S Iar ARM 6.20
Go to the top of the page
 
+Quote Post
Pavlike
сообщение Aug 6 2011, 09:45
Сообщение #14





Группа: Участник
Сообщений: 11
Регистрация: 16-05-08
Пользователь №: 37 560



Цитата(Pavlike @ Aug 5 2011, 14:39) *
Добрый всем вечер!

Я пробую запустить 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 и все ОК!
Go to the top of the page
 
+Quote Post
igler_u
сообщение Feb 1 2013, 09:27
Сообщение #15





Группа: Новичок
Сообщений: 3
Регистрация: 24-07-12
Пользователь №: 72 885



Цитата(klen @ Mar 1 2010, 18:14) *
дело было не бобине.... а в фильтрах sm.gif
все работает.


вот обозначат тему, попросят помочь... кто-то время уделит, подскажет, поможет... вопрос разрешиться...А решение рассказать другим?!
Дык нет ведь - надо написать что "всё работает" и всё. Эгоистично как-то (((
Придется дальше время поубивать на поиски решения.
AlexandrY и cebotor - спасибо за подсказку
Go to the top of the page
 
+Quote Post

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

 


RSS Текстовая версия Сейчас: 1st July 2025 - 01:31
Рейтинг@Mail.ru


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