Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
52 changes: 33 additions & 19 deletions src/modm/board/disco_f051r8/board.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -32,36 +32,50 @@ using namespace modm::literals;
/// STM32F0 running at 48MHz generated from the internal 8MHz with PLL.
struct SystemClock
{
static constexpr uint32_t Frequency = 48_MHz;
static constexpr uint32_t Usart1 = Frequency;
static constexpr uint32_t Usart2 = Frequency;
static constexpr uint32_t Spi2 = Frequency;
static constexpr Rcc::PllConfig pll{.Mul = 12, .Prediv = 1};
static constexpr uint32_t Pll = Rcc::HsiFrequency / 2 * pll.Mul / pll.Prediv;
static constexpr uint32_t Frequency = Pll;
static constexpr uint32_t Ahb = Frequency;
static constexpr uint32_t Apb = Frequency;

static constexpr uint32_t Adc1 = Apb;

static constexpr uint32_t Spi1 = Apb;
static constexpr uint32_t Spi2 = Apb;

static constexpr uint32_t Usart1 = Apb;
static constexpr uint32_t Usart2 = Apb;

static constexpr uint32_t I2c1 = Apb;
static constexpr uint32_t I2c2 = Apb;

static constexpr uint32_t Timer1 = Apb;
static constexpr uint32_t Timer2 = Apb;
static constexpr uint32_t Timer3 = Apb;
static constexpr uint32_t Timer6 = Apb;
static constexpr uint32_t Timer14 = Apb;
static constexpr uint32_t Timer15 = Apb;
static constexpr uint32_t Timer16 = Apb;
static constexpr uint32_t Timer17 = Apb;

static constexpr uint32_t Iwdg = Rcc::LsiFrequency;
static constexpr uint32_t Rtc = Rcc::LsiFrequency;

static bool inline
enable()
{
Rcc::enableLowSpeedInternalClock();
Rcc::enableRealTimeClock(Rcc::RealTimeClockSource::Lsi);

// enable internal 8 MHz HSI RC clock
Rcc::enableInternalClock();
// (internal clock / 2) * 12 = 48MHz
const Rcc::PllFactors pllFactors{
.pllMul = 12,
.pllPrediv = 1 // only used with Hse
};
Rcc::enablePll(Rcc::PllSource::HsiDiv2, pllFactors);
// set flash latency for 48MHz
Rcc::enableLsiClock();
Rcc::enableHsiClock();

Rcc::setFlashLatency<Frequency>();
// switch system clock to PLL output
Rcc::updateCoreFrequency<Frequency>();

Rcc::enablePll(Rcc::PllSource::HsiDiv2, pll);
Rcc::enableSystemClock(Rcc::SystemClockSource::Pll);
Rcc::setAhbPrescaler(Rcc::AhbPrescaler::Div1);
Rcc::setApbPrescaler(Rcc::ApbPrescaler::Div1);
// update frequencies for busy-wait delay functions
Rcc::updateCoreFrequency<Frequency>();

Rcc::setRealTimeClockSource(Rcc::RealTimeClockSource::Lsi);
return true;
}
};
Expand Down
27 changes: 12 additions & 15 deletions src/modm/board/disco_f072rb/board.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -34,7 +34,8 @@ using namespace modm::literals;
/// STM32F072 running at 48MHz generated from the internal 48MHz clock
struct SystemClock
{
static constexpr uint32_t Frequency = 48_MHz;
static constexpr uint32_t Hsi48 = 48_MHz;
static constexpr uint32_t Frequency = Hsi48;
static constexpr uint32_t Ahb = Frequency;
static constexpr uint32_t Apb = Frequency;

Expand All @@ -52,35 +53,31 @@ struct SystemClock
static constexpr uint32_t I2c1 = Apb;
static constexpr uint32_t I2c2 = Apb;

static constexpr uint32_t Timer1 = Apb;
static constexpr uint32_t Timer2 = Apb;
static constexpr uint32_t Timer3 = Apb;
static constexpr uint32_t Timer6 = Apb;
static constexpr uint32_t Timer7 = Apb;
static constexpr uint32_t Timer1 = Apb;
static constexpr uint32_t Timer2 = Apb;
static constexpr uint32_t Timer3 = Apb;
static constexpr uint32_t Timer6 = Apb;
static constexpr uint32_t Timer7 = Apb;
static constexpr uint32_t Timer14 = Apb;
static constexpr uint32_t Timer15 = Apb;
static constexpr uint32_t Timer16 = Apb;
static constexpr uint32_t Timer17 = Apb;

static constexpr uint32_t Usb = 48_MHz;
static constexpr uint32_t Usb = Hsi48;
static constexpr uint32_t Iwdg = Rcc::LsiFrequency;
static constexpr uint32_t Rtc = Rcc::LsiFrequency;

static bool inline
enable()
{
Rcc::enableLowSpeedInternalClock();
Rcc::enableRealTimeClock(Rcc::RealTimeClockSource::Lsi);
Rcc::enableLsiClock();
Rcc::enableHsi48Clock();

// Enable the internal 48MHz clock
Rcc::enableInternalClockMHz48();
// set flash latency for 48MHz
Rcc::setFlashLatency<Frequency>();
// Switch to the 48MHz clock
Rcc::enableSystemClock(Rcc::SystemClockSource::InternalClockMHz48);
// update frequencies for busy-wait delay functions
Rcc::updateCoreFrequency<Frequency>();

Rcc::enableSystemClock(Rcc::SystemClockSource::Hsi48);
Rcc::setRealTimeClockSource(Rcc::RealTimeClockSource::Lsi);
return true;
}
};
Expand Down
38 changes: 17 additions & 21 deletions src/modm/board/nucleo_f031k6/board.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -30,49 +30,45 @@ using namespace modm::literals;
/// STM32F031K6 running at 48MHz generated from the internal 8MHz crystal
struct SystemClock
{
static constexpr uint32_t Frequency = 48_MHz;
static constexpr Rcc::PllConfig pll{.Mul = 12, .Prediv = 1};
static constexpr uint32_t Pll = Rcc::HsiFrequency / 2 * pll.Mul / pll.Prediv;
static constexpr uint32_t Frequency = Pll;
static constexpr uint32_t Ahb = Frequency;
static constexpr uint32_t Apb = Frequency;

static constexpr uint32_t Adc1 = Apb;
static constexpr uint32_t Adc1 = Apb;

static constexpr uint32_t Spi1 = Apb;
static constexpr uint32_t Spi1 = Apb;

static constexpr uint32_t Usart1 = Apb;

static constexpr uint32_t I2c1 = Apb;
static constexpr uint32_t I2c1 = Apb;

static constexpr uint32_t Timer1 = Apb;
static constexpr uint32_t Timer2 = Apb;
static constexpr uint32_t Timer3 = Apb;
static constexpr uint32_t Timer1 = Apb;
static constexpr uint32_t Timer2 = Apb;
static constexpr uint32_t Timer3 = Apb;
static constexpr uint32_t Timer14 = Apb;
static constexpr uint32_t Timer16 = Apb;
static constexpr uint32_t Timer17 = Apb;

static constexpr uint32_t Iwdg = Rcc::LsiFrequency;
static constexpr uint32_t Rtc = 32.768_kHz;

static bool inline
enable()
{
Rcc::enableLowSpeedExternalCrystal();
Rcc::enableRealTimeClock(Rcc::RealTimeClockSource::LowSpeedExternalCrystal);

Rcc::enableInternalClock(); // 8MHz
// (internal clock / 2) * 12 = 48MHz
const Rcc::PllFactors pllFactors{
.pllMul = 12,
.pllPrediv = 1 // only used with Hse
};
Rcc::enablePll(Rcc::PllSource::HsiDiv2, pllFactors);
// set flash latency for 48MHz
Rcc::enableLseCrystal();
Rcc::enableHsiClock();

Rcc::setFlashLatency<Frequency>();
// switch system clock to PLL output
Rcc::updateCoreFrequency<Frequency>();

Rcc::enablePll(Rcc::PllSource::HsiDiv2, pll);
Rcc::enableSystemClock(Rcc::SystemClockSource::Pll);
Rcc::setAhbPrescaler(Rcc::AhbPrescaler::Div1);
Rcc::setApbPrescaler(Rcc::ApbPrescaler::Div1);
// update frequencies for busy-wait delay functions
Rcc::updateCoreFrequency<Frequency>();

Rcc::setRealTimeClockSource(Rcc::RealTimeClockSource::Lse);
return true;
}
};
Expand Down
43 changes: 21 additions & 22 deletions src/modm/board/nucleo_f042k6/board.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -31,51 +31,50 @@ using namespace modm::literals;
/// STM32F042K6 running at 48MHz generated from the internal 8MHz crystal
struct SystemClock
{
static constexpr uint32_t Frequency = 48_MHz;
static constexpr uint32_t Hsi = 8_MHz;
static constexpr Rcc::PllConfig pll{.Mul = 12, .Prediv = 2};
static constexpr uint32_t Pll = Rcc::HsiFrequency / 2 * pll.Mul / pll.Prediv;
static constexpr uint32_t Frequency = Pll;
static constexpr uint32_t Ahb = Frequency;
static constexpr uint32_t Apb = Frequency;

static constexpr uint32_t Adc1 = Apb;
static constexpr uint32_t Adc1 = Apb;

static constexpr uint32_t Spi1 = Apb;
static constexpr uint32_t Can = Apb;

static constexpr uint32_t Spi1 = Apb;
static constexpr uint32_t Spi2 = Apb;

static constexpr uint32_t Usart1 = Apb;
static constexpr uint32_t Usart2 = Apb;

static constexpr uint32_t I2c1 = Hsi;
static constexpr uint32_t I2c1 = Rcc::HsiFrequency;

static constexpr uint32_t Timer1 = Apb;
static constexpr uint32_t Timer2 = Apb;
static constexpr uint32_t Timer3 = Apb;
static constexpr uint32_t Timer1 = Apb;
static constexpr uint32_t Timer2 = Apb;
static constexpr uint32_t Timer3 = Apb;
static constexpr uint32_t Timer14 = Apb;
static constexpr uint32_t Timer16 = Apb;
static constexpr uint32_t Timer17 = Apb;

static constexpr uint32_t Usb = 48_MHz;
static constexpr uint32_t Iwdg = Rcc::LsiFrequency;
static constexpr uint32_t Rtc = 32.768_kHz;

static bool inline
enable()
{
Rcc::enableLowSpeedExternalCrystal();
Rcc::enableRealTimeClock(Rcc::RealTimeClockSource::LowSpeedExternalCrystal);

Rcc::enableInternalClock(); // 8MHz
// (internal clock / 2) * 12 = 48MHz
const Rcc::PllFactors pllFactors{
.pllMul = 12,
.pllPrediv = 2
};
Rcc::enablePll(Rcc::PllSource::InternalClock, pllFactors);
// set flash latency for 48MHz
Rcc::enableLseCrystal();
Rcc::enableHsiClock();

Rcc::setFlashLatency<Frequency>();
// switch system clock to PLL output
Rcc::updateCoreFrequency<Frequency>();

Rcc::enablePll(Rcc::PllSource::HsiDiv2, pll);
Rcc::enableSystemClock(Rcc::SystemClockSource::Pll);
Rcc::setAhbPrescaler(Rcc::AhbPrescaler::Div1);
Rcc::setApbPrescaler(Rcc::ApbPrescaler::Div1);
// update frequencies for busy-wait delay functions
Rcc::updateCoreFrequency<Frequency>();

Rcc::setRealTimeClockSource(Rcc::RealTimeClockSource::Lse);
return true;
}
};
Expand Down
29 changes: 13 additions & 16 deletions src/modm/board/nucleo_f072rb/board.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -30,23 +30,24 @@ using namespace modm::literals;
/// STM32f072rb running at 48MHz generated from the internal 8MHz crystal
struct SystemClock
{
static constexpr uint32_t Frequency = 48_MHz;
static constexpr uint32_t Hsi48 = 48_MHz;
static constexpr uint32_t Frequency = Hsi48;
static constexpr uint32_t Ahb = Frequency;
static constexpr uint32_t Apb = Frequency;

static constexpr uint32_t Adc = Apb;
static constexpr uint32_t Can = Apb;
static constexpr uint32_t Adc = Apb;
static constexpr uint32_t Can = Apb;

static constexpr uint32_t Spi1 = Apb;
static constexpr uint32_t Spi2 = Apb;
static constexpr uint32_t Spi1 = Apb;
static constexpr uint32_t Spi2 = Apb;

static constexpr uint32_t Usart1 = Apb;
static constexpr uint32_t Usart2 = Apb;
static constexpr uint32_t Usart3 = Apb;
static constexpr uint32_t Usart4 = Apb;

static constexpr uint32_t I2c1 = Apb;
static constexpr uint32_t I2c2 = Apb;
static constexpr uint32_t I2c1 = Apb;
static constexpr uint32_t I2c2 = Apb;

static constexpr uint32_t Timer1 = Apb;
static constexpr uint32_t Timer2 = Apb;
Expand All @@ -58,25 +59,21 @@ struct SystemClock
static constexpr uint32_t Timer16 = Apb;
static constexpr uint32_t Timer17 = Apb;

static constexpr uint32_t Usb = 48_MHz;
static constexpr uint32_t Usb = Hsi48;
static constexpr uint32_t Iwdg = Rcc::LsiFrequency;
static constexpr uint32_t Rtc = 32.768_kHz;

static bool inline
enable()
{
Rcc::enableLowSpeedExternalCrystal();
Rcc::enableRealTimeClock(Rcc::RealTimeClockSource::LowSpeedExternalCrystal);
Rcc::enableLseCrystal();
Rcc::enableHsi48Clock();

// Enable the internal 48MHz clock
Rcc::enableInternalClockMHz48();
// set flash latency for 48MHz
Rcc::setFlashLatency<Frequency>();
// Switch to the 48MHz clock
Rcc::enableSystemClock(Rcc::SystemClockSource::InternalClockMHz48);
// update frequencies for busy-wait delay functions
Rcc::updateCoreFrequency<Frequency>();

Rcc::enableSystemClock(Rcc::SystemClockSource::Hsi48);
Rcc::setRealTimeClockSource(Rcc::RealTimeClockSource::Lse);
return true;
}
};
Expand Down
33 changes: 17 additions & 16 deletions src/modm/board/nucleo_f091rc/board.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -29,23 +29,28 @@ using namespace modm::literals;
/// STM32F091RC running at 48MHz generated from the internal 8MHz crystal
struct SystemClock
{
static constexpr uint32_t Frequency = 48_MHz;
static constexpr uint32_t Hsi48 = 48_MHz;
static constexpr uint32_t Frequency = Hsi48;
static constexpr uint32_t Ahb = Frequency;
static constexpr uint32_t Apb = Frequency;

static constexpr uint32_t Adc = Apb;
static constexpr uint32_t Can = Apb;
static constexpr uint32_t Adc = Apb;
static constexpr uint32_t Can = Apb;

static constexpr uint32_t Spi1 = Apb;
static constexpr uint32_t Spi2 = Apb;
static constexpr uint32_t Spi1 = Apb;
static constexpr uint32_t Spi2 = Apb;

static constexpr uint32_t Usart1 = Apb;
static constexpr uint32_t Usart2 = Apb;
static constexpr uint32_t Usart3 = Apb;
static constexpr uint32_t Usart4 = Apb;
static constexpr uint32_t Usart5 = Apb;
static constexpr uint32_t Usart6 = Apb;
static constexpr uint32_t Usart7 = Apb;
static constexpr uint32_t Usart8 = Apb;

static constexpr uint32_t I2c1 = Apb;
static constexpr uint32_t I2c2 = Apb;
static constexpr uint32_t I2c1 = Apb;
static constexpr uint32_t I2c2 = Apb;

static constexpr uint32_t Timer1 = Apb;
static constexpr uint32_t Timer2 = Apb;
Expand All @@ -57,25 +62,21 @@ struct SystemClock
static constexpr uint32_t Timer16 = Apb;
static constexpr uint32_t Timer17 = Apb;

static constexpr uint32_t Usb = 48_MHz;
static constexpr uint32_t Usb = Hsi48;
static constexpr uint32_t Iwdg = Rcc::LsiFrequency;
static constexpr uint32_t Rtc = 32.768_kHz;

static bool inline
enable()
{
Rcc::enableLowSpeedExternalCrystal();
Rcc::enableRealTimeClock(Rcc::RealTimeClockSource::LowSpeedExternalCrystal);
Rcc::enableLseCrystal();
Rcc::enableHsi48Clock();

// Enable the internal 48MHz clock
Rcc::enableInternalClockMHz48();
// set flash latency for 48MHz
Rcc::setFlashLatency<Frequency>();
// Switch to the 48MHz clock
Rcc::enableSystemClock(Rcc::SystemClockSource::InternalClockMHz48);
// update frequencies for busy-wait delay functions
Rcc::updateCoreFrequency<Frequency>();

Rcc::enableSystemClock(Rcc::SystemClockSource::Hsi48);
Rcc::setRealTimeClockSource(Rcc::RealTimeClockSource::Lse);
return true;
}
};
Expand Down
Loading
Loading