Rcc stm32 что это

STM32 и RCC. Настройки тактирования в STM32CubeMx.

Rcc stm32 что это. av 600. Rcc stm32 что это фото. Rcc stm32 что это-av 600. картинка Rcc stm32 что это. картинка av 600

Rcc stm32 что это. RCC. Rcc stm32 что это фото. Rcc stm32 что это-RCC. картинка Rcc stm32 что это. картинка RCC

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

Итак, для тестирования мы можем взять за основу проект из предыдущей статьи с таймером (ссылка). Так мы будем наглядно видеть как именно влияют наши эксперименты с тактовой частотой на работу реального железа. Собственно, говорить тут особо не о чем, перейдем сразу к практике. Открываем STM32CubeMx и сразу же идем на вкладку Clock Configuration:

Rcc stm32 что это. Nastroyki RCC. Rcc stm32 что это фото. Rcc stm32 что это-Nastroyki RCC. картинка Rcc stm32 что это. картинка Nastroyki RCC

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

Итак, наш таймер TIM3 сидит на шине APB1. Как мы видим из этой схемы у нас используется внутренний высокочастотный генератор на 16 МГц (HSI — High Speed Internal). Полученные на его выходе 16 МГц проходят через два предделителя, обозначенных на схеме синим, прежде чем добираются до шины APB1. Но поскольку в данном случае эти предделители равны 1 на APB1 мы получаем все те же 16 МГц. Именно эту частоту мы и брали, когда рассчитывали делитель частоты для таймера в предыдущей статье.

Давайте увеличим APB1 Prescaler до 4 и посмотрим, как это скажется на работе таймера и мигании нашего светодиода. При смене предделителя у нас умножитель частоты для APB1 Timer Clocks станет равным 2 и в итоге мы получим 8 МГц:

Rcc stm32 что это. STM32 APB1. Rcc stm32 что это фото. Rcc stm32 что это-STM32 APB1. картинка Rcc stm32 что это. картинка STM32 APB1

Открываем полученный проект и ищем там в файле main.c функцию SystemClock_Config():

Как видите, в заново сгенерированном коде абсолютно правильно установлено наше новое значение предделителя:

Кстати стоит отметить еще одну очень важную деталь… В полученном коде есть специальные секции вида:

Если мы поместим код внутрь этих секций, то при повторной генерации проекта Cube учтет наличие нашего кода в старом проекте и перенесет его в новый проект. Вот сейчас мы изменили настройки тактирования и заново сгенерировали проект и файлы с исходным кодом, а наш код, который переключает состояние светодиода в прерывании по переполнению таймера никуда не пропал и остался на своем месте. А все почему? А потому, что он помещен в специальную секцию для пользовательского кода 🙂

Теперь нам остается собрать проект и запрограммировать микроконтроллер. В результате мы видим, что светодиод стал мигать с частотой в 2 раза меньше, чем была раньше. Собственно, так и должно было произойти, поскольку мы уменьшили частоту тактирования таймера ровно в 2 раза!

Это все, конечно, хорошо, но вообще неплохо было бы задействовать внешний кварцевый резонатор, установленный на плате STM32F4Discovery. Но в окне настроек частот он неактивен. Поэтому идем в окно Pinout и включаем внешний источник тактирования:

Rcc stm32 что это. HSE STM32. Rcc stm32 что это фото. Rcc stm32 что это-HSE STM32. картинка Rcc stm32 что это. картинка HSE STM32

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

Rcc stm32 что это. Nastroyka vneshnego generatora v STM32. Rcc stm32 что это фото. Rcc stm32 что это-Nastroyka vneshnego generatora v STM32. картинка Rcc stm32 что это. картинка Nastroyka vneshnego generatora v STM32

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

Итак, поскольку частота тактирования шины, а соответственно и нашего таймера стала равной 48 МГц, то давайте в настройках таймера изменим значение предделителя с 16000 на 48000. Это нужно для того, чтобы светодиод на плате снова стал мигать 1 раз в секунду (прерывание по переполнению таймера каждые 500 мс). После изменения всех настроек генерируем проект для IAR, компилируем и загружаем новую прошивку в микроконтроллер. Светодиод на плате мигает точно с той частотой, с какой и должен!

