Возникла проблема с настройкой умножителя тактовой частоты микроконтроллера 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. Но так, чтобы два контроллера подряд демонстрировали один и тот же отказ - сразу возникает подозрение на схему, а не на контроллер. Поэтому я и пошёл сюда с вопросом.
_________________ Если я где-то ошибаюсь, прошу от меня этого не скрывать. Заранее очень признателен
Открыта удобная площадка с выгодными ценами, поставляющая весь ассортимент продукции, производимой компанией MEAN WELL – от завоевавших популярность и известных на рынке изделий до новинок. MEAN WELL.Market предоставляет гарантийную и сервисную поддержку, удобный подбор продукции, оперативную доставку по России.
На сайте интернет-магазина посетители смогут найти обзоры, интересные статьи о применении, максимальный объем технических сведений.
Но так, чтобы два контроллера подряд демонстрировали один и тот же отказ - сразу возникает подозрение на схему, а не на контроллер. Поэтому я и пошёл сюда с вопросом.
Продукция MOSO предназначена в основном для индустриальных приложений, использует инновационные решения на основе более 200 собственных патентов для силовой электроники и соответствует международным стандартам. LED-драйверы MOSO применяются в системах наружного освещения разных отраслей, включая промышленность, сельское хозяйство, транспорт и железную дорогу. В ряде серий реализована возможность дистанционного контроля и программирования работы по заданному сценарию. Разберем решения MOSO
подробнее>>
Ледокот
Заголовок сообщения: Re: Не запускается умножитель тактовой частоты STM32F407ZGT6
Плата самодельная, но делал не я ))) В общем-то, её делал вполне приличный схемотехник, но специализирующийся не на 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
Рейтинг сообщений: 191
Зарегистрирован: Вс дек 02, 2012 16:58:33 Сообщений: 900 Откуда: от туда
Рейтинг сообщения:0
Я не считал множители, но PLL имеет определённый диапазон рабочих частот, довольно узкий. Проверьте по даташиту, на какую частоту вы загоняете PLL, и находится ли она в допустимых пределах.
Я не считал множители, но PLL имеет определённый диапазон рабочих частот, довольно узкий. Проверьте по даташиту, на какую частоту вы загоняете PLL, и находится ли она в допустимых пределах.
Проверял, когда писал код. Потом на всякий случай запустил CubeMX и настроил в нём сигналы тактовой частоты, подсмотрев значение битовых полей PLLM, PLLN, PLLP и PLLQ.
_________________ Если я где-то ошибаюсь, прошу от меня этого не скрывать. Заранее очень признателен
И всё нормально начинает работать, зависания во второй и третьей строчках нет, программа идёт дальше. По той же схеме устанавливаю множители/делители умножителя тактовой частоты и бит готовности умножителя:
Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 38
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете добавлять вложения