Например TDA7294

Форум РадиоКот • Просмотр темы - Не запускается умножитель тактовой частоты STM32F407ZGT6
Форум РадиоКот
Здесь можно немножко помяукать :)





Текущее время: Сб ноя 23, 2024 13:46:25

Часовой пояс: UTC + 3 часа


ПРЯМО СЕЙЧАС:



Начать новую тему Ответить на тему  [ Сообщений: 38 ]  1,  
Автор Сообщение
Не в сети
 Заголовок сообщения: Не запускается умножитель тактовой частоты STM32F407ZGT6
СообщениеДобавлено: Ср ноя 06, 2024 04:25:37 
Открыл глаза

Зарегистрирован: Пт апр 22, 2011 18:41:48
Сообщений: 71
Рейтинг сообщения: 0
Уважаемые коллеги, всем здравствуйте! :)

Возникла проблема с настройкой умножителя тактовой частоты микроконтроллера STM32F407ZGT6. После включения бита PLL_ON в регистре PLL_CFGR не происходит установка бита PLL_RDY в этом же регистре.
При этом раньше код работал, а потом вдруг перестал. На всякий случай проосциллографировал напряжение на выводах питания - всё в пределах нормы. Что ещё может мешать ему настроить PLL - ума не приложу.

Настраиваю от HSI. HSE тоже имеется, но он тоже не запускается, возможно, по той же причине, что и PLL (в данный момент HSE не запущен и на выводах микроконтроллера, подключенных к HSE, осциллограф показывает GND)

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

Код настройки прилагаю.

Код:
void InitRCC (void) {
   dummy_loop(100000);
   // Увеличиваем задержку чтения из Flash перед повышением тактовой частоты
   FLASH->ACR |= ( 7 << FLASH_ACR_LATENCY_Pos );
   for ( Iteration1 = 0; Iteration1 < 100000; Iteration1++ );
    // Настраивааем умножитель тактовой частоты
   RCC->PLLCFGR = ( 2 << 28 ) | ( 8 << RCC_PLLCFGR_PLLM_Pos ) | ( 96 << RCC_PLLCFGR_PLLN_Pos ) | ( 0 << RCC_PLLCFGR_PLLP_Pos) | ( 4 << RCC_PLLCFGR_PLLQ_Pos );
   for ( Iteration1 = 0; Iteration1 < 100000; Iteration1++ );
   RCC->CR |= ( 1 << RCC_CR_PLLON_Pos ); // Включаем умножитель тактовой частоты
   for ( Iteration1 = 0; Iteration1 < 100000; Iteration1++ );

   /********************************************/
   /* ЗДЕСЬ ПРОИСХОДИТ ЗАВИСАНИЕ ПРОГРАММЫ !!! */
   /********************************************/
   while (((RCC->CR)&(1<<RCC_CR_PLLRDY_Pos)) == 0) {} // Ожидаем готовности умножителя тактовой частоты <--- ЗДЕСЬ ПРОИСХОДИТ ЗАВИСАНИЕ ПРОГРАММЫ

   for ( Iteration1 = 0; Iteration1 < 100000; Iteration1++ );
   // Switch clock source from HSI16 on PLL
   RCC->CFGR = ( 2 << RCC_CFGR_SW_Pos ); // Переключаем тактирование ядра с HSI16 на PLL
   for ( Iteration1 = 0; Iteration1 < 100000; Iteration1++ );
   RCC->AHB1ENR |= ( 1 << RCC_AHB1ENR_GPIOAEN_Pos) | ( 1 << RCC_AHB1ENR_GPIOBEN_Pos )| ( 1 << RCC_AHB1ENR_GPIOCEN_Pos) | ( 1 << RCC_AHB1ENR_GPIODEN_Pos ) | ( 1 << RCC_AHB1ENR_GPIOEEN_Pos ) | ( 1 << RCC_AHB1ENR_GPIOFEN_Pos ) | ( 1 << RCC_AHB1ENR_CCMDATARAMEN_Pos );
   for ( Iteration1 = 0; Iteration1 < 100000; Iteration1++ );
   RCC->APB1ENR |= ( 1 << RCC_APB1ENR_TIM4EN_Pos ) | ( 1 << RCC_APB1ENR_TIM3EN_Pos) | ( 1 << RCC_APB1ENR_TIM2EN_Pos ) | ( 1 << RCC_APB1ENR_DACEN_Pos );
   for ( Iteration1 = 0; Iteration1 < 100000; Iteration1++ );
   RCC->APB2ENR = ( 1 << RCC_APB2ENR_ADC1EN_Pos ) | ( 1 << RCC_APB2ENR_ADC2EN_Pos ) | ( 1 << RCC_APB2ENR_ADC3EN_Pos );
   for ( Iteration1 = 0; Iteration1 < 100000; Iteration1++ );
}


