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

 
 
> stm32f107vct непонятки с CAN, ч.2
kulpanov
сообщение Mar 12 2011, 15:44
Сообщение #1





Группа: Новичок
Сообщений: 6
Регистрация: 6-01-11
Пользователь №: 62 053



Всем привет, проблема с CAN, кто сталкивался с проблемой подскажите.
Модуль Barracuda на stm32f107vc от TerraElectronica.
Среда Eclipse(gcc)+jLink. Пытаюсь запустить CAN.
Скажу сразу для МК без ОС делаю, что то впервые.
Поначалу всё шло успешно, код дернутый с их примера Web-сервера
успешно передавал данные из порта в порт: CAN1->CAN2, CAN2->CAN1.
Но вот дальше данные идтить отказываются!
Поясню: подключаю IXXAT usb-to-can, ноль эмоций. Т.е. порты друг другу данные шлют ixxat их не видит.
Сам ixxat данные послать не может.
Со скоростью CAN разобрался, помогли примеры из IAR, кстати примеры из IAR также успешно пересылают данные и ixxat также их не видит.
Если эту железку воткнуть в рабочую CAN сеть - вся сеть начинает глючить.
Сам ixxat рабочий, пакеты от CAN-приводов и иных контроллеров ловит/передаёт изумительно. От barracuda отказывается.
В terre ничего вразумительного не говорят.
Сам не электронщик, и очень не хочется думать, что дело в проводах. Но если это так. подскажите как terru [CENSORED] схватить.
Я думаю что примеры кода у всех одни и те-же, я их практически не правил, но если надо выложу.

Собственно help me!

Сообщение отредактировал IgorKossak - Mar 12 2011, 16:02
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
kulpanov
сообщение Mar 14 2011, 12:45
Сообщение #2





Группа: Новичок
Сообщений: 6
Регистрация: 6-01-11
Пользователь №: 62 053



to klen: собственно к вам претензий нет, я плату не у вас покупал, вам кстати за сборку тулсов для eclipse отдельное спасибо, без шуток.
Вопрос к терре, на который они ответит не могут, никак, сделали железку как работает не знают, общается только сама с собой!.

> У вас скорее всего по другому настроена скорость
Это то я осознал, дело действительно в частоте задания для CAN, частота не попадает ни в одну рабочую. Я уж перебор всех доступных частот CAN перебрал, IXXAT не фиксирует ничего.

Пока дозрели до перепайки кварца с 25 на 16 mhz - без толку, но мне об этом сложно говорить я совсем не железячник.
Тут люди на my.st.com пишут:
Carsten Schumann> With a APB of 36 MHZ you are out of the specs for the CAN controller which needs 8 MHz clock (or a multiple of that). Try using 32 MHz APB clock (= SystemClock 64MHz) and you will be fine.
Кто можь подксажет как таку частоту сделать?
Go to the top of the page
 
+Quote Post
garry_
сообщение Mar 14 2011, 13:09
Сообщение #3


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

Группа: Свой
Сообщений: 85
Регистрация: 22-06-04
Из: Moscow
Пользователь №: 105



Кварц 8 мгц, настройки pll
CODE
void SysClk_Config(void) // RCC_Configuration
{  
    ErrorStatus HSEStartUpStatus;
      
    RCC_DeInit(); //set default
    // 1. Clocking the controller from internal HSI RC (8 MHz)
      RCC_HSICmd(ENABLE);
      while(RCC_GetFlagStatus(RCC_FLAG_HSIRDY) == RESET); // wait until the HSI is ready
      RCC_SYSCLKConfig(RCC_SYSCLKSource_HSI);

    // 2. Enable ext. high frequency OSC
    RCC_HSEConfig(RCC_HSE_ON);                         // Enable HSE
      HSEStartUpStatus = RCC_WaitForHSEStartUp();     // Wait till HSE is ready
    if(HSEStartUpStatus == SUCCESS)
   {
#ifdef  VECT_TAB_FLASH  
        // 5. Init Embedded Flash
        // Zero wait state, if 0 < HCLK 24 MHz
        // One wait state, if 24 MHz < HCLK 56 MHz
        // Two wait states, if 56 MHz < HCLK 72 MHz
        // Flash wait state
       FLASH_SetLatency(FLASH_Latency_2); // Flash 2 wait state  
       FLASH_PrefetchBufferCmd(FLASH_PrefetchBuffer_Enable); //Enable Prefetch Buffer
//        FLASH_HalfCycleAccessCmd(FLASH_HalfCycleAccess_Disable); // Half cycle access
#endif     
       RCC_HCLKConfig(RCC_SYSCLK_Div1);// HCLK = SYSCLK = 64MHz  
       RCC_PCLK2Config(RCC_HCLK_Div1); // PCLK2 = HCLK   = 64MHz
        RCC_PCLK1Config(RCC_HCLK_Div4); // PCLK1 = HCLK/4  = 16MHz
       RCC_PLLConfig(RCC_PLLSource_HSE_Div1, RCC_PLLMul_8); // HCLK = PLLCLK = 8MHz * 8 = 64 MHz  
        RCC_PLLCmd(ENABLE); // Enable PLL  
        while(RCC_GetFlagStatus(RCC_FLAG_PLLRDY) == RESET)// Wait till PLL is ready
        {
        }
        RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK); // Select PLL as system clock source
        while(RCC_GetSYSCLKSource() != 0x08) // Wait till PLL is used as system clock source
        {
        }
    }
    
    RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO, ENABLE);     //Enable AFIO clock (PCLK2)
    RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);    //Enable GPIOA clock (PCLK2)
      RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);    //Enable GPIOB clock (PCLK2)
      RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC, ENABLE);    //Enable GPIOC clock (PCLK2)
      RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1, ENABLE);//Enable USART1 clock (PCLK2)
    RCC_APB2PeriphClockCmd(RCC_APB2Periph_SPI1, ENABLE); //Enable SPI1 clock (PCLK2)

      RCC_APB1PeriphClockCmd(RCC_APB1Periph_USART3, ENABLE); //Enable USART3 clock (PCLK1)
      RCC_APB1PeriphClockCmd(RCC_APB1Periph_CAN, ENABLE);      //Enable CAN clock (PCLK1)
      RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2, ENABLE); // TIM2 clock enable(PCLK1)
      RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3, ENABLE); // TIM3 clock enable(PCLK1)
      RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM4, ENABLE); // TIM4 clock enable(PCLK1)
}

, настройка скорости кан выше
Go to the top of the page
 
+Quote Post



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

 


RSS Текстовая версия Сейчас: 22nd July 2025 - 08:52
Рейтинг@Mail.ru


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