На это заканчиваем с настройкой частот, но не заканчиваем с изучением STM32CubeMx, так что до скорых встреч!

Источник

Очередная статья: STM32 для начинающих

Это моя первая статья на Хабре, поэтому прошу не кидаться тяжелыми предметами. Заранее спасибо.

Начнем с предыстории. Когда-то мне пришлось перейти на микроконтроллеры ARM фирмы ST. Это было связано с тем, что PIC и AVR уже не хватало и хотелось новых приключений. Из доступного в хлебобулочных магазинах и большого количества статей о «быстром старте» выбор пал именно на STM32F100.

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

Когда я попытался сделать первый проект меня ждало разочарование — CMSIS! Кому как, но для меня это было (и остается) ужасом: много буков, длинные и для меня не понятные структуры. Вникать во все это было не интересно. Попытался скомпилировать пару примеров и понял — это не наш метод.

Неужели нет других вариантов? Есть. Тот, встроенный в IAR: iostm32f10xx4.h и подобные инклудники. Вполне не плохо:

Оставалось это запихнуть в классы и пользоваться. Так и сделал. Через какое-то время потребовалось сделать код для STM32f4xx. И тут снова засада — нет инклудиков. Что делать? — писать самому. Проанализировал имеющиеся самописные библиотеки решил немного сделать по другому. Вот об этом и будет рассказ.

Начало

Про установку IAR и драйверов для отладчика рассказывать не буду, т.к. здесь ничего нового. У меня стоит IAR 8 с ограниченем кода в 32кБ. Для работы выбран контроллер STM32F103, установленный на плате plue pill.

Запускаем IAR, создаем проект c++, выбираем нужный контроллер
Rcc stm32 что это. bczi8i6y jmi7zfhiwgsmziosts. Rcc stm32 что это фото. Rcc stm32 что это-bczi8i6y jmi7zfhiwgsmziosts. картинка Rcc stm32 что это. картинка bczi8i6y jmi7zfhiwgsmziosts
Следующий шаг — изучение документации. Нас будет интересовать Reference manual RM0008. Там главное внимательно читать.

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

Модуль RCC. Такирование

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

Запомните! Что бы включить какую-либо периферию, на нее надо подать тактовые импульсы! Без этого никак.

Порты ввода-вывода сидят на шине APB2. Находим в документации регист для упрвления тактированием этой шины, это RCC_APB2ENR:

Rcc stm32 что это. adz9y0qj8ebtzgk 8ip2cfdcfs. Rcc stm32 что это фото. Rcc stm32 что это-adz9y0qj8ebtzgk 8ip2cfdcfs. картинка Rcc stm32 что это. картинка adz9y0qj8ebtzgk 8ip2cfdcfs

Чтобы включить тактирование порта C (светодиод как раз припаян к PC13), требуется записать в бит IOPCEN единичку.

Теперь найдем адрес регистра RCC_APB2ENR. Смещение у него 0x18, базовый адрес для регистров RCC 0x40021000.

Чтобы удобно было работать с битами, создадим структуру:

Чтобы потом не мучаться, сразу перечислим все адреса регистров:

теперь остается написать код для включения периферии:

При работе с регистрами не забываем про volatile, иначе после оптимизации компилятором долго будем искать ошибки и ругать разработчиков компилятора.

Тоже самое делаем для включения тактирвания другой периферии.

В итоге получился такой класс (не все перечислено):

Теперь можно в main.cpp присоединить файл и пользоваться:

Теперь можно и с портами поработать. GPIO

Открываем в документации раздел General-purpose and alternate-function I/Os. Находим Port bit configuration table:

Rcc stm32 что это. . Rcc stm32 что это фото. Rcc stm32 что это-. картинка Rcc stm32 что это. картинка

Битами CNF[1:0] задается режим работы порта (аналоговый вход, цифровой вход, выход), биты MODE[1:0] отвечат за скорость работы порта в режиме выход.