З.Ы. Прошу прощения за созданные четыре темы - я не виноват. При создании темы получал сообщение вроде "Ошибка выполнения SQL-запроса, попробуйте ещё раз бла-бла-бла". Ну я и пробовал ещё раз. Как теперь удалить три лишние сообщения не знаю.

_________________
Если я где-то ошибаюсь, прошу от меня этого не скрывать. Заранее очень признателен :)


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Не запускается умножитель тактовой частоты STM32F407ZGT6
СообщениеДобавлено: Ср ноя 06, 2024 08:24:25 
Сверлит текстолит когтями

Зарегистрирован: Вт ноя 19, 2019 06:10:18
Сообщений: 1133
Рейтинг сообщения: 0
У меня сделано так:
Спойлер
Код:
////////////////////////////////////////////////////////////////////////////////

int __low_level_init(void)
{
    __disable_irq();

    // Настройка FLASH
    FLASH -> ACR = \
        FLASH_ACR_PRFTEN    |
        FLASH_ACR_ICEN      |
        FLASH_ACR_DCEN      |
        FLASH_ACR_LATENCY_5WS;

    // Тактирование ----------
    // Включаем HSE = 8 MHz
    RCC -> CR = _VAL2FLD( RCC_CR_HSITRIM, 16 ) | RCC_CR_HSION | RCC_CR_HSEON;

    while( !( RCC -> CR & RCC_CR_HSERDY ) )
    {};

    // Задаём источники тактирования и прескалеры SYSCLK = 168 МГц  USB = 48 МГц
    RCC -> PLLCFGR = \
        RCC_PLLCFGR_PLLSRC_HSE              |
        _VAL2FLD( RCC_PLLCFGR_PLLQ, 7 )     |
        _VAL2FLD( RCC_PLLCFGR_PLLN, 336 )   |
        _VAL2FLD( RCC_PLLCFGR_PLLM , 8 )    |
        RCC_PLLCFGR_PLLP_div2;

    RCC -> CR = \
        _VAL2FLD( RCC_CR_HSITRIM, 16 )  |
        RCC_CR_HSION |
        RCC_CR_HSEON |
        RCC_CR_PLLON;   //Включаем PLL

    while( !( RCC -> CR & RCC_CR_PLLRDY ) )
    {};

    // Переключаемся на PLL с установленнными ранее прескалерами
    RCC -> CFGR = \
        RCC_CFGR_MCO2_HSE               |
        RCC_CFGR_MCO2PRE_div1           |
        RCC_CFGR_MCO1PRE_div1           |
        RCC_CFGR_I2SSRC_PLLI2S          |
        RCC_CFGR_MCO1_HSE               |
        _VAL2FLD( RCC_CFGR_RTCPRE, 8 )  |
        //_VAL2FLD( RCC_CFGR_PPRE2, 0x04 )|   // /2
        //_VAL2FLD( RCC_CFGR_PPRE1, 0x05 )|   // /4
        RCC_CFGR_PPRE2_DIV1             |
        RCC_CFGR_PPRE1_DIV2             |
        RCC_CFGR_HPRE_DIV1              |
        RCC_CFGR_SW_PLL;

    SystemCoreClock = 168'000'000;

    RCC-> CR = \
        _VAL2FLD( RCC_CR_HSITRIM, 16 )  |
        RCC_CR_HSEON                    |
        RCC_CR_PLLON;                       // Выключаем HSI

    #ifdef __DEBUG_SRAM__
   
      SYSCFG->MEMRMP = 3;  //0x20000000 -> 0x00000000

    #endif
     
  return( 1 );
}

