|
modm API documentation
|
#include <modm/platform/clock/rcc.hpp>
Classes | |
| struct | PllConfig |
Public Types | |
| enum | MsiRange : uint32_t { MsiRange::kHz65 = 0b000 << RCC_ICSCR_MSIRANGE_Pos, MsiRange::kHz131 = 0b001 << RCC_ICSCR_MSIRANGE_Pos, MsiRange::kHz262 = 0b010 << RCC_ICSCR_MSIRANGE_Pos, MsiRange::kHz524 = 0b011 << RCC_ICSCR_MSIRANGE_Pos, MsiRange::MHz1 = 0b100 << RCC_ICSCR_MSIRANGE_Pos, MsiRange::MHz2 = 0b101 << RCC_ICSCR_MSIRANGE_Pos, MsiRange::MHz4 = 0b110 << RCC_ICSCR_MSIRANGE_Pos } |
| enum | LseDrive : uint8_t { Low = 0b00, MediumLow = 0b01, MediumHigh = 0b10, High = 0b11 } |
| enum | PllSource : uint8_t { PllSource::Hsi = 0b0, PllSource::Hse = 0b1 } |
| enum | PllMultiplier : uint8_t { Mul3 = 0b0000, Mul4 = 0b0001, Mul6 = 0b0010, Mul8 = 0b0011, Mul12 = 0b0100, Mul16 = 0b0101, Mul24 = 0b0110, Mul32 = 0b0111, Mul48 = 0b1000 } |
| enum | AhbPrescaler : uint8_t { Div1 = 0b0000, Div2 = 0b1000, Div4 = 0b1001, Div8 = 0b1010, Div16 = 0b1011, Div64 = 0b1100, Div128 = 0b1101, Div256 = 0b1110, Div512 = 0b1111 } |
| enum | ApbPrescaler : uint8_t { Div1 = 0b000, Div2 = 0b100, Div4 = 0b101, Div8 = 0b110, Div16 = 0b111 } |
| enum | SystemClockSource : uint32_t { Msi = 0b00, Hsi = 0b01, Hse = 0b10, Pll = 0b11 } |
| enum | RealTimeClockSource : uint32_t { Disabled = 0, Lse = 0b01 << RCC_CSR_RTCSEL_Pos, Lsi = 0b10 << RCC_CSR_RTCSEL_Pos, RealTimeClockSource::Hse = 0b11 << RCC_CSR_RTCSEL_Pos } |
| enum | RtcPrescaler : uint8_t { Div2 = 0b00, Div4 = 0b01, Div8 = 0b10, Div16 = 0b11 } |
| enum | UsartClockSource : uint8_t { Bus = 0b00, SysClk = 0b01, Hsi = 0b10, Lse = 0b11 } |
| enum | I2cClockSource : uint8_t { Bus = 0b00, SysClk = 0b01, Hsi = 0b10 } |
| enum | Lptim1ClockSource : uint8_t { Bus = 0b00, Lsi = 0b01, Hsi = 0b10, Lse = 0b11 } |
| enum | McoClockSource : uint32_t { Disabled = 0b0000 << RCC_CFGR_MCOSEL_Pos, SysClk = 0b0001 << RCC_CFGR_MCOSEL_Pos, Hsi = 0b0010 << RCC_CFGR_MCOSEL_Pos, Msi = 0b0011 << RCC_CFGR_MCOSEL_Pos, Hse = 0b0100 << RCC_CFGR_MCOSEL_Pos, Pll = 0b0101 << RCC_CFGR_MCOSEL_Pos, Lsi = 0b0110 << RCC_CFGR_MCOSEL_Pos, Lse = 0b0111 << RCC_CFGR_MCOSEL_Pos, Hsi48 = 0b1000 << RCC_CFGR_MCOSEL_Pos } |
| enum | McoPrescaler : uint8_t { Div1 = 0b000, Div2 = 0b001, Div4 = 0b010, Div8 = 0b011, Div16 = 0b100 } |
Static Public Member Functions | |
| template<class... Signals> | |
| static void | connect () |
| Connect GPIO signals like MCO to the clock tree. | |
| template<Peripheral peripheral> | |
| static void | enable () |
| Enable the clock for a peripheral. | |
| template<Peripheral peripheral> | |
| static bool | isEnabled () |
| Check if a peripheral clock is enabled. | |
| template<Peripheral peripheral> | |
| static void | disable () |
| Disable the clock for a peripheral. | |
| template<uint32_t Core_Hz, uint16_t Core_mV = 3300> | |
| static uint32_t | setFlashLatency () |
| template<uint32_t Core_Hz> | |
| static void | updateCoreFrequency () |
| Update the SystemCoreClock and delay variables. | |
| static bool | enableMsiClock (MsiRange range=MsiRange::MHz2, uint32_t waitLoops=0x10000) |
| static bool | enableHsiClock (uint32_t waitLoops=0x10000) |
| static bool | enableHsi4Clock (uint32_t waitLoops=0x10000) |
| Enable HSI4 clock by dividing HSI16 by 4. | |
| static bool | enableHsi48Clock (uint32_t waitLoops=0x10000) |
| static bool | enableHseClock (uint32_t waitLoops=0x10000) |
| static bool | enableHseCrystal (uint32_t waitLoops=0x10000) |
| static bool | enableLsiClock (uint32_t waitLoops=0x10000) |
| static bool | enableLseClock (uint32_t waitLoops=0x10000) |
| static bool | enableLseCrystal (LseDrive drive=LseDrive::Low, uint32_t waitLoops=0x10000) |
| static bool | enablePll (PllSource src, const PllConfig &cfg, uint32_t waitLoops=0x10000) |
| Configure and enable the PLL. | |
| static bool | disablePll (uint32_t waitLoops=0x10000) |
| Disable PLL. | |
| static constexpr uint8_t | value (PllMultiplier m) |
| static void | setAhbPrescaler (AhbPrescaler prescaler) |
| static void | setApb1Prescaler (ApbPrescaler prescaler) |
| static void | setApb2Prescaler (ApbPrescaler prescaler) |
| static bool | enableSystemClock (SystemClockSource src, uint32_t waitLoops=0x10000) |
| static void | setRealTimeClockSource (RealTimeClockSource src, RtcPrescaler prescaler=RtcPrescaler::Div2) |
| static void | setUsart1ClockSource (UsartClockSource src) |
| static void | setUsart2ClockSource (UsartClockSource src) |
| static void | setLpuart1ClockSource (UsartClockSource src) |
| static void | setI2c1ClockSource (I2cClockSource src) |
| static void | setI2c3ClockSource (I2cClockSource src) |
| static void | setLptim1ClockSource (Lptim1ClockSource src) |
| static void | setHsi48ClockSource (bool usePll) |
| static void | setMcoClockSource (McoClockSource src, McoPrescaler prescaler=McoPrescaler::Div1) |
Static Public Attributes | |
| static constexpr uint32_t | LsiFrequency = 37'000 |
| static constexpr uint32_t | HsiFrequency = 16'000'000 |
| static constexpr uint32_t | MsiFrequency = 2'097'000 |
| Default MSI frequency at boot. | |
| static constexpr uint32_t | BootFrequency = MsiFrequency |
| static constexpr uint32_t | MaxFrequency = 32'000'000 |
Reset and Clock Control for STM32L0 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.
|
strong |
|
strong |
|
strong |
| Enum Values | Documentation |
|---|---|
| Hse | HSE divided by RTC prescaler (2, 4, 8, 16) |
|
static |
Set flash latency for CPU frequency and voltage. Does nothing if CPU frequency is too high for the available voltage.
| <=CPU_Frequency | flash latency has been set correctly. |
| >CPU_Frequency | requested frequency too high for voltage. |