Взглянем на регистры GPIOx_CRL и GPIOx_CRH (x=A, B, C. )

Rcc stm32 что это. fie5khvmvuritwpu0lz3zm gndu. Rcc stm32 что это фото. Rcc stm32 что это-fie5khvmvuritwpu0lz3zm gndu. картинка Rcc stm32 что это. картинка fie5khvmvuritwpu0lz3zm gndu

видно, что биты идут последовательно:

тогда создадим константы с режимами работы портов

тогда метод для конфигурации будет выглядеть так:

теперь можно сделать более удобные методы для выбора режима:

В документации находим адреса управляющих регистров для портов и перечислим:

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

Возможно, у кого-то будет глаз дергаться, но красивее пока не придумал.

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

Также для управления состоянием можно воспользоваться регистрами GPIOx_BSRR.
По аналогии делаем методы для считывания состояния порта, методы для конфигурации и инициализации (не забываем включить тактирование). В итоге получился такой класс для работы с портами:

Проходим дебагером и убеждаемся, что светодиод сначала загорается (после led.ModeOutput();), потом гаснет (led.On();) и снова загорается (led.Off();). Это связано с тем, что светодиод подключен к ножке через линию питания. Поэтому, когда на выводе низкий уровень, светодиод загорается.

Не большие итоги

В данной статье я попытался (надеюсь, получилось) показать как можно немного упростить себе жизнь, сделать код более читаемым. Или наоборот — как нельзя делать. Каждый решит сам.
Можно было просто написать враперы для CMSIS, но это не интересно.

Спасибо за уделенное время. Если интересно продолжение — дайте знать.

Источник

STM32L– Система тактирования (обзор)

Rcc stm32 что это. . Rcc stm32 что это фото. Rcc stm32 что это-. картинка Rcc stm32 что это. картинка

Rcc stm32 что это. image thumb2. Rcc stm32 что это фото. Rcc stm32 что это-image thumb2. картинка Rcc stm32 что это. картинка image thumb2 Стоит обратить внимание на ограничение максимальных частот в зависимости от режима работы (напряжения питания ядра): Rcc stm32 что это. image thumb3. Rcc stm32 что это фото. Rcc stm32 что это-image thumb3. картинка Rcc stm32 что это. картинка image thumb3 Пример 1 Как мы уже знаем после сброса в качестве системной тактовой частоты используется внутренний MSI генератор, с частотой по умолчанию 2,097 МГц. Воспользуемся выходом MCO для контроля частоты. Объявим вывод:

Выбор источников сигнала производится установкой соответствующих битов в регистре RCC_CFGR.

Rcc stm32 что это. image thumb4. Rcc stm32 что это фото. Rcc stm32 что это-image thumb4. картинка Rcc stm32 что это. картинка image thumb4

Rcc stm32 что это. image thumb5. Rcc stm32 что это фото. Rcc stm32 что это-image thumb5. картинка Rcc stm32 что это. картинка image thumb5

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

И выберем в качестве источника MSI генератор:

После компиляции и прошивки, на выводе PA8 получил частоту 2,102 МГц.

Попробуем изменить частоту MSI генератора.

Выбор частоты производится установкой соответствующих битов в регистре RCC_ICSCR

Rcc stm32 что это. image thumb6. Rcc stm32 что это фото. Rcc stm32 что это-image thumb6. картинка Rcc stm32 что это. картинка image thumb6

Rcc stm32 что это. image thumb7. Rcc stm32 что это фото. Rcc stm32 что это-image thumb7. картинка Rcc stm32 что это. картинка image thumb7

Повышаем частоту до 4,194 Мгц:

Компилируем, прошиваем и получаем 4,206 МГц.

Внимание! Так как сейчас после сброса мы “сразу” изменяем частоту генератора MSI, а он по умолчанию используется для системной тактовой частоты, то выбор диапазона 0 или 1 приведет к невозможности программирования мк. Если вы все таки попали в данное положение, то для восстановления работоспособности достаточно вывод Boot0 подключить к Vcc и выполнить сброс мк.

Пример 2

После сброса выключены все генераторы кроме MSI.

