Доброго времени суток. Учу основы stm. Пытаюсь разобраться с регулировкой тактирования.
в reference manual нашел схему. начало кода https://pastebin.com/p875ni1t
Но не пойму как дальше писать.
1. по схеме HSE (4-26 MHz) - как определить и настроить точное значение? от чего зависит
2.и HSE и HSI судя по схеме проходят через блок SW - он определяет от чего тактируемся - регистр нашел.
3. а вот куда дальше двигаться?
4. читал на форумах - зачем то еще с flash-ом указывают доп настройки..
В общем в тупике. и да - использую cmsis
Тактирование в f407
Тактирование в f407
- Вложения
-
- Снимок экрана от 2020-02-08 08-15-56.png
- схема
- (63.3 КБ) 215 скачиваний
Re: Тактирование в f407
А поставить cubemx не судьба? это не панацея, но на старте незаменимая вещь!
- Вложения
-
- куб.jpg
- (220.66 КБ) 208 скачиваний
- HardWareMan
- Мучитель микросхем
- Сообщения: 429
- Зарегистрирован: Ср сен 02, 2015 07:47:20
Re: Тактирование в f407
Выбор кварца на HSE зависит от того, будет ли использоваться какое-то особое оборудование, вроде I2S. А если только ядро да USB, тогда можно взять любой из рекомендуемых, M выбрать равным кварцу, чтобы на PLL зашло 1МГц, а далее N=336, P=2 и Q=7, так мы получаем PLLCLK=168МГц и 48МГц для USB. Остальные делители по вкусу.
Репозиторий STM32: https://cloud.mail.ru/public/2i19/Y4w8kKEiZ
Актуальность репозитория: 22 апреля 2026 года
Если чего-то не хватает с сайта st.com - пишите, докачаю.
/!\ Обновлений для STM32PowerMon и STM32PowerMon-UCPD временно не будет.
Актуальность репозитория: 22 апреля 2026 года
Если чего-то не хватает с сайта st.com - пишите, докачаю.
/!\ Обновлений для STM32PowerMon и STM32PowerMon-UCPD временно не будет.
- VladislavS
- Собутыльник Кота
- Сообщения: 2562
- Зарегистрирован: Вт май 01, 2018 19:44:47
Re: Тактирование в f407
4. читал на форумах - зачем то еще с flash-ом указывают доп настройки..
Flash не может работать на полной скорости процессора. При старте, пока процессор работает от HSI, она успевает работать с минимальными задержками. Перед повышением частоты надо добавлять задержки в параметры flash, иначе будут страшные необъяснимые глюки.В общем в тупике. и да - использую cmsis
Похвально. У меня на f407 нет, но вот смотри как на F411 частоты поднимаются. Возьми этот шаблон за основу - там разница не шибко большая будет. Открой куб, как посоветовал optima, и просчитай в нём все делители. Ну и по RM впиши их в регистры по этому шаблону.Код: Выделить всё
// Настройка FLASH
FLASH->ACR = FLASH_ACR_PRFTEN | FLASH_ACR_ICEN | FLASH_ACR_DCEN | FLASH_ACR_LATENCY_3WS;
// ---------- Тактирование ----------
RCC->CR = _VAL2FLD(RCC_CR_HSITRIM,16) | RCC_CR_HSION | RCC_CR_HSEON; //Включаем HSE = 8 MHz
while(!(RCC->CR & RCC_CR_HSERDY));
//Задаём источники тактирования и делители SYSCLK = 96 МГц USB = 48 МГц
RCC->PLLCFGR = RCC_PLLCFGR_PLLSRC_HSE | _VAL2FLD(RCC_PLLCFGR_PLLQ,4) | _VAL2FLD(RCC_PLLCFGR_PLLN,96) | _VAL2FLD(RCC_PLLCFGR_PLLM,4) | 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) | RCC_CFGR_PPRE2_DIV1 | RCC_CFGR_PPRE1_DIV2 | RCC_CFGR_HPRE_DIV1 | RCC_CFGR_SW_PLL;Re: Тактирование в f407
1. HSE будет таким, какой кварц вы поставите. И не обязательно 8 МГц. Можно даже 4,33 МГц или 8,192 МГц.
2. Да. Это просто переключатель - от чего будет работать МК дальше. От внешнего кварца HSE, от внутреннего RC-осциллятора HSI на 8 МГц или даже от умножителя частоты PLL.
3. А всё, можно никуда дальше и не двигаться. Дальше идет главный предделитель, его можно оставлять 1:1, и предделители двух основных периферийных шин. Скоростная APB2 и помедленнее APB1. Пока работаете от HSE или HSI, их тоже можно оставить 1:1 и не трогать. Если будете работать через умножитель частоты, подняв частоту, то у этих шин прописана максимальная частота - и делителями шин можно уложиться в допуск. Потом посмотрите, что такое PLL - фазовый умножитель частоты.
4. Пока работаете на низкой частоте примерно до 24 МГц, это вас не должно волновать, можно ничего не трогать. А как только частота будет выше (от PLL), надо внести поправки. В референс-мануале написано, сколько циклов ожидания нужно добавить для выбранного диапазона тактовой частоты и имеющегося напряжения питания (про напряж. питания часто забывают!)
2. Да. Это просто переключатель - от чего будет работать МК дальше. От внешнего кварца HSE, от внутреннего RC-осциллятора HSI на 8 МГц или даже от умножителя частоты PLL.
3. А всё, можно никуда дальше и не двигаться. Дальше идет главный предделитель, его можно оставлять 1:1, и предделители двух основных периферийных шин. Скоростная APB2 и помедленнее APB1. Пока работаете от HSE или HSI, их тоже можно оставить 1:1 и не трогать. Если будете работать через умножитель частоты, подняв частоту, то у этих шин прописана максимальная частота - и делителями шин можно уложиться в допуск. Потом посмотрите, что такое PLL - фазовый умножитель частоты.
4. Пока работаете на низкой частоте примерно до 24 МГц, это вас не должно волновать, можно ничего не трогать. А как только частота будет выше (от PLL), надо внести поправки. В референс-мануале написано, сколько циклов ожидания нужно добавить для выбранного диапазона тактовой частоты и имеющегося напряжения питания (про напряж. питания часто забывают!)
to be or not to be = -1
Re: Тактирование в f407
__focus, с картинками - http://mcu.goodboard.ru/viewtopic.php?id=11