////////////////////////////////////////////////////////////////////////////////


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Не запускается умножитель тактовой частоты STM32F407ZGT6
СообщениеДобавлено: Ср ноя 06, 2024 10:05:46 
Встал на лапы

Зарегистрирован: Вт окт 01, 2024 15:22:33
Сообщений: 135
Рейтинг сообщения: 0
Код:
   FLASH->ACR |= ( 7 << FLASH_ACR_LATENCY_Pos );
   for ( Iteration1 = 0; Iteration1 < 100000; Iteration1++ );

ACR по умолчанию равно трем, если, допустим, таким образом туда писать 4, то получим 7... Цикл бесполезен, оптимизатор его все равно выкинет, нужно проверять именно поле ACR до тех пор пока оттуда не станет читаться записанное значение.

Ледокот писал(а):
Код:
   RCC->PLLCFGR = ( 2 << 28 ) | ( 8 << RCC_PLLCFGR_PLLM_Pos ) | ( 96 << RCC_PLLCFGR_PLLN_Pos ) | ( 0 << RCC_PLLCFGR_PLLP_Pos) | ( 4 << RCC_PLLCFGR_PLLQ_Pos );

Что такое (2 << 28)? Последние 4 бита регистра - Reserved.

Ледокот писал(а):
Код:
   RCC->CR |= ( 1 << RCC_CR_PLLON_Pos );

Незачем постоянно единички сдвигать, есть же просто RCC_CR_PLLON или RCC_CR_PLLON_Msk.

Ледокот писал(а):
Код:
   RCC->CFGR = ( 2 << RCC_CFGR_SW_Pos ); // Переключаем тактирование ядра с HSI16 на PLL
   for ( Iteration1 = 0; Iteration1 < 100000; Iteration1++ );

Проверять нужно поле SWS, софтовая задежка при инициализации встречается довольно редко, а у тебя они повсеместно натыканы )

Ледокот писал(а):
На всякий случай проосциллографировал напряжение на выводах питания - всё в пределах нормы.

Плата не самодельная случайно?


Вернуться наверх
 
PCBWay - всего $5 за 10 печатных плат, первый заказ для новых клиентов БЕСПЛАТЕН

Сборка печатных плат от $30 + БЕСПЛАТНАЯ доставка по всему миру + трафарет

Онлайн просмотровщик Gerber-файлов от PCBWay + Услуги 3D печати
Не в сети
 Заголовок сообщения: Re: Не запускается умножитель тактовой частоты STM32F407ZGT6
СообщениеДобавлено: Ср ноя 06, 2024 16:38:39 
Открыл глаза

Зарегистрирован: Пт апр 22, 2011 18:41:48
Сообщений: 71
Рейтинг сообщения: 0
У меня сделано так:
Спойлер
Код:
////////////////////////////////////////////////////////////////////////////////

