Перейти к содержанию
    

MaksR

Участник
  • Постов

    6
  • Зарегистрирован

  • Посещение

Сообщения, опубликованные MaksR


  1. 14 минут назад, Jury093 сказал:

    попробуйте взять более короткий кабель или закормить плату с двух портов USB, может один порт не тянет по напряжению в процессе работы dfu-util

    Подключил от двух USB кабелей и все равно такая ситуация. На плате есть еще специальный разъем под питание 7-15V. Остается только найти блок питания и попробовать запитать через него)

  2. flash.log выдает 

    Спойлер
    
    Opening DFU capable USB device...
    
    ID 8087:0a99
    
    Run-time device DFU version 0110
    
    Claiming USB DFU Interface...
    
    Setting Alternate Setting #6 ...
    
    Determining device status: state = dfuIDLE, status = 0
    
    dfuIDLE, continuing
    
    DFU mode device DFU version 0110
    
    Device returned transfer size 4096
    
    Copying data from PC to DFU device
    
    Download	[====================     ]  80%      4788224 bytesInvalid DFU suffix signature
    
    A valid DFU suffix will be required in a future dfu-util release!!!
    
    Error during download
    
    dfu-util 0.9
    
    
    
    Copyright 2005-2009 Weston Schmidt, Harald Welte and OpenMoko Inc.
    
    Copyright 2010-2016 Tormod Volden and Stefan Schmidt
    
    This program is Free Software and has ABSOLUTELY NO WARRANTY
    
    Please report bugs to http://sourceforge.net/p/dfu-util/tickets/
    
    
    
    Deducing device DFU version from functional descriptor length
    
    Invalid DFU suffix signature
    
    A valid DFU suffix will be required in a future dfu-util release!!!
    
    Device has DFU interface, but has no DFU functional descriptor
    
    No DFU capable USB device available

     

    Сейчас буду разбираться

  3. Здравствуйте!

    Есть набор для разработки. Пытаюсь загрузить дистрибутив ubilinux по инструкции

    Установка, вроде, проходит корректно, но возникает такая проблема, что ранее установленная система Yocto linux все равно запускается после перезагрузки (через клавишу reset на плате, например). Возможно, нужно как-то предварительно очистить flash устройства или что-то подобное... 

    Подскажите, пожалуйста, что делаю неверно?

    Новичок в Unix-подобных системах...

  4. В 26.07.2019 в 19:18, Darth Vader сказал:

    Напишите письмо в техподдержку [email protected] - они в курсе проблемы (не приходит письмо со ссылкой для активации учётной записи), решат её быстро, придёт письмо.

    До перехода на тактирование от PLL необходимо  установить требуемую по описанию на МК задержку доступа к флеш-памяти (регистр MDR_EEPROM->CMD). А после - откорректировать режим работы встроенного регулятора напряжения питания ядра и требуемую нагрузку на него (регистр MDR_BKP->REG_0E).

    
    TIMER_ITConfig(TIMERn, TIMER_STATUS_CNT_ZERO | TIMER_STATUS_CNT_ARR, ENABLE);

    Зачем разрешили прерывание по обоим событиям? Они всегда следуют друг за другом: сначала СNT==ARR, затем таймер перезагружается нулем и возникает событие CNT==0. Разрешите прерывание только по одному из событий.

    Ну и моргать светодиодом в прерывании - это не заметно для глаза ввиду большой частоты. Настройте таймер на прерывание раз в секунду - тогда увидите.

     

    Darth Vader, огромное спасибо за адекватную помощь и подсказки!

    Насчет моргания светодиодом это да, при частоте 1 КГц незаметно ничего, но на данном этапе при моей текущей настройке тактовых частот мерцание происходит где-то с частотой 0,5 Гц, что достаточно заметно глазу, что говорит о том, что настройка тактирования совсем неверна. 

    В настройке таймера ошибся, этот момент уже поправил.

  5. Всем доброго времени суток!

    Хотел данную проблему поднять на форуме Миландра, но там активация аккаунта что-то затягивается... жду ответа от админов форума.

    Есть Отладочный комплект для микроконтроллера 1986ВЕ1Т. Пытаюсь настроить тактирование камня на частоте 80 МГц (внешний кварц 8 МГц).

    Делаю так:

    /* Включаем генератор на внешнем кварце (8 МГц) */
    RST_CLK_HSEconfig(RST_CLK_HSE_ON);
    while (RST_CLK_HSEstatus() != SUCCESS); /* Ждем стабилизации частоты */
    
    /* Настраиваем источник и коэффициент умножения PLL
     * (CPU_C1_SEL = HSE / 1 * 10 = 8 МГц / 1 * 10 = 80 МГц)
     */
    RST_CLK_CPU_PLLconfig(RST_CLK_CPU_PLLsrcHSEdiv1, RST_CLK_CPU_PLLmul10);
    
    /* Включаем PLL, но еще не подключаем к кристаллу (Блок умножения частоты) */
    RST_CLK_CPU_PLLcmd(ENABLE); 
    while (RST_CLK_CPU_PLLstatus() != SUCCESS); /* Ждем стабилизации */
    
    /* Делитель С3 (CPU_C3_SEL = CPU_C2_SEL) */
    RST_CLK_CPUclkPrescaler(RST_CLK_CPUclkDIV1);
    
    /* На С2 идет с PLL, а не напрямую с С1 (CPU_C2_SEL = PLL) */
    RST_CLK_CPU_PLLuse(ENABLE);
    
    /* CPU берет тактирование с выхода С3
     * (HCLK_SEL = CPU_C3_SEL = 80 МГц) 
     */
    RST_CLK_CPUclkSelection(RST_CLK_CPUclkCPU_C3);

    Проверить пытаюсь так:

    void delay_ms(volatile uint64_t milisec)
    {
        milisec *= 80000; /* CLK_CPU = 80 MHz -> 80000 - 1ms */
        while (milisec)
            milisec--;
    }
    
    ....
      
    int main(void)
    {
        freq_init(); /* 80 МГц */
        tmr_init();
        
        while(1)
        {
            delay_ms(1000);
        }
    }

    Еще настраиваю таймер на прерывание каждую миллисекунду (на вход модуля должно быть 80 МГц после настройки частот):

    /* Модуль tmr.c */
    
    #define CLOCK_PCLK  RST_CLK_PCLK_TIMER1
    #define TIMERn      MDR_TIMER1
    #define TIMER_IRQ   TIMER1_IRQn
    
    /* 1 ms */
    void tmr_init(void)
    {
        TIMER_CntInitTypeDef tmr;
        
        RST_CLK_PCLKcmd(CLOCK_PCLK, ENABLE); /* Тактирование таймера */
        
        /* 80 MHz на вход. Настройка на 1ms */
        tmr.TIMER_ETR_Prescaler     = TIMER_ETR_Prescaler_None; /* Не делить входную частоту */
        tmr.TIMER_Prescaler         = 8000;
        tmr.TIMER_Period            = 10; /* Дойдя до этого значения - перезагружаем таймер */
        tmr.TIMER_CounterMode       = TIMER_CntMode_ClkFixedDir; /* Фиксированное направление счета */
        tmr.TIMER_CounterDirection  = TIMER_CntDir_Up; /* счет вверх */
        tmr.TIMER_ARR_UpdateMode    = TIMER_ARR_Update_On_CNT_Overflow; /* Обновление по переполнению */ 
        tmr.TIMER_IniCounter        = 0;
        
        TIMER_CntInit(TIMERn, &tmr);
        TIMER_ITConfig(TIMERn, TIMER_STATUS_CNT_ZERO | TIMER_STATUS_CNT_ARR, ENABLE);
        NVIC_EnableIRQ(TIMER_IRQ);
        TIMER_Cmd(TIMERn, ENABLE);
    }
    
    void TIMER1_IRQHandler(void)
    {
        TIMER_ClearFlag(TIMERn, TIMER_STATUS_CNT_ZERO | TIMER_STATUS_CNT_ARR);
        
        led_set(LED_1, led_get(LED_1) ^ 1); /* Блинк светодиодом */
    }

    Но не получаю частоты 80 МГц даже близко...

    Подскажите, возможно, я жестко косячу...

  6. Здравствуйте.

    Сейчас занимаюсь освоением CAN стека CANopenNode. Можете подсказать как настроить этот стек, как настроить словарь и как взаимодействовать с ним? 

    Сконфигурировал стек с настройкой CO_NO_SDO_CLIENT = 0 (так понял, что так просто Client без Master). Запустил стек на STM32F407 без каких-либо других изменений. Смотрю данные с шины через Марафоновский USB-CAN и приложением CANWise. Все, что я вижу в CANwise'е это Heartbeat'ы с состоянием 0x5 и PDO запросы (0x1B0+NodeID(0x30), 0x2B0+NodeID(0x30), 0x3B0+NodeID(0x30)).

×
×
  • Создать...