Попробуем включить HSI генератор.

Общая процедура такова:

Ожидаем окончания стабилизации работы (ожидание установки бита HSIRDY):

Выводим сигнал на вывод MCO:

После компиляции и прошивки, на выводе PA8 получил частоту 15,91 МГц.

На этом обзорная часть заканчивается.

Ещё раз обращаю внимание, что после сброса в качестве системной тактовой частоты используется внутренний MSI генератор (2,097 МГц).

Исходный код

Примеры базируются на проекте приведенном ранее:

с исправлениями в макросах для работы с линиями ввода-вывода:

Источник

Программирование STM32. Часть 3: Система тактирования

Первое, с чем необходимо разобраться перед дальнейшим изучением микроконтроллеров STM32, является система управления тактированием и сбросом, именуемая RCC. В этой статье мы рассмотрим, как правильно настроить микроконтроллер на работу от внешнего кварцевого резонатора на 8 МГц. Все статьи цикла можно посмотреть тут: http://dimoon.ru/category/obuchalka/stm32f1

Система тактирования в STM32 в сравнении с микроконтроллерами AVR выполнена довольно замысловато. Давайте разбираться.

Содержание:

У микроконтроллеров STM32 все периферийные устройства (порты ввода-вывода, таймеры, интерфейсы SPI, и т.д.) подключены к так называемым шинам, через которые периферия получает тактовый сигнал и обменивается данными с ведущими устройствами шины (например, с процессором).

В STM32F103x8 три основных шины: AHB, APB1 и APB2. На каждой из шин висит определенная группа устройств:

В даташите на STM32F103x8 есть блок-схема, в которой указано, какая периферия куда подключена:

Rcc stm32 что это. 1. Rcc stm32 что это фото. Rcc stm32 что это-1. картинка Rcc stm32 что это. картинка 1Рис. 1. Блок-схема микроконтроллеров STM32F103x8 и STM32F103xB

Схема на рис. 1 поначалу может казаться сложной и непонятной, это нормально, со временем все в голове уложится и ощущение непонимания исчезнет.

А еще есть вот такая таблица, в которой так же указаны периферийные устройства и шины, к которым они подключены:

Rcc stm32 что это. 2. Rcc stm32 что это фото. Rcc stm32 что это-2. картинка Rcc stm32 что это. картинка 2

Рис. 2. Таблица шин и периферийных устройств

Можно заметить, что на рис. 2 возле названия шины (AHB, APB1 и APB2) в скобках указана ее максимальная частота. Так как периферийные устройства получают тактовый сигнал от шины, ее частота задает скорость работы подключенных к данной шине устройств. Далее мы рассмотрим, как настроить частоту каждой из шин микроконтроллера.

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

Итак, вот основные тезисы, которые необходимо запомнить:

Генераторы

В микроконтроллерах STM32F103x8/B присутствует несколько генераторов тактового сигнала:

Rcc stm32 что это. 3. Rcc stm32 что это фото. Rcc stm32 что это-3. картинка Rcc stm32 что это. картинка 3

Рис. 3. Блок-схема системы тактирования, красными прямоугольниками выделены генераторы тактовых сигналов

Первый из них — встроенный RC-генератор на 8 МГц, который называется High-speed internal (HSI) RC oscillator. После сброса микроконтроллер по-умолчанию тактируется как раз от этого генератора. Основным его плюсом является то, что для работы генератора не нужны ни какие дополнительные внешние компоненты. Однако его минус — плохая стабильность генерируемой частоты: при изменении температуры окружающей среды его частота в 8 МГц будет немного плыть. Для нетребовательных ко временнЫм интервалам устройств это может быть не критично, но в некоторых случаях данная особенность является недопустимой.

Следующий — High-speed external (HSE). Этот генератор является альтернативой HSI. Для его работы нужен внешний кварцевый резонатор на частоту 4-16 МГц. Его главным преимуществом в сравнении с HSI является стабильность генерируемой частоты. Так же, при определенной настройке, вывод OSC_IN можно подключить к источнику готового прямоугольного тактового сигнала без использования резонатора.