int __low_level_init(void)
{
    __disable_irq();

    // Настройка FLASH
    FLASH -> ACR = \
        FLASH_ACR_PRFTEN    |
        FLASH_ACR_ICEN      |
        FLASH_ACR_DCEN      |
        FLASH_ACR_LATENCY_5WS;

    // Тактирование ----------
    // Включаем HSE = 8 MHz
    RCC -> CR = _VAL2FLD( RCC_CR_HSITRIM, 16 ) | RCC_CR_HSION | RCC_CR_HSEON;

    while( !( RCC -> CR & RCC_CR_HSERDY ) )
    {};

    // Задаём источники тактирования и прескалеры SYSCLK = 168 МГц  USB = 48 МГц
    RCC -> PLLCFGR = \
        RCC_PLLCFGR_PLLSRC_HSE              |
        _VAL2FLD( RCC_PLLCFGR_PLLQ, 7 )     |
        _VAL2FLD( RCC_PLLCFGR_PLLN, 336 )   |
        _VAL2FLD( RCC_PLLCFGR_PLLM , 8 )    |
        RCC_PLLCFGR_PLLP_div2;

    RCC -> CR = \
        _VAL2FLD( RCC_CR_HSITRIM, 16 )  |
        RCC_CR_HSION |
        RCC_CR_HSEON |
        RCC_CR_PLLON;   //Включаем PLL

    while( !( RCC -> CR & RCC_CR_PLLRDY ) )
    {};

    // Переключаемся на PLL с установленнными ранее прескалерами
    RCC -> CFGR = \
        RCC_CFGR_MCO2_HSE               |
        RCC_CFGR_MCO2PRE_div1           |
        RCC_CFGR_MCO1PRE_div1           |
        RCC_CFGR_I2SSRC_PLLI2S          |
        RCC_CFGR_MCO1_HSE               |
        _VAL2FLD( RCC_CFGR_RTCPRE, 8 )  |
        //_VAL2FLD( RCC_CFGR_PPRE2, 0x04 )|   // /2
        //_VAL2FLD( RCC_CFGR_PPRE1, 0x05 )|   // /4
        RCC_CFGR_PPRE2_DIV1             |
        RCC_CFGR_PPRE1_DIV2             |
        RCC_CFGR_HPRE_DIV1              |
        RCC_CFGR_SW_PLL;

    SystemCoreClock = 168'000'000;

    RCC-> CR = \
        _VAL2FLD( RCC_CR_HSITRIM, 16 )  |
        RCC_CR_HSEON                    |
        RCC_CR_PLLON;                       // Выключаем HSI

    #ifdef __DEBUG_SRAM__
   
      SYSCFG->MEMRMP = 3;  //0x20000000 -> 0x00000000

    #endif
     
  return( 1 );
}

////////////////////////////////////////////////////////////////////////////////


Спасибо за ответ! Прежде чем создавать свою тему, я пробовал Ваш код, наткнулся где-то в обсуждениях подобной проблемы здесь на форуме. На моей плате код ведёт себя точно так же, как и мой: при попытке запустить HSE зависает в цикле ожидания флага готовности HSE, а если не включать HSE и пытаться запуститься от HSI (я не забываю, что HSE 8 МГц, а HSI 16 МГц, и коэффициенты PLLN, PLLP, PLLM и PLLQ взял из CubeMX), то код зависает в цикле ожидания флага готовности PLL.

Сама неисправность начала проявляться после некоторых доработок схемы (доработки делал не я, как и схему, я только программу на неё пишу), до этого код работал нормально. Первое предположение было, что при доработке платы статикой выбило контроллер. Контроллер перепаяли на другой, но ничего не поменялось.

На данный момент думаю проосциллографировать все выводы микроконтроллера, чтобы понять, нет ли нештатных уровней на входах, которые могут сбивать работу RCC.

Судя по симптомам, либо что-то мешает работе RCC, либо микроконтроллер вышел из строя в части RCC. Но так, чтобы два контроллера подряд демонстрировали один и тот же отказ - сразу возникает подозрение на схему, а не на контроллер. Поэтому я и пошёл сюда с вопросом.

_________________
Если я где-то ошибаюсь, прошу от меня этого не скрывать. Заранее очень признателен :)


Вернуться наверх
 
Приглашаем на вебинар «Решения SUNCO для силовой электроники. Выбираем идеальный силовой модуль»

Приглашаем 3 декабря 2024 на вебинар, посвященный силовым модулям ведущего китайского производителя SUNCO - одного из мировых лидеров по производству дискретных полупроводниковых компонентов. На вебинаре вы узнаете о новинках, включая модули 17 класса в корпусе E3, и контроле качества на всех этапах производства. Вы также узнаете о новейших продуктах – IGBT-, SiC-, диодных и тиристорных модулях, погрузитесь в современные топологии, сравните характеристики IGBT-чипов разных поколений.

Подробнее>>
Не в сети
 Заголовок сообщения: Re: Не запускается умножитель тактовой частоты STM32F407ZGT6
СообщениеДобавлено: Ср ноя 06, 2024 16:47:33 
Встал на лапы

Зарегистрирован: Вт окт 01, 2024 15:22:33
Сообщений: 135
Рейтинг сообщения: 0
Ледокот писал(а):
Но так, чтобы два контроллера подряд демонстрировали один и тот же отказ - сразу возникает подозрение на схему, а не на контроллер. Поэтому я и пошёл сюда с вопросом.

Ну и. Схема где? )


Вернуться наверх
 
