| Форум РадиоКот https://radiokot.ru/forum/ |
|
| Не запускается умножитель тактовой частоты STM32F407ZGT6 https://radiokot.ru/forum/viewtopic.php?f=59&t=195484 |
Страница 1 из 2 |
| Автор: | Ледокот [ Ср ноя 06, 2024 04:25:37 ] |
| Заголовок сообщения: | Не запускается умножитель тактовой частоты STM32F407ZGT6 |
Уважаемые коллеги, всем здравствуйте! Возникла проблема с настройкой умножителя тактовой частоты микроконтроллера 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-запроса, попробуйте ещё раз бла-бла-бла". Ну я и пробовал ещё раз. Как теперь удалить три лишние сообщения не знаю. |
|
| Автор: | tonyk [ Ср ноя 06, 2024 08:24:25 ] |
| Заголовок сообщения: | Re: Не запускается умножитель тактовой частоты STM32F407ZGT6 |
У меня сделано так: СпойлерКод: //////////////////////////////////////////////////////////////////////////////// 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 ); } //////////////////////////////////////////////////////////////////////////////// |
|
| Автор: | Adrift [ Ср ноя 06, 2024 10:05:46 ] |
| Заголовок сообщения: | Re: Не запускается умножитель тактовой частоты STM32F407ZGT6 |
Код: 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, софтовая задежка при инициализации встречается довольно редко, а у тебя они повсеместно натыканы ) Ледокот писал(а): На всякий случай проосциллографировал напряжение на выводах питания - всё в пределах нормы. Плата не самодельная случайно? |
|
| Автор: | Ледокот [ Ср ноя 06, 2024 16:38:39 ] |
| Заголовок сообщения: | Re: Не запускается умножитель тактовой частоты STM32F407ZGT6 |
У меня сделано так: СпойлерКод: //////////////////////////////////////////////////////////////////////////////// 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. Но так, чтобы два контроллера подряд демонстрировали один и тот же отказ - сразу возникает подозрение на схему, а не на контроллер. Поэтому я и пошёл сюда с вопросом. |
|
| Автор: | Adrift [ Ср ноя 06, 2024 16:47:33 ] |
| Заголовок сообщения: | Re: Не запускается умножитель тактовой частоты STM32F407ZGT6 |
Ледокот писал(а): Но так, чтобы два контроллера подряд демонстрировали один и тот же отказ - сразу возникает подозрение на схему, а не на контроллер. Поэтому я и пошёл сюда с вопросом. Ну и. Схема где? ) |
|
| Автор: | Ледокот [ Ср ноя 06, 2024 16:52:15 ] |
| Заголовок сообщения: | Re: Не запускается умножитель тактовой частоты STM32F407ZGT6 |
Плата не самодельная случайно? Плата самодельная, но делал не я ))) В общем-то, её делал вполне приличный схемотехник, но специализирующийся не на STM-ках, поэтому мог что-то налажать. Более того, проблемы начались после того, как плата была отдана мной схемотехнику на доработку. И после доработки умножитель перестал запускаться. Да и внешний кварц не стартует (вообще я умножитель запускал он встроенного, но тут решил проверить, будет ли HSE запускаться - не запускается). А вернуть плату человеку со словами "ты тут что-то делал, и перестало работать, вот и разбирайся" - как-то неправильно, яжпрограммист, нужно понять, что там стряслось с МК. Контроллер уже заменяли - ничего не поменялось. Пока подумываю своими руками перепаять, с соблюдением всех антистатических мероприятий. ACR по умолчанию равно трем, если, допустим, таким образом туда писать 4, то получим 7... Согласен, как-то не подумал об этом, спасибо! Но в данном случае на работу не влияет. Цикл бесполезен, оптимизатор его все равно выкинет Чтобы это не произошло, я выкинул оптимизатор )) Нужно проверять именно поле ACR до тех пор пока оттуда не станет читаться записанное значение. Спасибо. Что такое (2 << 28)? Последние 4 бита регистра - Reserved. По ReferenceManual эти старшие 4 бита регистра имеют значение 0x2 Незачем постоянно единички сдвигать, есть же просто RCC_CR_PLLON или RCC_CR_PLLON_Msk. Да, Вы правы, переучиваюсь и всё никак не переучусь, до этого вместо CMSIS пользовался своими библиотеками Проверять нужно поле SWS, софтовая задежка при инициализации встречается довольно редко, а у тебя они повсеместно натыканы ) Я недавно перешёл на STM, и, честно говоря, мне он кажется очень капризным. Кое-где софтовая задержка ему нужна, а запоминать, где нужна, а где не нужна, мне сейчас немного некогда ))) Поэтому на каждое изменение регистра я леплю софтовую задержку. |
|
| Автор: | veso74 [ Ср ноя 06, 2024 16:54:15 ] |
| Заголовок сообщения: | Re: Не запускается умножитель тактовой частоты STM32F407ZGT6 |
В начало попробуйте (быстрым способом) узнать, работает ли МК (хардуер). Вариант: с безусловно рабочим кодом через STM32CubeIDE, по NSI, с/без PLL, вн. кварц, с/без PLL, мигание на всех пинах. При обходе светодиодов пинов мигают или нет. Тогда все ОК, попробуйте через CMSIS в ваших методах запустить генератор, PLL и т.д. Знаю, что не нравится Cube, но хотя бы для теста. В противном случае есть больше неизвестных - что не работает: МК, код к его и т.д. (частично пользуюсь переводчиком). --- (Не пользуйтесь такой задержкой: for (Iteration1 = 0; Iteration1 < 100000; ... . Ни к чему хорошему не приведет. Следите за флагами в регистах. У каждого модуля в МК их много). |
|
| Автор: | Adrift [ Ср ноя 06, 2024 17:01:25 ] |
| Заголовок сообщения: | Re: Не запускается умножитель тактовой частоты STM32F407ZGT6 |
Плата самодельная, но делал не я ))) В общем-то, её делал вполне приличный схемотехник, но специализирующийся не на STM-ках, поэтому мог что-то налажать. PLL запитывается от аналогового питания, может тут накосячили. Возможно конденсаторы на VCAP не поставили, или поставили, но на 100nF. |
|
| Автор: | Ледокот [ Ср ноя 06, 2024 17:08:50 ] |
| Заголовок сообщения: | Re: Не запускается умножитель тактовой частоты STM32F407ZGT6 |
В начало попробуйте (быстрым способом) узнать, работает ли МК (хардуер). Вариант: с безусловно рабочим кодом через 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 Вольт. |
|
| Автор: | veso74 [ Ср ноя 06, 2024 17:33:05 ] | ||
| Заголовок сообщения: | Re: Не запускается умножитель тактовой частоты STM32F407ZGT6 | ||
STM32F407ZGT6 HSI, PLL ON, SYSCLK 168 MHz, blink GPIOA 100ms (без некоторых выводов) PA0: WKUP PA8: MCO -> HSI для теста, включите частотомер PA13: SWDIO PA14: SWCLK (Не могу протестировать, нет модуля с этим МК).
|
|||
| Автор: | tonyk [ Ср ноя 06, 2024 19:01:44 ] |
| Заголовок сообщения: | Re: Не запускается умножитель тактовой частоты STM32F407ZGT6 |
Ледокот писал(а): я пробовал Ваш код Тогда, вероятно, дело в "железе". Была проблема с запуском на плохо отмытой плате. Проверьте запуск HSE. Я не заметил у вас его запуска и ожидания готовности. Это нужно делать перед настройкой PLL. Код: RCC -> CR = _VAL2FLD( RCC_CR_HSITRIM, 16 ) | RCC_CR_HSION | RCC_CR_HSEON; while( !( RCC -> CR & RCC_CR_HSERDY ) ) {}; Ну и флаги готовности HSI, HSE и PLL посмотрите. |
|
| Автор: | Ледокот [ Ср ноя 06, 2024 19:33:33 ] |
| Заголовок сообщения: | Re: Не запускается умножитель тактовой частоты STM32F407ZGT6 |
Проверьте запуск HSE. Пробовал. Отдельно пробовал и HSE запускать. Не запускается. Т.е. флаг HSE_RDY не устанавливается после установки флага HSE_ON. Вроде бы понятно, что проблема в аппаратуре. Но вот чем она вызвана - не пойму. Говорят, что vcap_1 и vcap_2 могут влиять. В схеме заложены 3,3 мкФ 10% 25В. Я не знаю, насколько это нормальные параметры. |
|
| Автор: | Adrift [ Ср ноя 06, 2024 19:41:06 ] |
| Заголовок сообщения: | Re: Не запускается умножитель тактовой частоты STM32F407ZGT6 |
В схеме заложены 3,3 мкФ 10% 25В. Я не знаю, насколько это нормальные параметры. Должно быть 2.2uF, но вряд ли это критично настолько, чтоб PLL вообще не завелся. А кроме стабильного питания даже не знаю на что думать... |
|
| Автор: | tonyk [ Ср ноя 06, 2024 19:58:41 ] |
| Заголовок сообщения: | Re: Не запускается умножитель тактовой частоты STM32F407ZGT6 |
Ледокот писал(а): Т.е. флаг HSE_RDY не устанавливается после установки флага HSE_ON. Проблема не в PLL, а в HSE. Проверяйте кварц, отмывку флюса с платы в районе кварца, нагрузочные конденсаторы кварца, схему подключения кварца. Не лишнем будет показать схему и трассировку. |
|
| Автор: | Adrift [ Ср ноя 06, 2024 20:12:11 ] |
| Заголовок сообщения: | Re: Не запускается умножитель тактовой частоты STM32F407ZGT6 |
Проблема не в PLL, а в HSE. При чем тут HSE, у него PLL тактируется от HSI. |
|
| Автор: | Ледокот [ Ср ноя 06, 2024 20:20:48 ] |
| Заголовок сообщения: | Re: Не запускается умножитель тактовой частоты STM32F407ZGT6 |
При чем тут HSE, у него PLL тактируется от HSI. Хм, там в цепи питания Vdda (аналоговое питание, если я правильно понял) последовательно воткнута индуктивность. За ней два конденсатора... Попробую-ка я эту индуктивность зашунтировать... Есть подозрения, что там какие-то колебания нехорошие появляются. |
|
| Автор: | GARMIN [ Ср ноя 06, 2024 21:47:21 ] |
| Заголовок сообщения: | Re: Не запускается умножитель тактовой частоты STM32F407ZGT6 |
Я не считал множители, но PLL имеет определённый диапазон рабочих частот, довольно узкий. Проверьте по даташиту, на какую частоту вы загоняете PLL, и находится ли она в допустимых пределах. |
|
| Автор: | linkov1959 [ Ср ноя 06, 2024 22:10:16 ] |
| Заголовок сообщения: | Re: Не запускается умножитель тактовой частоты STM32F407ZGT6 |
GARMIN, раньше работало, когда схему кто-то доработал перестало работать. |
|
| Автор: | Ледокот [ Ср ноя 06, 2024 22:41:11 ] |
| Заголовок сообщения: | Re: Не запускается умножитель тактовой частоты STM32F407ZGT6 |
Я не считал множители, но PLL имеет определённый диапазон рабочих частот, довольно узкий. Проверьте по даташиту, на какую частоту вы загоняете PLL, и находится ли она в допустимых пределах. Проверял, когда писал код. Потом на всякий случай запустил CubeMX и настроил в нём сигналы тактовой частоты, подсмотрев значение битовых полей PLLM, PLLN, PLLP и PLLQ. |
|
| Автор: | Ледокот [ Вс ноя 10, 2024 20:52:03 ] |
| Заголовок сообщения: | Re: Не запускается умножитель тактовой частоты STM32F407ZGT6 |
Всё чудесатее и чудесатее. Поэкспериментировал с кодом. Попробовал такой код: Код: 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 МГц, все счастливы. Вот что это было? Контрафактный микроконтроллер? Или я дебил? |
|
| Страница 1 из 2 | Часовой пояс: UTC + 3 часа |
| Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group http://www.phpbb.com/ |
|


