STM32. Настройка RCC в «железе».

Как и обещал, перехожу к вопросам настройки тактирования микроконтроллера STM32F100C4. Эта статья родилась из ковыряния в носу с простейшим макетом и многосерийными танцами вокруг вопросов настройки узлов МК.
Прежде всего, распечатайте себе структурную схему (дерево) системы тактирования из документа RM0041 Reference manual STM32F100xx advanced ARM-based 32-bit MCUs (стр.71).
STM32_clock_treeЭто позволит наглядно отслеживать «путь» тактовых импульсов от источников по всему контроллеру, анализировать делители, разветвители и пр. Причём рассмотрение структурной схемы полезно, и даже необходимо для всех субблоков и узлов микроконтроллера.
Итак, прошлые опыты мне показали, что ядро контроллера работает на частоте 36 МГц, несмотря на утверждение техдокументации о максимальной частоте 24 МГц для STM32F100C4. Нужно разобраться в причинах этого явления…
Вдумчивое чтение юзермануала обнажило очень полезную «фишку» в микроконтроллерах рассматриваемого семейства. В них имеется вывод MCO (смотрим на структурную схему, зеленая птичка), на который возможно подавать один из 4-х тактирующих сигналов: — делённый на 2 выходной сигнал умножителя PLL; — выход внутреннего RC-генератора HSI; — выход внешнего кварцевого генератора HSE; — системный тактовый сигнал SYSCLK. «Полезность» же вывода MCO заключается в возможности использовать его для тактирования внешних устройств аппаратно, без задействования программных ресурсов, ну, и, конечно, в возможности вывода на него различных клоков МК и контроля их осциллографом. Напишем пару строчек кода чисто для «погонять сигналы».
code_MCOПодключаем осциллограф, выбрав сигнал SYSCLK входным для MCO (раскомментировав соответствующую строку). Да, реально частота 36 МГц.
36_MHzПрохожу в симуляторе пошагово  инициализацию камня и причина находится без особого труда. Смотрим скриншот ниже
Screen_1При выполнении функции SetSysClockTo24 установки частоты 24 МГц (максимальной в зависимости от типа выбранного нами семейства контроллера) оная рассчитывается по формуле  PLL configuration  = (HSE / 2) * 6 = 24 MHz , подразумевая, что внешний кварц  HSE  — 8 МГц. У нас же HSE  — 12 МГц, естественно, что 12/2 * 6 = 36. Как видите, при частоте ядра контроллера большей чем максимальная на треть, работа вполне стабильна!!! Хотя на некоторых форумах я встречал посты в которых народ пишет о нестабильной работе узлов микроконтроллера в таком режиме. Однако, разработчики почему-то ограничили максимальную частоту для STM32F100C4 на уровне 24 МГц, и, наверное, имели все для этого основания! Поэтому множитель PLLMULL и мы изменим с 6 на 4 (смотрите скриншот). После таких изменений частота становится, как и должна быть — 24 МГц.
24_MHzСогласно инициализации микроконтроллера, которую я отслеживал в режиме отладки, «путь» тактового сигнала от его источника (внешнего кварца) до потребителей отмечен на структурной схеме в начале статьи красным сплошным, а красным пунктиром —  вывод его на МСО.
Для закрепления своих знаний по настройкам тактирования STM32F100C4 советую в приведённом проекте в файле инициализации поизменять различные настройки тактового сигнала: источники, коэффициенты делителей, умножителей и пр., и пронаблюдать на экране осциллографа, как изменения в программе меняют тактирование в «железе». Если при этом перед глазами будут распечатанная структурная схема и описания управляющих регистров — то процесс уяснения, несомненно, пройдёт гораздо плодотворнее.

Запись опубликована в рубрике ARM с метками , , . Добавьте в закладки постоянную ссылку.

4 комментария: STM32. Настройка RCC в «железе».

  1. Blambik говорит:

    За статью сенкс, но вот с осцилом тебе что то нада делать 🙁 Этож надо так в синус прямоугольник валить 🙁 Мож у тебя со щупами трабла?

  2. s_black говорит:

    Осциллограф 2 х 60 МГц. Шупы настроены как надо. Думаю, что это его нормальная работа при трети заявленной максимальной частоты.

  3. Vinni говорит:

    А может ввод осциллографа подключён через конденсатор?

  4. Артем говорит:

    Я думаю, что одна из причин почему не рекомендуют такой разгон — жрать много начинает на такой частоте. Да и в долгоиграющем режиме вы же не проверяли, а так на сутки оставить какую-нибудь фигню вычислять и диодами моргать — к утру как раз задымится 🙂

Добавить комментарий

Ваш e-mail не будет опубликован.