STM32 для начинающих. Урок 2. Тактирование STM32.

Автор: | 18.08.2016

 

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

Сегодня речь пойдет о системе тактирования микроконтроллеров STM32. Если вы ещё не знаете что такое такт, частота и вообще не затрагивали до этого системы тактирования, перейдите на наш урок. Хоть по данной ссылке и рассматривается система тактирования микроконтроллера AVR, понятия определенные в уроке по ссылке, применимы и к системе тактирования микроконтроллеров STM32.

Итак, приступим!

Рассматривать систему тактирования будем на примере микроконтроллера STM32F303VCT6, который установлен в отладочной плате STM32 F3 DISCOVERY.

Взглянем на общую структуру системы тактирования:

Как мы видим, система тактирования STM32, на порядок сложнее системы тактирования микроконтроллеров AVR, не смотря на то, что на рисунке отражена лишь основная её часть.

Давайте разбираться!

Рассматривать схему следует слева направо. Во-первых, мы должны выбрать основной источник тактирования контроллера. Выбирать будем между HSI и HSE.

HSE —Внешний высокочастотный генератор. Источником тактирования для него служит внешний тактовый сигнал (Input frequency), который как мы видим по схеме, может быть от 4 до 32 МГц. Это может быть кварцевый резонатор, тактовый генератор и так далее.

HSIВнутренний высокочастотный генератор. В микроконтроллерах STM32 F3 является RC цепочкой с частотой 8МГц. Точность значительно ниже внешнего генератора HSE.

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

PLL Clock Система Фазовой Автоподстройки Частоты (ФАПЧ). Позволяет умножить входной сигнал HSI или HSE в необходимое количество раз.

Читайте также  STM32 для начинающих. Урок 6. DMA STM32.

С PLL сигнал может быть подан на системную шину, максимальная частота которой 72МГц. Либо, на системную шину может быть подан сигнал HSE или HSI напрямую, то есть без преобразования PLL.

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

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

Настроим нашу отладочную плату STM32 F3 DISCOVERY на работу с тактовой частотой 72 МГц.

Создадим и настроим проект в Keil uVision. Подробнее об этом в нашем видео уроке.

Добавим следующий код:

 

Читайте также  COM порт Windows. SerialPort. C#.

В основной функции main, объявлена структура RCC_ClocksTypeDef. Данная структура содержит в себе поля, отражающие текущую тактовую частоту определенных частей контроллера.

Затем в основной функции вызывается функция InitRCC,которая настраивает тактирование контроллера. Рассмотрим её подробнее.

Командой RCC_HSEConfig(RCC_HSE_ON), мы включаем HSE.На его включение необходимо время, поэтому необходимо подождать пока не будет установлен флаг RCC_FLAG_HSERDY. Делаем мы это в цикле while(RCC_GetFlagStatus(RCC_FLAG_HSERDY) == RESET) .

Затем мы производим настройку задержки флеш памяти. Это необходимо делать при работе системной шины на частотах свыше 36 МГц!

После настройки задержки выбираем предделитель PLL. Командой RCC_PREDIV1Config(RCC_PREDIV1_Div1) мы устанавливаем предделитель на 1. Командой RCC_PLLConfig(RCC_PLLSource_PREDIV1,RCC_PLLMul_9) выбирам HSE как источник частоты для PLL и выбираем умножение в 9 раз. Остается только влючить PLL командой RCC_PLLCmd(ENABLE),и ожидать установки флага RCC_FLAG_PLLRDY,в цикле while. Тем самым мы обеспечиваем необходимую временную задержку для включения PLL. После этого выбираем PLL как источник системной частоты SYSCLK командой RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK). Предделители шин трогать не будем, поэтому шины AHB,APB1,APB2 будут работать на частотах 72,36 и 72 МГц соответственно.

Остается лишь выключить внутреннюю RC цепочку командой RCC_HSICmd(DISABLE).

После выполнения функции InitRCC, в основном цикле прошивки заполним структуру RCC_ClocksTypeDef, что позволит нам узнать, правильно ли мы настроили систему тактирования. Делаем мы это командой RCC_GetClocksFreq (&RCC_Clocks).

Посмотреть значения тактовых частот контроллера можно в режиме отладки, установив точку останова на команде __NOP() что означает, пустую команду. Данную команду часто добавляют для удобства отладки.

Подключаем отладочную плату STM32 F3 DISCOVERY, собираем прошивку, прошиваем плату и наконец, заходим в режим отладки, нажав кнопку Start/Stop debug session (Ctrl+F5). Установив точку останова на функции __NOP,и добавив структуру RCC_Clocks в Watch,запускаем исполнение прошивки, нажав F5. В результате видим:

Читайте также  STM32.Встроенный датчик температуры.

Частоты настроены правильно, и микроконтроллер теперь работает на частоте 72 Мгц.

Итак, как Вы поняли из сегодняшнего урока, система тактирования STM32 достаточно мощна и гибка для удовлетворения потребностей Ваших проектов. Потратив время на её настройку — Вы достигнете прекрасных результатов!

Спасибо за внимание! Ваши вопросы как обычно в комментариях!

Другие уроки цикла.


Любое копирование, воспроизведение, цитирование материала, или его частей разрешено только с письменного согласия администрации MKPROG.RU. Незаконное копирование, цитирование, воспроизведение преследуется по закону!

STM32 для начинающих. Урок 2. Тактирование STM32.: 2 комментария

  1. Уведомление: Уроки STM32. Датчик температуры | MKPROG.RU

  2. Уведомление: STM32. Bluetooth Android. HC-05. | MKPROG.RU

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

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