modm API documentation
modm::platform::Rcc Class Reference

#include <modm/platform/clock/rcc.hpp>

Classes

struct  PllFactors
 

Public Types

enum  PllSource : uint32_t {
  PllSource::Hsi = RCC_CFGR_PLLSRC_HSI_PREDIV, InternalClock = Hsi, HsiDiv2 = RCC_CFGR_PLLSRC_HSI_DIV2, PllSource::Hse = RCC_CFGR_PLLSRC_HSE_PREDIV,
  PllSource::Hsi48 = RCC_CFGR_PLLSRC_HSI48_PREDIV, InternalClockMHz48 = Hsi48, ExternalClock = Hse, ExternalCrystal = Hse
}
 
enum  SystemClockSource : uint32_t {
  Hsi = RCC_CFGR_SW_HSI, Hse = RCC_CFGR_SW_HSE, Hsi48 = RCC_CFGR_SW_HSI48, InternalClockMHz48 = Hsi48,
  InternalClock = Hsi, ExternalClock = Hse, ExternalCrystal = Hse, Pll = RCC_CFGR_SW_PLL
}
 
enum  RealTimeClockSource : uint32_t {
  Lsi = RCC_BDCR_RTCSEL_1, Lse = RCC_BDCR_RTCSEL_0, Hse = RCC_BDCR_RTCSEL_0 | RCC_BDCR_RTCSEL_1, ExternalClock = Hse,
  ExternalCrystal = Hse, LowSpeedInternalClock = Lsi, LowSpeedExternalClock = Lse, LowSpeedExternalCrystal = Lse
}
 
enum  WatchdogClockSource : uint32_t { LowSpeedInternalClock = 0 }
 
enum  AhbPrescaler : uint32_t {
  Div1 = RCC_CFGR_HPRE_DIV1, Div2 = RCC_CFGR_HPRE_DIV2, Div4 = RCC_CFGR_HPRE_DIV4, Div8 = RCC_CFGR_HPRE_DIV8,
  Div16 = RCC_CFGR_HPRE_DIV16, Div64 = RCC_CFGR_HPRE_DIV64, Div128 = RCC_CFGR_HPRE_DIV128, Div256 = RCC_CFGR_HPRE_DIV256,
  Div512 = RCC_CFGR_HPRE_DIV512
}
 
enum  ApbPrescaler : uint32_t {
  Div1 = RCC_CFGR_PPRE_DIV1, Div2 = RCC_CFGR_PPRE_DIV2, Div4 = RCC_CFGR_PPRE_DIV4, Div8 = RCC_CFGR_PPRE_DIV8,
  Div16 = RCC_CFGR_PPRE_DIV16
}
 
enum  UsbPrescaler : uint32_t { UsbPrescaler::Div1 = RCC_CFGR_USBPRE, UsbPrescaler::Div1_5 = 0 }
 
enum  ClockOutputSource : uint32_t {
  SystemClock = RCC_CFGR_MCO_SYSCLK, InternalClock = RCC_CFGR_MCO_HSI, ExternalClock = RCC_CFGR_MCO_HSE, ExternalCrystal = RCC_CFGR_MCO_HSE,
  InternalClockMHz14 = RCC_CFGR_MCO_HSI14, InternalClockMHz48 = RCC_CFGR_MCO_HSI48, Pll = RCC_CFGR_MCO_PLL
}
 

Static Public Member Functions

static bool enableInternalClock (uint32_t waitCycles=2048)
 
static bool enableInternalClockMHz14 (uint32_t waitCycles=2048)
 
static bool enableInternalClockMHz48 (uint32_t waitCycles=2048)
 
static bool enableExternalClock (uint32_t waitCycles=2048)
 
static bool enableExternalCrystal (uint32_t waitCycles=2048)
 
static bool enableLowSpeedInternalClock (uint32_t waitCycles=2048)
 
static bool enableLowSpeedExternalClock (uint32_t waitCycles=2048)
 
static bool enableLowSpeedExternalCrystal (uint32_t waitCycles=2048)
 
static bool enablePll (PllSource source, const PllFactors &pllFactors, uint32_t waitCycles=2048)
 
static bool disablePll (uint32_t waitCycles=2048)
 
static bool enableSystemClock (SystemClockSource src, uint32_t waitCycles=2048)
 
static bool enableRealTimeClock (RealTimeClockSource src)
 
static bool enableWatchdogClock (WatchdogClockSource)
 
static bool enableClockOutput (ClockOutputSource src)
 
static bool setAhbPrescaler (AhbPrescaler prescaler)
 
static bool setApbPrescaler (ApbPrescaler prescaler)
 
template<uint32_t Core_Hz, uint16_t Core_mV = 3300>
static uint32_t setFlashLatency ()
 
template<uint32_t Core_Hz>
static void updateCoreFrequency ()
 
template<class... Signals>
static void connect ()
 
template<Peripheral peripheral>
static void enable ()
 
template<Peripheral peripheral>
static bool isEnabled ()
 
template<Peripheral peripheral>
static void disable ()
 

Static Public Attributes

static constexpr uint32_t LsiFrequency = 32'000
 
static constexpr uint32_t HsiFrequency = 16'000'000
 
static constexpr uint32_t BootFrequency = 16'000'000
 

Detailed Description

Reset and Clock Control for STM32 devices.

This class abstracts access to clock settings on the STM32. You need to use this class to enable internal and external clock sources & outputs, set PLL parameters and AHB & APB prescalers. Don't forget to set the flash latencies.

Author
Niklas Hauser

Member Enumeration Documentation

enum modm::platform::Rcc::PllSource : uint32_t
strong
Enum ValuesDocumentation
Hsi 

High speed internal clock (8 MHz)

Hse 

High speed external clock.

Hsi48 

High speed internal clock (48 MHz)

enum modm::platform::Rcc::UsbPrescaler : uint32_t
strong
Enum ValuesDocumentation
Div1 

do not divide

Div1_5 

divide by 1.5

Member Function Documentation

bool modm::platform::Rcc::disablePll ( uint32_t  waitCycles = 2048)
static

Disable PLL.

Parameters
waitCyclesNumber of cycles to wait for the pll to stabilise. Default: 2048.
bool modm::platform::Rcc::enablePll ( PllSource  source,
const PllFactors pllFactors,
uint32_t  waitCycles = 2048 
)
static

Enable PLL.

Parameters
sourceSource select for PLL. If you are using HSE you must enable it first (see enableHse()).
factorsStruct with all pll factors.
See also
PllFactors.
Parameters
waitCyclesNumber of cycles to wait for the pll to stabilise. Default: 2048.
template<uint32_t Core_Hz, uint16_t Core_mV = 3300>
static uint32_t modm::platform::Rcc::setFlashLatency ( )
static

Set flash latency for CPU frequency and voltage. Does nothing if CPU frequency is too high for the available voltage.

Returns
maximum CPU frequency for voltage.
Return Values
<=CPU_Frequencyflash latency has been set correctly.
>CPU_Frequencyrequested frequency too high for voltage.

The documentation for this class was generated from the following files: