aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorxoviat <[email protected]>2023-09-28 11:32:50 +0000
committerGitHub <[email protected]>2023-09-28 11:32:50 +0000
commita72a91ab069049f04cbf9e90ce9b178b3876558f (patch)
treed0f55e570f085565e87b6c8c2fd2f66f1fc59373
parente538aeacc89302714e5dd2f381f67782bb5d928e (diff)
parente1951f3ddffdeffab03bd0d20ebc1f7210738002 (diff)
Merge pull request #1963 from Mirror0/restore-f7-rtc
Restore RTC configuration for `STM32F7` boards
-rw-r--r--embassy-stm32/src/rcc/f7.rs18
-rw-r--r--embassy-stm32/src/rcc/mod.rs2
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 @@
1use crate::pac::pwr::vals::Vos; 1use crate::pac::pwr::vals::Vos;
2use crate::pac::rcc::vals::{Hpre, Ppre, Sw}; 2use crate::pac::rcc::vals::{Hpre, Ppre, Sw};
3use crate::pac::{FLASH, PWR, RCC}; 3use crate::pac::{FLASH, PWR, RCC};
4use crate::rcc::bd::{BackupDomain, RtcClockSource};
4use crate::rcc::{set_freqs, Clocks}; 5use crate::rcc::{set_freqs, Clocks};
5use crate::time::Hertz; 6use 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
27fn setup_pll(pllsrcclk: u32, use_hse: bool, pllsysclk: Option<u32>, pll48clk: bool) -> PllResults { 31fn 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