Решения SUNCO для надежной защиты сигнальных цепей интерфейсов от электростатических разрядов

Всплески перенапряжения являются серьезной угрозой надежности работы радиоэлектронных устройств. Причины их появления различны, это могут быть коммутационные переходные процессы в системе электропитания устройств, разряды молний, электростатические разряды. Для создания эффективной и современной системы защиты от ЭСР компания SUNCO разработала надежные и качественные супрессоры, представляющие собой TVS- и ESD-диоды, а также сборки на их основе. Компоненты SUNCO не только не уступают, но часто превосходят по характеристикам аналогичную продукцию других брендов.

Подробнее>>
Не в сети
 Заголовок сообщения: Re: Не запускается умножитель тактовой частоты STM32F407ZGT6
СообщениеДобавлено: Ср ноя 06, 2024 16:52:15 
Открыл глаза

Зарегистрирован: Пт апр 22, 2011 18:41:48
Сообщений: 71
Рейтинг сообщения: 0
Плата не самодельная случайно?

Плата самодельная, но делал не я ))) В общем-то, её делал вполне приличный схемотехник, но специализирующийся не на STM-ках, поэтому мог что-то налажать. Более того, проблемы начались после того, как плата была отдана мной схемотехнику на доработку. И после доработки умножитель перестал запускаться. Да и внешний кварц не стартует (вообще я умножитель запускал он встроенного, но тут решил проверить, будет ли HSE запускаться - не запускается). А вернуть плату человеку со словами "ты тут что-то делал, и перестало работать, вот и разбирайся" - как-то неправильно, яжпрограммист, нужно понять, что там стряслось с МК. Контроллер уже заменяли - ничего не поменялось. Пока подумываю своими руками перепаять, с соблюдением всех антистатических мероприятий.

ACR по умолчанию равно трем, если, допустим, таким образом туда писать 4, то получим 7...

Согласен, как-то не подумал об этом, спасибо! Но в данном случае на работу не влияет.
Цикл бесполезен, оптимизатор его все равно выкинет

Чтобы это не произошло, я выкинул оптимизатор ))
Нужно проверять именно поле ACR до тех пор пока оттуда не станет читаться записанное значение.

Спасибо.
Что такое (2 << 28)? Последние 4 бита регистра - Reserved.

По ReferenceManual эти старшие 4 бита регистра имеют значение 0x2
Незачем постоянно единички сдвигать, есть же просто RCC_CR_PLLON или RCC_CR_PLLON_Msk.

Да, Вы правы, переучиваюсь и всё никак не переучусь, до этого вместо CMSIS пользовался своими библиотеками
Проверять нужно поле SWS, софтовая задежка при инициализации встречается довольно редко, а у тебя они повсеместно натыканы )

Я недавно перешёл на STM, и, честно говоря, мне он кажется очень капризным. Кое-где софтовая задержка ему нужна, а запоминать, где нужна, а где не нужна, мне сейчас немного некогда ))) Поэтому на каждое изменение регистра я леплю софтовую задержку.

_________________
Если я где-то ошибаюсь, прошу от меня этого не скрывать. Заранее очень признателен :)


Последний раз редактировалось Ледокот Ср ноя 06, 2024 16:59:21, всего редактировалось 2 раз(а).

Вернуться наверх
 
В сети
 Заголовок сообщения: Re: Не запускается умножитель тактовой частоты STM32F407ZGT6
СообщениеДобавлено: Ср ноя 06, 2024 16:54:15 
Это не хвост, это антенна

