The STM32 peripherals are organized into three distinct groups called
APB1, APB2, and AHB. APB1 peripherals include the I2C devices, USARTs
2-5, and SPI devices; APB2 devices include the GPIO ports, ADC controllers
and USART 1. AHB devices are primarily memory oriented including the
DMA controllers and external memory interfaces (for some devices)
Clocks to the various peripherals can be controlled with three firmware
routines: