Урок 5. Система тактирования STM32.

Уроки STM32

В уроке изучим систему тактирования микроконтроллера.

Предыдущий урок     Список уроков     Следующий урок

Микроконтроллер – это синхронный автомат, работающий от единого источника тактовых импульсов. Пока мы не настроим тактирование всех его узлов, программа правильно работать не будет.

 

В уроке 3 мы научились пользоваться программой STM32CubeMX. Конфигурацию системы тактирования производили с помощью интерактивной схемы. Эта схема адекватно, в подробностях отображает реальную функциональную схему системы тактирования микроконтроллера. Так давайте и изучать ее с помощью STM32CubeMX, тем более, что мы собираемся использовать эту программу в каждом проекте.

Последовательность действий нам уже известна.

  • Запускаем STM32CubeMX.
  • Нажимаем на  ACCESS TO MCU SELECTOR.
  • Выбираем микроконтроллер STM32F103C8.
  • Затем Start Project.
  • В закладках System Core -> RCC.
  • В верхнем меню выбираем Clock Configuration.

Перед нами интерактивная схема системы тактирования микроконтроллера.

STM32CubeMX

Схема легко позволяет формировать сигналы тактирования разных частот. Переключаешь коммутаторы, выбираешь коэффициенты деления и умножения, смотришь частоты выходных сигналов. Если надо, корректируешь.

Все просто. Гораздо важнее понять, что надо сформировать, для чего и из чего.

 

Что значит конфигурировать систему тактирования? Чего мы хотим добиться?

Справа схемы есть 8 прямоугольников. Это источники тактирования узлов микроконтроллера. Мы должны установить, выбрать для них синхроимпульсы с определенной частотой.

Конечно, для этого необходимо знать, как работают сами узлы. Например, надо понимать, как работает таймер, чтобы выбрать для него нужную частоту синхроимпульсов. На данном этапе я дам только общие пояснения узлов микроконтроллера, которые используют систему тактирования. А вот саму систему синхронизации разберем подробно.

Большая часть узлов микроконтроллера тактируются от сигналов, полученных из промежуточной частоты – прямоугольник HCLK. Левая от него часть схемы формирует саму частоту HCLK, а правая – раздает ее по узлам, периферийным устройствам.

STM32CubeMX

Итак. Настроить систему тактирования микроконтроллера - это прежде всего задать частоты синхронизации для следующих узлов и периферийных устройств.

  • FCLK - тактирование ядра микроконтроллера. Частота сигнала определяет производительность микроконтроллера, время выполнения команд. Она не может быть выше 72 мГц. Поступает непосредственно от сигнала HCLK.
  • HCLK to AHB – тактирование шины AHB. К этой шине подключены: ядро процессора, память и контроллер прямого доступа к памяти (DMA). Синхроимпульсы для нее также поступают непосредственно от сигнала HCLK . Ядро процессора и его шина (AHB) синхронизируются одним сигналом.
  • Cortex System timer – системный таймер. Это стандартный таймер в микроконтроллерах STM32. Представляет из себя 24 разрядный вычитающий счетчик с функциями автоматической перезагрузки и формирования прерываний. Для тактирования используется сигнал HCLK, частота которого может быть уменьшена пред делителем в 8 раз.

STM32CubeMX

  • APB1 – тактирование шины APB1. Это шина, по которой происходит доступ к таймерам 2-4, USART 2 и 3, SPI2, I2C 1 и 2, CAN, USB, RTC, WatchDog.

Архитектура STM32

У других микроконтроллеров семейства STM32 устройств на шине APB1 может быть больше.

Архитектура STM32

Для тактирования шины APB1 используется сигнал HCLK с предделителем на несколько значений.

STM32CubeMX