Далее Low-speed external (LSE). Этот генератор так же требует внешнего кварцевого резонатора, но только на 32768 Гц. LSE используется только для тактирования встроенных часов реального времени RTC, с помощью которых можно вести отсчет текущего времени, если это нужно.

Последний генератор — это Low-speed internal (LSI) RC oscillator. Это встроенный RC-генератор на 40 КГц. Он не отличается особой точностью, однако у него есть очень важная задача: генерация тактового сигнала для сторожевого таймера МК, который перезапустит систему в случае зависания. А еще от LSI можно тактировать RTC, но скорее всего это ни кто делать не будет 😉

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

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

Rcc stm32 что это. 4 1. Rcc stm32 что это фото. Rcc stm32 что это-4 1. картинка Rcc stm32 что это. картинка 4 1

Рис. 4. Распределение тактового сигнала SYSCLK

После делителя AHB Prescaler тактовый сигнал распределяется между шинами микроконтроллера. Сигнал HCLK поступает в процессорное ядро, память и периферию шины AHB. FCLK так же идет в ядро. Через фиксированный делитель на 8 тактирование подается на системный таймер Cortex System timer. Делитель APB1 Prescaler формирует сигнал тактирования устройств шины APB1, а APB2 Prescaler для устройств APB2.

Тут правда есть небольшая особенность формирования тактового сигнала для таймеров и АЦП.

Rcc stm32 что это. 5. Rcc stm32 что это фото. Rcc stm32 что это-5. картинка Rcc stm32 что это. картинка 5

Рис. 5. Распределение тактового сигнала шины APB1 между устройствами

Rcc stm32 что это. 6. Rcc stm32 что это фото. Rcc stm32 что это-6. картинка Rcc stm32 что это. картинка 6

Рис. 6. Распределение тактового сигнала шины APB2 между устройствами

Тактовый сигнал на таймеры подается следующим образом. Если делитель шины (APB1 Prescaler или APB2 Prescaler) установлен в единицу, то частота тактирования тактирования таймеров (TIMXCLK или TIM1CLK) будет равна частоте шины. Но, если делитель не равен единице, то частота тактирования таймеров будет в 2 раза больше частоты шины (см. рис. 5, 6). Вот так 😉 А для АЦП есть свой собственный делитель, который из частоты тактирования шины APB2 формирует сигнал ADCCLK (рис. 6).

Думаю, следует еще обратить внимание на вот эти элементы блок-схемы:

Rcc stm32 что это. 7 1. Rcc stm32 что это фото. Rcc stm32 что это-7 1. картинка Rcc stm32 что это. картинка 7 1

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

Rcc stm32 что это. 8. Rcc stm32 что это фото. Rcc stm32 что это-8. картинка Rcc stm32 что это. картинка 8

У каждого периферийного модуля в специальном регистре есть свой бит (SPI1EN, IOPAEN, IOABEN и так далее), при установке которого в единицу разрешается подача на него тактового сигнала. На рис. 8 я привел пример только для тактового сигнала PCLK2 шины APB2, для остальных сигналов (HCLK, PCLK1, TIMXCLK, TIM1CLK) все то же самое.

Источники сигнала SYSCLK

Итак, теперь мы знаем, что основным тактовым сигналом в микроконтроллерах STM32 является SYSCLK. Давайте теперь разберемся, как его получить. В нашем распоряжении 3 варианта: генераторы HSI, HSE и модуль PLL:

Rcc stm32 что это. 9. Rcc stm32 что это фото. Rcc stm32 что это-9. картинка Rcc stm32 что это. картинка 9

Рис. 9. Источники сигнала SYSCLK

После сброса микроконтроллера в качестве источника сигнала SYSCLK по-умолчанию устанавливается встроенный RC-генератор HSI. Прохождение тактового сигнала для этого случая представлено на рис. 10, значения по-умолчанию всех делителей обвел кружочком:

Rcc stm32 что это. 7. Rcc stm32 что это фото. Rcc stm32 что это-7. картинка Rcc stm32 что это. картинка 7

Рис. 10. Конфигурация системы тактирования по-умолчанию

