Тактирование

Тактирование

На этом уроке мы рассмотрим систему тактирования микроконтроллера STM32 и пронаблюдаем изменение поведения бегущего огня при изменении тактовой частоты.
 

 
За систему тактирования микроконтроллера отвечает модуль RCC – Reset and Clock Control.
В качестве источника сигнала для системы тактирования может быть выбран один из трех вариантов:

  • внутренний высокочастотный RC-генератор с частотой 8МЦ – HSI
  • внешний высокочастотный тактовый генератор - HSE
  • выход умножителя частоты - PLL.

Встроенный в микропроцессор генератор HSI вырабатывает тактовую частоту 8 МГц. Этот генератор автоматически запускается при появлении питания. Первоначально процессорное ядро запускается на тактовой частоте генератора HSI. К преимуществам использования для тактирования этого сигнала относятся

  • быстрое время старта после подачи питания
  • отсутствие необходимости в использовании дополнительных электронных компонентов для работы микроконтроллера.

Недостатком его является низкая стабильность частоты генерируемого сигнала, которая зависит, в первую очередь, от рабочей температуры и увеличивается при умножении частоты. Производитель микроконтроллера осуществляет начальную калибровку внутреннего генератора и гарантирует стабильность частоты 1% при температуре ядра 25°С.

 

Внешний тактовый генератор

В качестве внешнего высокочастотного генератора могут выступать:

  • внешний тактовый сигнал не превышающий 32 МГц, поданный на вывод OSC_IN (PF0),
  • внешний кварцевый резонатор подключенный к выводам OSC_IN и OSC_OUT (выводы PF0 и PF1 соответственно).

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

 

Внутренний умножитель частоты

Внутренний умножитель частоты может умножать тактовый сигнал на своем входе, причем величина множителя может выбираться в диапазоне от 2 до 16. В качестве входного сигнала внутреннего умножителя может использоваться сигнал с внутреннего тактового генератора, поделенный на 2, или сигнал с внешнего тактового генератора непосредственно или через предварительный делитель с коэффициентом от 1 до 16. Важно, что в итоге мы должны получить частоту тактирования, не превышающую 72 МГц.

Дополнительно микроконтроллер имеет низкочастотную систему тактирования, в качестве источника сигнала которой может быть выбран один из следующих вариантов:

  • низкочастотный тактовый генератор с частотой 40 кГц – LSI
  • низкочастотный внешний генератор LSE с частотой 32,768 кГц.

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

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

Дополнительно система тактирования формирует тактовые сигналы для тактирования шин.
Высокопроизводительная шина AHB отвечает за работу портов ввода-вывода, модулей аналого-цифрового преобразования и каналов прямого доступа к памяти. Две шины периферийных модулей –

  • APB1 с тактовой частотой до 36 МГц
  • APB2 с тактовой частотой до 72 МГц.


Прежде чем использовать какой-нибудь периферийный модуль его необходимо включить в соответствующем регистре модуля RCC. В руководстве по применению микроконтроллеров содержится описание регистров микроконтроллера, отвечающих за включение отдельных периферийных модулей, расположенных на соответствующих шинах. При сбросе питания микроконтроллера все периферийные модули и порты ввода-вывода отключены. Это позволяет уменьшить потребление микроконтроллера, но включение требуемых модулей – это задача программиста. Хотя эту задачу успешно решает конфигуратор STM32CubeMX.

 

Управление режимами тактирования

До сих пор мы работали с тактированием от внутреннего высокочастотного генератора с частотой 8 МГц. Переключение светодиодов бегущего огня осуществлялось по переполнению счетного регистра таймера TIM6 раз в полсекунды.
Давайте попробуем в качестве тактовой частоты использовать частоту с выхода умножителя PLL. Откроем проект с прошлого урока в конфигураторе STM32CubeMX и во вкладке Clock Configuration выберем в качестве источника тактового сигнала выход PLL с коэффициентом умножения равным 16. Получаем тактовую частоту работы, равную 64 МГц. Это максимальная частота работы при тактировании от внутреннего генератора.

Но периферийная шина APB1 может работать на тактовой частоте до 36 МГц, и конфигуратор показывает нам красным цветом, что тактовая частота этой шины недопустима. Давайте уменьшим ее вдвое. При этом тактовый сигнал модулей таймеров на этой шине составит 64 МГц за счет автоматически подключившегося умножителя на 2. Согласно документации, модуль таймера TIM6 управляется как раз тактовой частотой шины APB1.
В то же время частота тактирования для других периферийных модулей, расположенных на данной шине составит 32 МГц.
Тактирование от умножителя частоты PLL

Давайте сгенерируем проект, откроем его в IAR и без изменения кода загрузим в отладочную плату. Уберем точки останова, оставшиеся с предыдущего урока, и запустим программу на выполнение. Мы видим, что переключение светодиодов происходит в 8 раз быстрее, то есть за полсекунды успевают пробежать все 8 светодиодов.

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

Для включения тактирования от внешнего генератора перейдем во вкладку Pinout и в модуле RCC выберем Crystal/Ceramic Resonator для модуля HSE. При этом выводы PF0 и PF1 конфигурируются как вход и выход тактирования и не могут быть использованы как линии ввода-вывода.
Включение внешнего генератора
Снова перейдем во вкладку Clock Configuration и мы видим, что сигнал внешнего генератора стал активен. При этом пользователь может задать входную тактовую частоту. На плате установлен кварцевый генератор с частотой 8МГц, поэтому тактовую частоту оставляем по умолчанию. Переключим вход умножителя частоты на внешний сигнал, и мы видим, что частота оказалась равной 128 МГц, что является недопустимым для работы микроконтроллера. Уменьшим коэффициент умножителя до 9 и получим максимально допустимую частоту тактирования - 72 МГц.
Включение умножителя часоты для внешнего кварцевого генератора
Снова сгенерируем проект, откроем его и загрузим в отладочную плату.
Запускаем на выполнение. Теперь переключение светодиодов осуществляется еще быстрее. На глаз, конечно, оценить эту частоту сложно, но я для этой цели воспользовалась осциллографом. Расчетное значение полного периода при тактовой частоте 72 МГц составляет примерно 444 мс, а время импульса – 55,5мс.

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

Давайте вернем в качестве опорного сигнала тактовую частоту 8 МГц от внутреннего генератора и уменьшим частоту тактирования самого модуля таймера, поставив коэффициент деления шины APB1 равным 4.
Уменьшение частоты тактирования шины APB1
Снова сгенерируем код проекта, загрузим в отладочную плату и запустим на выполнение.
Светодиоды теперь переключаются в 2 раза медленнее, то есть раз в секунду. Однако при этом уменьшилась тактовая частота всех периферийных модулей, тактируемых от шины APB1. Поэтому более корректным решением будет управление тактированием таймера с использованием предварительного делителя непосредственно для используемого модуля таймера.

Оставьте комментарий

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

Прокрутить вверх