Частота не должна превышать 36 мГц.

  • ABP1 Timer clocks – тактирование таймеров шины ABP1. Используется сигнал с выхода предделителя ABP1 с умножителем частоты на 1 или 2. Если значение предделителя APB1 равно 1, то частота тактирования таймеров равна частоте тактирования шины. При другом коэффициенте делителя, таймеры тактируются частотой в 2 раза выше, чем шина APB1.

STM32CubeMX

 

  • APB2 – тактирование шины APB2. Это шина, по которой происходит доступ к портам GPIO, таймеру 1, SPI1, USART1, АЦП. У шины предделитель с такими же функциональными возможностями, как у APB1.

STM32CubeMX

  • ABP2 Timer clocks – Тактирование таймера 1. Все как для сигнала ABP1 Timer clocks. Только к нему подключен один таймер 1. Частота тактирования его равна частоте синхронизации шины ABP2, в случае если значение предделителя равно 1. При любом другом значении частота тактирования таймера 1 в 2 раза выше частоты синхроимпульсов шины.
  • ADC – тактирование АЦП 1 и 2. Для тактирования используется сигнал предделителя шины APB2 с дополнительным делителем частоты. Делитель на схеме становится активным, если разрешить работу АЦП.

STM32CubeMX

 

Теперь давайте разберемся, как формировать сигнал промежуточной частоты HCLK. Начнем с противоположного, левого края схемы.

Исходными источникоми тактирования процессорного ядра и периферийных устройств микроконтроллера STM32 могут быть:

  • HSI (High speed internal ) – встроенный RC-генератор.
  • HSE (High speed external) – внешний высокочастотный генератор. Может быть использован, как:
    • Внутренний генератор с внешним кварцевым резонатором 4-16 Мгц.
    • Сигнал от внешнего генератора частотой 4-16 Мгц.

На схеме HSI-генератор изображен внутри микроконтроллера.

STM32CubeMX

Это внутренний RC-генератор на 8 мГц. Сигнал с него подается на коммутатор HSI/HSE через делитель на 2. Поэтому от этого генератора можно сформировать сигнал HCLK с частотой до 36 мГц.

Входы подключения внешнего кварцевого резонатора – это самое ”узкое место” для любого микроконтроллера с точки зрения помехозащищенности, влагостойкости, критичности сопротивления изоляции и т.п. Кварцевые генераторы часто не запускаются на морозе, не работают при высокой влажности. Прикоснитесь руками к выводам кварцевого резонатора не вскрытой лаком платы, и он тут же перестанет работать. Поэтому очень удобно иметь генератор внутри микросхемы.

Но RC-генератор обладает невысокой стабильностью частоты. Как правило, она сильно зависит от напряжения питания, возраста и температуры корпуса микроконтроллера. В технической документации указана погрешность частоты HSI-генератора от -2 до 2,5 % в диапазоне температур -40 до 105 C°.

Для повышения точности можно через специальный регистр незначительно изменять частоту HSI-генератора, т.е. производить программную калибровку.

Кварцевый генератор (HSE) надо включать. Как это делается во вкладке System Core -> RCC, мы уже знаем.

STM32CubeMX

После этого на схеме он становится синим, и мы можем задать для него частоту. На нашей плате установлен кварцевый резонатор на 8 мГц, поэтому оставим 8.

В том же поле можно выбрать в качестве исходной частоты тактирования внешний сигнал.

STM32CubeMX

В этом режиме входная частота может быть в пределах 1-25 мГц.

STM32CubeMX

На пути преобразования сигналов HSI и HSE-генераторов в промежуточный синхросигнал HCLK расположены коммутаторы PLL Source Mux и System Clock Mux, делители и один умножитель.

STM32CubeMX

Думаю, не составит труда разобраться, как выбрать нужную частоту сигнала HCLK.

 

Скорее всего, непонятен прямоугольник CSS, который можно включать и выключать.

STM32CubeMX

На схеме прямоугольник управляет коммутатором System Clock Mux.

