В мире встроенных процессоров энергопотребление имеет решающее значение; следовательно, большинство сложных встроенных процессоров предоставляют механизмы для отключения любых ресурсов, которые не требуются для конкретного приложения. STM32 имеет сложную сеть распределения тактовых импульсов, которая обеспечивает питание только тех периферийных устройств, которые действительно необходимы. Эта система, называемая Reset and Clock Control (RCC), поддерживается модулем прошивки stm32f10x_rcc. Хотя этот модуль можно использовать для управления основными системными часами и PLL, любая необходимая конфигурация этих часов обрабатывается кодом запуска. Наша задача — просто включить периферийные часы.
Периферийные устройства STM32 организованы в три отдельные группы, называемые APB1, APB2 и AHB. К периферийным устройствам APB1 относятся устройства I2C, USART 2-5 и устройства SPI; Устройства APB2 включают в себя порты GPIO, контроллеры ADC и USART 1. Устройства AHB в основном ориентированы на память, включая контроллеры DMA и интерфейсы внешней памяти (для некоторых устройств).
Часы на различные периферийные устройства могут управляться тремя процедурами прошивки:
RCC_APB1PeriphClockCmd(uint32_t RCC_APB1PERIPH , FunctionalState NewState) RCC_APB2PeriphClockCmd(uint32_t RCC_APB2PERIPH , FunctionalState NewState) RCC_AHBPeriphClockCmd(uint32_t RCC_AHBPERIPH , FunctionalState NewState)
Каждая процедура принимает два параметра — битовый вектор периферийных устройств, состояние которых должно быть изменено, и действие — ВКЛЮЧИТЬ или ОТКЛЮЧИТЬ. Например, порты GPIO A и B можно включить с помощью следующего вызова:
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_GPIOB , ENABLE);
Соответствующие константы определены в stm32f10x_rcc.h; имена констант, относительно понятны и соответствуют именам устройств, используемым в различных справочных руководствах STM32 , ограниченным теми, которые присутствуют в MCU STM32 на плате. Это является свидетельством дизайна семейства STM32, в котором одинаковые константы и базовая библиотека применяются к широкому семейству устройств. (Обратите внимание, что компоненты stm32f2xx и stm32f4xx имеют разные, хотя и схожие стандартные периферийные библиотеки):

Стандартный код периферийной библиотеки для включения часов не выполняет никакой «магии», а освобождает программиста от необходимости быть близко знакомым с регистрами микроконтроллеров. Например, периферийные устройства APB2 включаются через один регистр (RCC_APB2ENR), каждое периферийное устройство включено (или отключено) состоянием одного бита. Например, бит 2 определяет, включен ли GPIOA (1) или отключен (0). Применяя определения структуры и регистра в stm32f10x.h , мы можем включить GPIOA и GPIOB следующим образом:
ABP2ENR |= 0x0C;