Карма: 25
Рейтинг сообщений: 396
Зарегистрирован: Сб май 05, 2012 20:24:52
Сообщений: 1448
Откуда: KN34PC, Болгария
Рейтинг сообщения: 0
В начало попробуйте (быстрым способом) узнать, работает ли МК (хардуер). Вариант: с безусловно рабочим кодом через STM32CubeIDE, по NSI, с/без PLL, вн. кварц, с/без PLL, мигание на всех пинах. При обходе светодиодов пинов мигают или нет. Тогда все ОК, попробуйте через CMSIS в ваших методах запустить генератор, PLL и т.д. Знаю, что не нравится Cube, но хотя бы для теста. В противном случае есть больше неизвестных - что не работает: МК, код к его и т.д. (частично пользуюсь переводчиком).
---
(Не пользуйтесь такой задержкой: for (Iteration1 = 0; Iteration1 < 100000; ... . Ни к чему хорошему не приведет. Следите за флагами в регистах. У каждого модуля в МК их много).


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Не запускается умножитель тактовой частоты STM32F407ZGT6
СообщениеДобавлено: Ср ноя 06, 2024 17:01:25 
Встал на лапы

Зарегистрирован: Вт окт 01, 2024 15:22:33
Сообщений: 135
Рейтинг сообщения: 0
Плата самодельная, но делал не я ))) В общем-то, её делал вполне приличный схемотехник, но специализирующийся не на STM-ках, поэтому мог что-то налажать.

PLL запитывается от аналогового питания, может тут накосячили. Возможно конденсаторы на VCAP не поставили, или поставили, но на 100nF.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Не запускается умножитель тактовой частоты STM32F407ZGT6
СообщениеДобавлено: Ср ноя 06, 2024 17:08:50 
Открыл глаза

Зарегистрирован: Пт апр 22, 2011 18:41:48
Сообщений: 71
Рейтинг сообщения: 0
В начало попробуйте (быстрым способом) узнать, работает ли МК (хардуер). Вариант: с безусловно рабочим кодом через STM32CubeIDE, по NSI, с/без PLL, вн. кварц, с/без PLL, мигание на всех пинах. При обходе светодиодов пинов мигают или нет. Тогда все ОК, попробуйте через CMSIS в ваших методах запустить генератор, PLL и т.д. Знаю, что не нравится Cube, но хотя бы для теста. В противном случае есть больше неизвестных - что не работает: МК, код к его и т.д. (частично пользуюсь переводчиком).
---
(Не пользуйтесь такой задержкой: for (Iteration1 = 0; Iteration1 < 100000; ... . Ни к чему хорошему не приведет. Следите за флагами в регистах. У каждого модуля в МК их много).


Спасибо за ответ.
Если не запускать PLL, то контроллер работает (только очень медленно)
Подготовить в CubeMX проект с инициализацией и попробовать его запустить я пробовал, но не вышло ничего - среда ругнулась на какой-то незагруженный модуль, а для загрузки предложила регистрироваться на сайте, в общем, после осциллографирования я этим займусь, если не найдётся явная ошибка. Код-то рабочий (и он даже работал).

Добавлено after 59 seconds:
PLL запитывается от аналогового питания, может тут накосячили. Возможно конденсаторы на VCAP не поставили, или поставили, но на 100nF.


Аналоговое питание вроде ничего...
Оба VCAP на 3,3 мкФ 10% 25 Вольт.

_________________
Если я где-то ошибаюсь, прошу от меня этого не скрывать. Заранее очень признателен :)


Вернуться наверх
 
В сети
 Заголовок сообщения: Re: Не запускается умножитель тактовой частоты STM32F407ZGT6
СообщениеДобавлено: Ср ноя 06, 2024 17:33:05 
Это не хвост, это антенна

Карма: 25
Рейтинг сообщений: 396
Зарегистрирован: Сб май 05, 2012 20:24:52
Сообщений: 1448
Откуда: KN34PC, Болгария
Рейтинг сообщения: 0
STM32F407ZGT6 HSI, PLL ON, SYSCLK 168 MHz, blink GPIOA 100ms (без некоторых выводов)
PA0: WKUP
PA8: MCO -> HSI для теста, включите частотомер
PA13: SWDIO
PA14: SWCLK

(Не могу протестировать, нет модуля с этим МК).


Вложения:
blinks.zip [4.97 KiB]
Скачиваний: 29
Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Не запускается умножитель тактовой частоты STM32F407ZGT6
СообщениеДобавлено: Ср ноя 06, 2024 19:01:44 
Сверлит текстолит когтями

Зарегистрирован: Вт ноя 19, 2019 06:10:18
Сообщений: 1133
Рейтинг сообщения: 0
Ледокот писал(а):
я пробовал Ваш код

