Возникла проблема с настройкой умножителя тактовой частоты микроконтроллера STM32F407ZGT6. После включения бита PLL_ON в регистре PLL_CFGR не происходит установка бита PLL_RDY в этом же регистре. При этом раньше код работал, а потом вдруг перестал. На всякий случай проосциллографировал напряжение на выводах питания - всё в пределах нормы. Что ещё может мешать ему настроить PLL - ума не приложу.
Настраиваю от HSI. HSE тоже имеется, но он тоже не запускается, возможно, по той же причине, что и PLL (в данный момент HSE не запущен и на выводах микроконтроллера, подключенных к HSE, осциллограф показывает GND)
Изначальное под подозрением был вышедший из за воздействия статического (или какого-то другого) электричества микроконтроллер, но после перепайки ничего не изменилось.
/********************************************/ /* ЗДЕСЬ ПРОИСХОДИТ ЗАВИСАНИЕ ПРОГРАММЫ !!! */ /********************************************/ while (((RCC->CR)&(1<<RCC_CR_PLLRDY_Pos)) == 0) {} // Ожидаем готовности умножителя тактовой частоты <--- ЗДЕСЬ ПРОИСХОДИТ ЗАВИСАНИЕ ПРОГРАММЫ
З.Ы. Прошу прощения за созданные четыре темы - я не виноват. При создании темы получал сообщение вроде "Ошибка выполнения SQL-запроса, попробуйте ещё раз бла-бла-бла". Ну я и пробовал ещё раз. Как теперь удалить три лишние сообщения не знаю.
_________________ Если я где-то ошибаюсь, прошу от меня этого не скрывать. Заранее очень признателен
ACR по умолчанию равно трем, если, допустим, таким образом туда писать 4, то получим 7... Цикл бесполезен, оптимизатор его все равно выкинет, нужно проверять именно поле ACR до тех пор пока оттуда не станет читаться записанное значение.
Спасибо за ответ! Прежде чем создавать свою тему, я пробовал Ваш код, наткнулся где-то в обсуждениях подобной проблемы здесь на форуме. На моей плате код ведёт себя точно так же, как и мой: при попытке запустить HSE зависает в цикле ожидания флага готовности HSE, а если не включать HSE и пытаться запуститься от HSI (я не забываю, что HSE 8 МГц, а HSI 16 МГц, и коэффициенты PLLN, PLLP, PLLM и PLLQ взял из CubeMX), то код зависает в цикле ожидания флага готовности PLL.
Сама неисправность начала проявляться после некоторых доработок схемы (доработки делал не я, как и схему, я только программу на неё пишу), до этого код работал нормально. Первое предположение было, что при доработке платы статикой выбило контроллер. Контроллер перепаяли на другой, но ничего не поменялось.
На данный момент думаю проосциллографировать все выводы микроконтроллера, чтобы понять, нет ли нештатных уровней на входах, которые могут сбивать работу RCC.
Судя по симптомам, либо что-то мешает работе RCC, либо микроконтроллер вышел из строя в части RCC. Но так, чтобы два контроллера подряд демонстрировали один и тот же отказ - сразу возникает подозрение на схему, а не на контроллер. Поэтому я и пошёл сюда с вопросом.
_________________ Если я где-то ошибаюсь, прошу от меня этого не скрывать. Заранее очень признателен
Приглашаем 3 декабря 2024 на вебинар, посвященный силовым модулям ведущего китайского производителя SUNCO - одного из мировых лидеров по производству дискретных полупроводниковых компонентов. На вебинаре вы узнаете о новинках, включая модули 17 класса в корпусе E3, и контроле качества на всех этапах производства. Вы также узнаете о новейших продуктах – IGBT-, SiC-, диодных и тиристорных модулях, погрузитесь в современные топологии, сравните характеристики IGBT-чипов разных поколений.
Но так, чтобы два контроллера подряд демонстрировали один и тот же отказ - сразу возникает подозрение на схему, а не на контроллер. Поэтому я и пошёл сюда с вопросом.
Всплески перенапряжения являются серьезной угрозой надежности работы радиоэлектронных устройств. Причины их появления различны, это могут быть коммутационные переходные процессы в системе электропитания устройств, разряды молний, электростатические разряды. Для создания эффективной и современной системы защиты от ЭСР компания SUNCO разработала надежные и качественные супрессоры, представляющие собой TVS- и ESD-диоды, а также сборки на их основе. Компоненты SUNCO не только не уступают, но часто превосходят по характеристикам аналогичную продукцию других брендов.
Плата самодельная, но делал не я ))) В общем-то, её делал вполне приличный схемотехник, но специализирующийся не на STM-ках, поэтому мог что-то налажать. Более того, проблемы начались после того, как плата была отдана мной схемотехнику на доработку. И после доработки умножитель перестал запускаться. Да и внешний кварц не стартует (вообще я умножитель запускал он встроенного, но тут решил проверить, будет ли HSE запускаться - не запускается). А вернуть плату человеку со словами "ты тут что-то делал, и перестало работать, вот и разбирайся" - как-то неправильно, яжпрограммист, нужно понять, что там стряслось с МК. Контроллер уже заменяли - ничего не поменялось. Пока подумываю своими руками перепаять, с соблюдением всех антистатических мероприятий.
Проверять нужно поле SWS, софтовая задежка при инициализации встречается довольно редко, а у тебя они повсеместно натыканы )
Я недавно перешёл на STM, и, честно говоря, мне он кажется очень капризным. Кое-где софтовая задержка ему нужна, а запоминать, где нужна, а где не нужна, мне сейчас немного некогда ))) Поэтому на каждое изменение регистра я леплю софтовую задержку.
_________________ Если я где-то ошибаюсь, прошу от меня этого не скрывать. Заранее очень признателен
Последний раз редактировалось Ледокот Ср ноя 06, 2024 16:59:21, всего редактировалось 2 раз(а).
В начало попробуйте (быстрым способом) узнать, работает ли МК (хардуер). Вариант: с безусловно рабочим кодом через STM32CubeIDE, по NSI, с/без PLL, вн. кварц, с/без PLL, мигание на всех пинах. При обходе светодиодов пинов мигают или нет. Тогда все ОК, попробуйте через CMSIS в ваших методах запустить генератор, PLL и т.д. Знаю, что не нравится Cube, но хотя бы для теста. В противном случае есть больше неизвестных - что не работает: МК, код к его и т.д. (частично пользуюсь переводчиком). --- (Не пользуйтесь такой задержкой: for (Iteration1 = 0; Iteration1 < 100000; ... . Ни к чему хорошему не приведет. Следите за флагами в регистах. У каждого модуля в МК их много).
Плата самодельная, но делал не я ))) В общем-то, её делал вполне приличный схемотехник, но специализирующийся не на STM-ках, поэтому мог что-то налажать.
PLL запитывается от аналогового питания, может тут накосячили. Возможно конденсаторы на VCAP не поставили, или поставили, но на 100nF.
В начало попробуйте (быстрым способом) узнать, работает ли МК (хардуер). Вариант: с безусловно рабочим кодом через STM32CubeIDE, по NSI, с/без PLL, вн. кварц, с/без PLL, мигание на всех пинах. При обходе светодиодов пинов мигают или нет. Тогда все ОК, попробуйте через CMSIS в ваших методах запустить генератор, PLL и т.д. Знаю, что не нравится Cube, но хотя бы для теста. В противном случае есть больше неизвестных - что не работает: МК, код к его и т.д. (частично пользуюсь переводчиком). --- (Не пользуйтесь такой задержкой: for (Iteration1 = 0; Iteration1 < 100000; ... . Ни к чему хорошему не приведет. Следите за флагами в регистах. У каждого модуля в МК их много).
Спасибо за ответ. Если не запускать PLL, то контроллер работает (только очень медленно) Подготовить в CubeMX проект с инициализацией и попробовать его запустить я пробовал, но не вышло ничего - среда ругнулась на какой-то незагруженный модуль, а для загрузки предложила регистрироваться на сайте, в общем, после осциллографирования я этим займусь, если не найдётся явная ошибка. Код-то рабочий (и он даже работал).
Тогда, вероятно, дело в "железе". Была проблема с запуском на плохо отмытой плате. Проверьте запуск HSE. Я не заметил у вас его запуска и ожидания готовности. Это нужно делать перед настройкой PLL.
Пробовал. Отдельно пробовал и HSE запускать. Не запускается. Т.е. флаг HSE_RDY не устанавливается после установки флага HSE_ON. Вроде бы понятно, что проблема в аппаратуре. Но вот чем она вызвана - не пойму. Говорят, что vcap_1 и vcap_2 могут влиять. В схеме заложены 3,3 мкФ 10% 25В. Я не знаю, насколько это нормальные параметры.
_________________ Если я где-то ошибаюсь, прошу от меня этого не скрывать. Заранее очень признателен
Т.е. флаг HSE_RDY не устанавливается после установки флага HSE_ON.
Проблема не в PLL, а в HSE. Проверяйте кварц, отмывку флюса с платы в районе кварца, нагрузочные конденсаторы кварца, схему подключения кварца. Не лишнем будет показать схему и трассировку.
Хм, там в цепи питания Vdda (аналоговое питание, если я правильно понял) последовательно воткнута индуктивность. За ней два конденсатора... Попробую-ка я эту индуктивность зашунтировать... Есть подозрения, что там какие-то колебания нехорошие появляются.
_________________ Если я где-то ошибаюсь, прошу от меня этого не скрывать. Заранее очень признателен
Заголовок сообщения: Re: Не запускается умножитель тактовой частоты STM32F407ZGT6
Добавлено: Ср ноя 06, 2024 21:47:21
Опытный кот
Карма: 16
Рейтинг сообщений: 183
Зарегистрирован: Вс дек 02, 2012 16:58:33 Сообщений: 863 Откуда: Уже не город Белых гор
Рейтинг сообщения:0
Я не считал множители, но PLL имеет определённый диапазон рабочих частот, довольно узкий. Проверьте по даташиту, на какую частоту вы загоняете PLL, и находится ли она в допустимых пределах.
Я не считал множители, но PLL имеет определённый диапазон рабочих частот, довольно узкий. Проверьте по даташиту, на какую частоту вы загоняете PLL, и находится ли она в допустимых пределах.
Проверял, когда писал код. Потом на всякий случай запустил CubeMX и настроил в нём сигналы тактовой частоты, подсмотрев значение битовых полей PLLM, PLLN, PLLP и PLLQ.
_________________ Если я где-то ошибаюсь, прошу от меня этого не скрывать. Заранее очень признателен
И всё нормально начинает работать, зависания во второй и третьей строчках нет, программа идёт дальше. По той же схеме устанавливаю множители/делители умножителя тактовой частоты и бит готовности умножителя:
Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 6
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете добавлять вложения