Master Clock Output — определение тактовой частоты STM32F0

Весьма интересная функция имеется в камешках STM32, вывод на один из пинов сигнала MCO (и не только в STM32, в MSP430 такая возможность тоже имеется).

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

Рассмотрим пример для STM32F030, на рисунке 1 приведен принтскрин с CubeMX схемы тактирования.

CLK_STM32F030

Рисунок 1 — Схема тактирования

Без каких либо вмешательств система тактируется от внутреннего генератора с частотой 8 МГц, Соответственно и вся перефирия также работает на такой частоте.

В STM32F030 выход MCO находится на 18 ноге контроллера (PA8). Первое что нужно — включить тактирование порта А:

RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOA, ENABLE);

Далее настроить нужный пин:

GPIO_InitTypeDef GPIO_InitStructure;//Создаем структуру с настройками
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8;//Выбираем нужный нам пин
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;//альтернативная функция пина
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;//Частота
GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;//тип выхода
GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL;//без подтяжек

Проведем инициализацию:

GPIO_Init(GPIOA, &GPIO_InitStructure);//инициализируем пин

Непосредственно настройка того, какой именно сигнал выводить на пин:

RCC_MCOConfig(RCC_MCOSource_*, RCC_MCOPrescaler_*);

Первым идет: RCC_MCOSource_* — выбор одного из 6 сигналов (рисунок 2).

Вторым идет: RCC_MCOPrescaler_* —  предделитель частоты (рисунок 3).

  MSO_STM32F030Рисунок 2 — Тактовые сигналы

DIV

Рисунок 3 — Предделитель

Ну и сам код в куче:

void OutputMCO() 
{
GPIO_InitTypeDef GPIO_InitStructure;
RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOA, ENABLE);
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL;
GPIO_Init(GPIOA, &GPIO_InitStructure);
RCC_MCOConfig(RCC_MCOSource_HSE,RCC_MCOPrescaler_32);
}

You may also like...

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

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

Можно использовать следующие HTML-теги и атрибуты: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>