diff options
| -rw-r--r-- | embassy-stm32/src/rcc/f7.rs | 18 | ||||
| -rw-r--r-- | embassy-stm32/src/rcc/mod.rs | 2 |
2 files changed, 19 insertions, 1 deletions
diff --git a/embassy-stm32/src/rcc/f7.rs b/embassy-stm32/src/rcc/f7.rs index 234511b00..f32559e26 100644 --- a/embassy-stm32/src/rcc/f7.rs +++ b/embassy-stm32/src/rcc/f7.rs | |||
| @@ -1,6 +1,7 @@ | |||
| 1 | use crate::pac::pwr::vals::Vos; | 1 | use crate::pac::pwr::vals::Vos; |
| 2 | use crate::pac::rcc::vals::{Hpre, Ppre, Sw}; | 2 | use crate::pac::rcc::vals::{Hpre, Ppre, Sw}; |
| 3 | use crate::pac::{FLASH, PWR, RCC}; | 3 | use crate::pac::{FLASH, PWR, RCC}; |
| 4 | use crate::rcc::bd::{BackupDomain, RtcClockSource}; | ||
| 4 | use crate::rcc::{set_freqs, Clocks}; | 5 | use crate::rcc::{set_freqs, Clocks}; |
| 5 | use crate::time::Hertz; | 6 | use crate::time::Hertz; |
| 6 | 7 | ||
| @@ -22,6 +23,9 @@ pub struct Config { | |||
| 22 | pub pclk2: Option<Hertz>, | 23 | pub pclk2: Option<Hertz>, |
| 23 | 24 | ||
| 24 | pub pll48: bool, | 25 | pub pll48: bool, |
| 26 | pub rtc: Option<RtcClockSource>, | ||
| 27 | pub lsi: bool, | ||
| 28 | pub lse: Option<Hertz>, | ||
| 25 | } | 29 | } |
| 26 | 30 | ||
| 27 | fn setup_pll(pllsrcclk: u32, use_hse: bool, pllsysclk: Option<u32>, pll48clk: bool) -> PllResults { | 31 | fn setup_pll(pllsrcclk: u32, use_hse: bool, pllsysclk: Option<u32>, pll48clk: bool) -> PllResults { |
| @@ -259,6 +263,18 @@ pub(crate) unsafe fn init(config: Config) { | |||
| 259 | }) | 263 | }) |
| 260 | }); | 264 | }); |
| 261 | 265 | ||
| 266 | BackupDomain::configure_ls( | ||
| 267 | config.rtc.unwrap_or(RtcClockSource::NOCLOCK), | ||
| 268 | config.lsi, | ||
| 269 | config.lse.map(|_| Default::default()), | ||
| 270 | ); | ||
| 271 | |||
| 272 | let rtc = match config.rtc { | ||
| 273 | Some(RtcClockSource::LSI) => Some(LSI_FREQ), | ||
| 274 | Some(RtcClockSource::LSE) => Some(config.lse.unwrap()), | ||
| 275 | _ => None, | ||
| 276 | }; | ||
| 277 | |||
| 262 | set_freqs(Clocks { | 278 | set_freqs(Clocks { |
| 263 | sys: Hertz(sysclk), | 279 | sys: Hertz(sysclk), |
| 264 | apb1: Hertz(pclk1), | 280 | apb1: Hertz(pclk1), |
| @@ -272,6 +288,8 @@ pub(crate) unsafe fn init(config: Config) { | |||
| 272 | ahb3: Hertz(hclk), | 288 | ahb3: Hertz(hclk), |
| 273 | 289 | ||
| 274 | pll48: plls.pll48clk.map(Hertz), | 290 | pll48: plls.pll48clk.map(Hertz), |
| 291 | |||
| 292 | rtc, | ||
| 275 | }); | 293 | }); |
| 276 | } | 294 | } |
| 277 | 295 | ||
diff --git a/embassy-stm32/src/rcc/mod.rs b/embassy-stm32/src/rcc/mod.rs index 0d6b0e308..9ccf2ac4f 100644 --- a/embassy-stm32/src/rcc/mod.rs +++ b/embassy-stm32/src/rcc/mod.rs | |||
| @@ -97,7 +97,7 @@ pub struct Clocks { | |||
| 97 | #[cfg(stm32f334)] | 97 | #[cfg(stm32f334)] |
| 98 | pub hrtim: Option<Hertz>, | 98 | pub hrtim: Option<Hertz>, |
| 99 | 99 | ||
| 100 | #[cfg(any(rcc_wb, rcc_f4, rcc_f410))] | 100 | #[cfg(any(rcc_wb, rcc_f4, rcc_f410, rcc_f7))] |
| 101 | /// Set only if the lsi or lse is configured, indicates stop is supported | 101 | /// Set only if the lsi or lse is configured, indicates stop is supported |
| 102 | pub rtc: Option<Hertz>, | 102 | pub rtc: Option<Hertz>, |
| 103 | 103 | ||