Тогда, вероятно, дело в "железе".
Была проблема с запуском на плохо отмытой плате.
Проверьте запуск HSE. Я не заметил у вас его запуска и ожидания готовности. Это нужно делать перед настройкой PLL.
Код:
    RCC -> CR = _VAL2FLD( RCC_CR_HSITRIM, 16 ) | RCC_CR_HSION | RCC_CR_HSEON;

    while( !( RCC -> CR & RCC_CR_HSERDY ) )
    {};

Ну и флаги готовности HSI, HSE и PLL посмотрите.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Не запускается умножитель тактовой частоты STM32F407ZGT6
СообщениеДобавлено: Ср ноя 06, 2024 19:33:33 
Открыл глаза

Зарегистрирован: Пт апр 22, 2011 18:41:48
Сообщений: 71
Рейтинг сообщения: 0
Проверьте запуск HSE.


Пробовал. Отдельно пробовал и HSE запускать. Не запускается. Т.е. флаг HSE_RDY не устанавливается после установки флага HSE_ON.
Вроде бы понятно, что проблема в аппаратуре. Но вот чем она вызвана - не пойму.
Говорят, что vcap_1 и vcap_2 могут влиять. В схеме заложены 3,3 мкФ 10% 25В. Я не знаю, насколько это нормальные параметры.

_________________
Если я где-то ошибаюсь, прошу от меня этого не скрывать. Заранее очень признателен :)


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Не запускается умножитель тактовой частоты STM32F407ZGT6
СообщениеДобавлено: Ср ноя 06, 2024 19:41:06 
Встал на лапы

Зарегистрирован: Вт окт 01, 2024 15:22:33
Сообщений: 135
Рейтинг сообщения: 0
В схеме заложены 3,3 мкФ 10% 25В. Я не знаю, насколько это нормальные параметры.

Должно быть 2.2uF, но вряд ли это критично настолько, чтоб PLL вообще не завелся. А кроме стабильного питания даже не знаю на что думать...


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Не запускается умножитель тактовой частоты STM32F407ZGT6
СообщениеДобавлено: Ср ноя 06, 2024 19:58:41 
Сверлит текстолит когтями

Зарегистрирован: Вт ноя 19, 2019 06:10:18
Сообщений: 1133
Рейтинг сообщения: 0
Ледокот писал(а):
Т.е. флаг HSE_RDY не устанавливается после установки флага HSE_ON.

Проблема не в PLL, а в HSE.
Проверяйте кварц, отмывку флюса с платы в районе кварца, нагрузочные конденсаторы кварца, схему подключения кварца. Не лишнем будет показать схему и трассировку.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Не запускается умножитель тактовой частоты STM32F407ZGT6
СообщениеДобавлено: Ср ноя 06, 2024 20:12:11 
Встал на лапы

Зарегистрирован: Вт окт 01, 2024 15:22:33
Сообщений: 135
Рейтинг сообщения: 0
Проблема не в PLL, а в HSE.

При чем тут HSE, у него PLL тактируется от HSI.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Не запускается умножитель тактовой частоты STM32F407ZGT6
СообщениеДобавлено: Ср ноя 06, 2024 20:20:48 
Открыл глаза

Зарегистрирован: Пт апр 22, 2011 18:41:48
Сообщений: 71
Рейтинг сообщения: 0
При чем тут HSE, у него PLL тактируется от HSI.

Хм, там в цепи питания Vdda (аналоговое питание, если я правильно понял) последовательно воткнута индуктивность. За ней два конденсатора... Попробую-ка я эту индуктивность зашунтировать... Есть подозрения, что там какие-то колебания нехорошие появляются.

_________________
Если я где-то ошибаюсь, прошу от меня этого не скрывать. Заранее очень признателен :)


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Не запускается умножитель тактовой частоты STM32F407ZGT6
СообщениеДобавлено: Ср ноя 06, 2024 21:47:21 
Опытный кот
Аватар пользователя

Карма: 16
Рейтинг сообщений: 183
Зарегистрирован: Вс дек 02, 2012 16:58:33
Сообщений: 863
Откуда: Уже не город Белых гор
Рейтинг сообщения: 0
Я не считал множители, но PLL имеет определённый диапазон рабочих частот, довольно узкий. Проверьте по даташиту, на какую частоту вы загоняете PLL, и находится ли она в допустимых пределах.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Не запускается умножитель тактовой частоты STM32F407ZGT6
СообщениеДобавлено: Ср ноя 06, 2024 22:10:16 
Опытный кот

