Найти тему
Михаил Багров

Программируем под STM32. Как включить или выключить тактирование шины.

Оглавление

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

Что такое тактирование шин?

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

Как узнать, какие шины есть в микропроцессоре?

Для этого нужно обратиться к Datasheet-у. В данном случае мы обращаемся к технической документации STM32F407

В технической документации приведена вся необходимая информация.
В технической документации приведена вся необходимая информация.

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

Главная шина - AHB1 (выделена серым) от нее тактируется ядро микропроцессора, часть периферии (порты ввода вывода, DMA1, DMA2, USB, Internet и т.д.), а так-же все остальные шины. Как видно из рисунка, максимальная тактовая частота составляет 168 МГц.

Дальше идут шины APB1 и APB2. Это шину, которые работают непосредственно с периферией микропроцессора. Такие как таймеры, последовательные интерфейсы USART, I2C или I2S, сторожевые таймеры и цифроаналоговые преобразователи, CAN и PWM. Структурную схему легко и главное нужно использовать. Так как она содержит в себе всю информацию о всех периферийных устройствах.

Как правильно включить тактирование нужной шины?

Это не сложно. Опять же нужно обратиться к разделу технической документации Reset and clock control for STM32, на интересуют регистры RCC registers.

Предположим нам нужно включить тактирование таймера №6. Делаем следующие шаги:

На функциональной схеме смотрим к какой шине подключен таймер №6.

Желтым выделена необходимая периферия.
Желтым выделена необходимая периферия.

Таймер №6 подключен шине APB1. Чтобы включить таймер нужно обратится к группе RCC (RESET AND CLOCK CONTROL) и с помощью указателя -> выбрать необходимую шину, после чего установить бит отвечающий за тактирование таймера в единицу.

RCC->APB1ENR |= RCC_APB1ENR_TIM6EN; - ВКЛЮЧАЕМ ТАКТИРОВАНИЕ ТАЙМЕРА.
RCC->APB1ENR &=~ RCC_APB1ENR_TIM6EN; - ВЫКЛЮЧАЕМ ТАКТИРОВАНИЕ ТАЙМЕРА.

Или предположим, нам нужно включить тактирование порта ввода вывода под индексом D. Для этого требуется обратится к шине AHB1 и установить бит включения тактирования порта.

RCC->AHB1ENR |= RCC_AHB1ENR_GPIODEN; - ТАКТИРОВАНИЕ ПОРТА ВКЛЮЧЕНО.
RCC->AHB1ENR &= ~RCC_AHB1ENR_GPIODEN; - ТАКТИРОВАНИЕ ПОРТА ВЫКЛЮЧЕНО.

Вот так все просто, но как показала практика, даже в таком элементарном вопросе, начинающие программисты микроконтроллеров плавают.