Это система Clock Security System – контроль работы внешнего высокочастотного генератора HSE. При включенной системе CSS контролируется работа HSE-генератора. Если генератор перестает работать, то:

  • система тактирования автоматически переключается на RC-генератор HSI,
  • сигнал тактирования переключается на путь через верхний вывод коммутатора System Clock Mux, т.е. выключается умножитель частоты PLLMul,
  • вырабатывается немаскируемое прерывание для программной обработки этой аварийной ситуации.

При использовании интерфейса USB есть небогатый выбор значений предделителя частоты для его тактирования.

STM32CubeMX

Стандартная частота для работы USB – 48 мГц. При любой другой, прямоугольник to USB краснеет.

Прямоугольник FLITFCLK показывает, что для тактирования операций программирования FLASH-памяти микроконтроллера всегда используется внутренний RC-генератор HSI.

STM32CubeMX

Но это вполне логично, да и повлиять на эту связь мы никак не можем.

 

Внизу схемы есть еще один коммутатор, который позволяет вывести сигнал тактирования на вывод микроконтроллера MCO (Microcontroller clock output). Сигнал может быть использован для синхронизации аппаратных узлов, подключенных к микроконтроллеру.

Для разрешения работы выхода должна быть установлена ”птичка” Master Clock Output во вкладке System Core -> RCC.

STM32CubeMX

После этого коммутатор MCO source Mux становится активным и можно выбрать один из источников сигнала:

  • выход умножителя PLL с делителем на 2;
  • RC-генератор HSI;
  • внешний генератор HSE;
  • SYSCLK  - выход коммутатора System Clock Mux.

STM32CubeMX

Остался левый верхний угол схемы. Это управление тактированием часами реального времени (RTC). Часы представляют собой 32 разрядный счетчик и несколько ячеек памяти, которые работают от отдельного, резервного питания.

Для тактирования часов RTC есть 2 генератора:

  • LSI – встроенный низкочастотный RC-генератор с частотой 40 кГц.
  • LSE – внешний низкочастотный генератор. Может быть использован, как:
    • внутренний генератор с внешним кварцевым резонатором 32 768 Гц;
    • сигнал от внешнего генератора частотой 0 – 1000 кГц.

Все, как для генераторов основной системы синхронизации. Только низкие частоты.

Включение LSE-генератора также происходит во вкладке System Core -> RCC.

STM32CubeMX

Прямоугольник Input frecuency станет синим.

Если еще активировать часы в закладке Timers -> RTC.

STM32CubeMX

То коммутатор RTC Clock Mux станет активным и можно будет выбрать источник тактирования RTC-часов.

STM32CubeMX

На схеме еще показано, что низкочастотный RC-генератор LSI используется сторожевым таймером. Но для нас это чисто информационная ветка схемы.

Надеюсь, я ничего не забыл.

Как получить проект с выбранной конфигурацией я описывал в уроке 3.

Рассказывать, как задавать конфигурацию в программе, без конфигуратора STM32CubeMX, не имеет смысла. Получится очень большой объем ненужной информации.

Оперативное переключение системы тактирования необходимо только в приложениях критичных к энергопотреблению. Поговорим об этом, когда будем разрабатывать такие приложения.

 

В следующем уроке будем изучать порты ввода-вывода. Напишем первую осмысленную программу.

Предыдущий урок     Список уроков     Следующий урок

 

0

Автор публикации

не в сети 6 часов

Эдуард

285
Комментарии: 1945Публикации: 197Регистрация: 13-12-2015