Карма: -2
Рейтинг сообщений: 35
Зарегистрирован: Пн сен 10, 2018 19:16:28
Сообщений: 852
Рейтинг сообщения: 0
GARMIN, раньше работало, когда схему кто-то доработал перестало работать.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Не запускается умножитель тактовой частоты STM32F407ZGT6
СообщениеДобавлено: Ср ноя 06, 2024 22:41:11 
Открыл глаза

Зарегистрирован: Пт апр 22, 2011 18:41:48
Сообщений: 71
Рейтинг сообщения: 0
Я не считал множители, но PLL имеет определённый диапазон рабочих частот, довольно узкий. Проверьте по даташиту, на какую частоту вы загоняете PLL, и находится ли она в допустимых пределах.

Проверял, когда писал код. Потом на всякий случай запустил CubeMX и настроил в нём сигналы тактовой частоты, подсмотрев значение битовых полей PLLM, PLLN, PLLP и PLLQ.

_________________
Если я где-то ошибаюсь, прошу от меня этого не скрывать. Заранее очень признателен :)


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Не запускается умножитель тактовой частоты STM32F407ZGT6
СообщениеДобавлено: Вс ноя 10, 2024 20:52:03 
Открыл глаза

Зарегистрирован: Пт апр 22, 2011 18:41:48
Сообщений: 71
Рейтинг сообщения: 0
Всё чудесатее и чудесатее.

Поэкспериментировал с кодом. Попробовал такой код:
Код:
        RCC->CR = ( 16 << RCC_CR_HSITRIM_Pos ) | ( 1 << RCC_CR_HSION_Pos );
        while (((RCC->CR)&(RCC_CR_HSIRDY_Msk)) == 0) {} // Ожидаем готовности внутреннего осциллятора

И контроллер виснет на второй строчке. Ок, пробую устанавливать бит HSIRDY принудительно:
Код:
        RCC->CR = ( 1 << RCC_CR_HSERDY_Pos ) | ( 1 << RCC_CR_HSEON_Pos ) | ( 16 << RCC_CR_HSITRIM_Pos ) | ( 1 << RCC_CR_HSIRDY_Pos ) | ( 1 << RCC_CR_HSION_Pos );
        while (((RCC->CR)&(RCC_CR_HSIRDY_Msk)) == 0) {} // Ожидаем готовности внутреннего осциллятора
        while (((RCC->CR)&(RCC_CR_HSERDY_Msk)) == 0) {} // Ожидаем готовности внешнего осциллятора

И всё нормально начинает работать, зависания во второй и третьей строчках нет, программа идёт дальше.
По той же схеме устанавливаю множители/делители умножителя тактовой частоты и бит готовности умножителя:
Код:
        RCC->PLLCFGR = ( 2 << 28 ) | ( 8 << RCC_PLLCFGR_PLLM_Pos ) | ( 96 << RCC_PLLCFGR_PLLN_Pos ) | ( 0 << RCC_PLLCFGR_PLLP_Pos) | ( 4 << RCC_PLLCFGR_PLLQ_Pos );
        RCC->CR |= ( 1 << RCC_CR_PLLRDY_Pos ) | ( 1 << RCC_CR_PLLON_Pos );
        while (((RCC->CR)&(1<<RCC_CR_PLLRDY_Pos)) == 0) {} // Ожидаем готовности умножителя тактовой частоты

И всё работает нормально, последующий код выполняется, контроллер работает на своих 96 МГц, все счастливы.

Вот что это было? Контрафактный микроконтроллер? Или я дебил?

_________________
Если я где-то ошибаюсь, прошу от меня этого не скрывать. Заранее очень признателен :)


Вернуться наверх
 
Показать сообщения за:  Сортировать по:  Вернуться наверх
Начать новую тему Ответить на тему  [ Сообщений: 38 ]  1,  

Часовой пояс: UTC + 3 часа


Кто сейчас на форуме

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 14


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  


Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB
Extended by Karma MOD © 2007—2012 m157y
Extended by Topic Tags MOD © 2012 m157y