А теперь давайте посчитаем значения всех частот в конфигурации по-умолчанию. Частоты HCLK, FCLK, PCLK1, TIMXCLK, PCLK2, TIM1CLK будут равны 8 МГц, частота Cortex System timer равна 1 МГц, а ADCCLK 4 Мгц.

Если мы хотим задействовать HSE-генератор, то картина будет следующей:

Rcc stm32 что это. 11 1. Rcc stm32 что это фото. Rcc stm32 что это-11 1. картинка Rcc stm32 что это. картинка 11 1

Рис. 11. Выбор генератора HSE в качестве источника тактирования SYSCLK

При использовании кварцевого резонатора на 8 МГц все системные частоты будут такими же, что и в предыдущем случае. Разница только в одном: при использовании генератора HSE стабильность частот лучше, чем при использовании HSI. Однако, если мы хотим получить максимальную производительность всей системы, то нужно в качестве источника SYSCLK использовать блок умножения частоты PLL.

HSE и PLL

В микроконтроллерах STM32 модуль PLL может тактироваться как от HSI генератора, так и от HSE. Существует огромное количество вариантов настройки тактирования системы от PLL. Мы остановимся только на одном, в котором используется HSE и все коэффициенты настроены на максимальную производительность системы:

Rcc stm32 что это. 12. Rcc stm32 что это фото. Rcc stm32 что это-12. картинка Rcc stm32 что это. картинка 12

Рис. 12. Схема прохождения тактового сигнала при использовании PLL совместно с HSE

Кварцевый резонатор выбираем на 8 МГц. Далее, сигнал с HSE без деления (настраивается битом PLLXTPRE) поступает на селектор PLLSRC и потом на PLL. Для того, чтобы из 8-и МГц получить 72 МГц, коэффициент умножения PLL должен быть равен PLLMUL=9. Далее, сигнал с PLL частотой 72 МГц через селектор SW поступает на SYSCLK. Так как процессорное ядро мы хотим тактировать максимальной частотой в 72 МГц, AHB Prescaler устанавливаем равный единице (без деления). Для получения частоты шины APB1, равной 36 МГц, APB1 Prescaler ставим равным 2. Шина APB2 имеет максимальную частоту 72 МГц, следовательно, APB2 Prescaler можно установить в 1.

Что еще?

Здесь мы не рассмотрели еще некоторые блоки системы тактирования, о которых хочется упомянуть.

Clock security system (CSS) — переводится примерно как «система безопасности тактирования». Если, при использовании генератора HSE в качестве источника тактового сигнала для SYSCLK или PLL, произойдет срыв генерации HSE, то CSS автоматически переключит всю систему на работу от встроенного RC-генератора HSI. Таким образом, если что-то случится с кварцем, система не зависнет намертво в неопределенном состоянии, а сможет выполнить какие-то действия, например, перевести объект управления в безопасное состояние (закрыть все вентили, отключить силовые установки, и т.д.)

Модуль часов реального времени RTC может тактироваться от встроенного LSI генератора на 40 КГц, от HSE через делитель на 128, либо от LSE с внешним кварцем на 32768 Гц. Источник тактовых импульсов выбирается с помощью RTCSEL.

Модуль USB получает тактовый сигнал от PLL, причем при частоте на выходе PLL равной 72 МГц есть возможность активировать USB Prescaler с коэффициентом деления 1.5 для получения необходимой частоты 48 МГц.

Microcontroller clock output (MCO) — вывод микроконтроллера, на который можно вывести частоту от одного из источников сигнала: SYSCLK, HSE, HSI либо сигнал с выхода PLL, поделенный пополам. Нужный источник выбирается с помощью битов MCO.

Заключение

Итак, мы рассмотрели основные моменты в системе тактирования микроконтроллеров STM32 на примере STM32F103x8 и STM32F103xB. В других микроконтроллерах STM32 примерно все то же самое, за исключением некоторых нюансов. В следующей части мы познакомимся с регистрами системы тактирования и сброса RCC и рассмотрим пример инициализации RCC.

Источник

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

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