11 комментариев на «Урок 5. Система тактирования STM32.»

  1. Восхитительные уроки, просто супер полезно! Как раз работаю над проектом на stm32 и использую такую же связку trueSTUDIO + CubeMX, но другую плату, NUCLEO-F303ZE. Уже многие моменты прояснил для себя, читая статьи! Особенно интересна работа с АЦП, надеюсь вы так же достойно осветите ее в рамках этого цикла.
    Сам ардуинщик со стажем, но понимаю, что по соотношению цена-функционал эта платформа уже сильно отстает, а некоторые вещи ардуина и не вытянет. В моем случае узким местом стал медленный АЦП. Тем более всегда интересно узнать что-то новое!
    Спасибо еще раз, слежу за обновлениями!

    1
  2. Великолепно. Всё толково, в меру подробно, без излишних деталей, но достаточно детально. Всё ясно и понятно.
    Сам пишу для AVR. Не на Ардуино, в основном на ассемблере. Пора переходить на новые контроллеры. Прогресс не стоит на месте. С вашей помощью, думаю справлюсь. Спасибо.

    0
  3. Все уроки современные. С использованием инструментов актуальных на сегодняшний день. CubeMX, AtolicTrueStudio. Идём в ногу со временем, товарищи. Автору спасибо за новые открытия и непрерывное самообучение.

    0
  4. Здравствуйте!

    Как это понять:

    «Это внутренний RC-генератор на 8 мГц. Сигнал с него подается на коммутатор HSI/HSE через делитель на 2. Поэтому от этого генератора можно сформировать сигнал HCLK с частотой до 36 мГц.»

    сигнал там по схеме до HCLK два раза делится и один раз умножается — это же не значит что из-за делителя на 2 перед PLL Sourse Mux HCLK 36мГц становится?

    а в SMT32F407VET6 нет этой делилки… и немного по-другому всё…

    ————————————

    Цель урока как я понял:

    дать понять что для каждого типа микроконтроллера существуют свои «частотные границы» для разных узлов и посредством STM32CubeMX мы, используя предоставленные нам «умножители», «делители», «коммутаторы» ,

    а так же выбирая подключение внутренних или внешних генераторов

    производим преднастройку проекта.

    ————————————
    как понять:

    «HSE (High speed external) – внешний высокочастотный генератор. Может быть использован, КАК:

    Внутренний генератор с внешним кварцевым резонатором 4-16 Мгц.»

    КАК или Вместо?

    и:
    «Сигнал от внешнего генератора частотой 4-16 Мгц.»

    — то есть сигнал формируется внешним генератором без кварцевого резонатора что-ли?

    тогда в чем разница внутреннего RC-генератора и внешнего генератора? Зачем нам внешний без кварцевого резонатора?

    ——-
    если в тексте используется: «с резонатором» и в следующей строке про резонатор ничего не написано, то по логике понять, что там «БЕЗ резонатора»?

    наверное, надо вкратце где-то написать: как устроен внешний генератор? И как может работать «Внутренний генератор с внешним кварцевым резонатором 4-16 Мгц»…??

    0
    • Здравствуйте!
      8 мГц делится на 2, получается 4. Поступает на коммутатор PLL Source Mux. Умножается на 9 в PLLMul, получается 36 мГц.

      По поводу HSE, тоже все очевидно.

      «Внутренний генератор с внешним кварцевым резонатором 4-16 Мгц.» Т.е. генератор используется внутренний, но к нему подключен внешний кварцевый резонатор.

      «Сигнал от внешнего генератора частотой 4-16 Мгц.» Это означает, что на вход подаются импульсы с внешнего генератора, а как он устроен, по какому принципу работает неважно. Это может быть RC-генератор или кварцевый, хоть электро-механический. Микроконтроллер синхронизируется от внешних импульсов.

      0
  5. Выходит, каждая итераця while(1) в main будет выполнятся каждый такт HCLK, так что ли?

    0
    • Здравствуйте!
      Нет, конечно. Это язык высокого уровня. Он обычно использует несколько машинных команд. И к тому же не каждая машинная команда выполняется за один цикл.

      0

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

Ваш e-mail не будет опубликован. Обязательные поля помечены *

Нажимая кнопку "Отправить" Вы даёте свое согласие на обработку введенной персональной информации в соответствии с Федеральным Законом №152-ФЗ от 27.07.2006 "О персональных данных".