aboutsummaryrefslogtreecommitdiff
path: root/embassy-stm32
diff options
context:
space:
mode:
authorMateusz Butkiewicz <[email protected]>2023-09-27 15:13:43 +0200
committerMateusz Butkiewicz <[email protected]>2023-09-27 16:08:05 +0200
commite1951f3ddffdeffab03bd0d20ebc1f7210738002 (patch)
tree6798b87fd261f0986be8b2d6cfca0c47b56180f4 /embassy-stm32
parent624f786203bbe7c6a96f5bdeca6e74c821223069 (diff)
feat(stm32f7): restore rtc configuration for stm32f7 series
Diffstat (limited to 'embassy-stm32')
-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