diff options
| author | Dario Nieuwenhuis <[email protected]> | 2024-02-04 21:12:11 +0000 |
|---|---|---|
| committer | GitHub <[email protected]> | 2024-02-04 21:12:11 +0000 |
| commit | 227966920075d9b7aa9fa6da6c3918f9ea09796d (patch) | |
| tree | 7dd6892c80b162511f7425b5786eac7fbfe08bb6 | |
| parent | e782c8f463306f3a2e3c2daa965afc48577e827f (diff) | |
| parent | e3fe08428f3728e8273fcb184776a762955bb376 (diff) | |
Merge pull request #2533 from embassy-rs/stm32-rcc-fixit
stm32/rcc: fix build for some f0 and l4 chips.
| -rwxr-xr-x | ci.sh | 2 | ||||
| -rw-r--r-- | embassy-stm32/src/rcc/f0.rs | 32 | ||||
| -rw-r--r-- | embassy-stm32/src/rcc/l.rs | 19 |
3 files changed, 41 insertions, 12 deletions
| @@ -85,6 +85,7 @@ cargo batch \ | |||
| 85 | --- build --release --manifest-path embassy-stm32/Cargo.toml --target thumbv8m.main-none-eabihf --features stm32l552ze,defmt,time \ | 85 | --- build --release --manifest-path embassy-stm32/Cargo.toml --target thumbv8m.main-none-eabihf --features stm32l552ze,defmt,time \ |
| 86 | --- build --release --manifest-path embassy-stm32/Cargo.toml --target thumbv8m.main-none-eabihf --features stm32l552ze,defmt,exti \ | 86 | --- build --release --manifest-path embassy-stm32/Cargo.toml --target thumbv8m.main-none-eabihf --features stm32l552ze,defmt,exti \ |
| 87 | --- build --release --manifest-path embassy-stm32/Cargo.toml --target thumbv8m.main-none-eabihf --features stm32l552ze,defmt \ | 87 | --- build --release --manifest-path embassy-stm32/Cargo.toml --target thumbv8m.main-none-eabihf --features stm32l552ze,defmt \ |
| 88 | --- build --release --manifest-path embassy-stm32/Cargo.toml --target thumbv7em-none-eabi --features stm32f072c8,defmt,exti,time-driver-any,time \ | ||
| 88 | --- build --release --manifest-path embassy-stm32/Cargo.toml --target thumbv7em-none-eabi --features stm32f401ve,defmt,exti,time-driver-any \ | 89 | --- build --release --manifest-path embassy-stm32/Cargo.toml --target thumbv7em-none-eabi --features stm32f401ve,defmt,exti,time-driver-any \ |
| 89 | --- build --release --manifest-path embassy-stm32/Cargo.toml --target thumbv7em-none-eabi --features stm32f405zg,defmt,exti,time-driver-any \ | 90 | --- build --release --manifest-path embassy-stm32/Cargo.toml --target thumbv7em-none-eabi --features stm32f405zg,defmt,exti,time-driver-any \ |
| 90 | --- build --release --manifest-path embassy-stm32/Cargo.toml --target thumbv7em-none-eabi --features stm32f407zg,defmt,exti,time-driver-any \ | 91 | --- build --release --manifest-path embassy-stm32/Cargo.toml --target thumbv7em-none-eabi --features stm32f407zg,defmt,exti,time-driver-any \ |
| @@ -111,6 +112,7 @@ cargo batch \ | |||
| 111 | --- build --release --manifest-path embassy-stm32/Cargo.toml --target thumbv7em-none-eabi --features stm32h755zi-cm7,defmt,exti,time-driver-any,time \ | 112 | --- build --release --manifest-path embassy-stm32/Cargo.toml --target thumbv7em-none-eabi --features stm32h755zi-cm7,defmt,exti,time-driver-any,time \ |
| 112 | --- build --release --manifest-path embassy-stm32/Cargo.toml --target thumbv7em-none-eabi --features stm32h725re,defmt,exti,time-driver-any,time \ | 113 | --- build --release --manifest-path embassy-stm32/Cargo.toml --target thumbv7em-none-eabi --features stm32h725re,defmt,exti,time-driver-any,time \ |
| 113 | --- build --release --manifest-path embassy-stm32/Cargo.toml --target thumbv7em-none-eabi --features stm32h7b3ai,defmt,exti,time-driver-any,time \ | 114 | --- build --release --manifest-path embassy-stm32/Cargo.toml --target thumbv7em-none-eabi --features stm32h7b3ai,defmt,exti,time-driver-any,time \ |
| 115 | --- build --release --manifest-path embassy-stm32/Cargo.toml --target thumbv7em-none-eabi --features stm32l431cb,defmt,exti,time-driver-any,time \ | ||
| 114 | --- build --release --manifest-path embassy-stm32/Cargo.toml --target thumbv7em-none-eabi --features stm32l476vg,defmt,exti,time-driver-any,time \ | 116 | --- build --release --manifest-path embassy-stm32/Cargo.toml --target thumbv7em-none-eabi --features stm32l476vg,defmt,exti,time-driver-any,time \ |
| 115 | --- build --release --manifest-path embassy-stm32/Cargo.toml --target thumbv7em-none-eabi --features stm32l422cb,defmt,exti,time-driver-any,time \ | 117 | --- build --release --manifest-path embassy-stm32/Cargo.toml --target thumbv7em-none-eabi --features stm32l422cb,defmt,exti,time-driver-any,time \ |
| 116 | --- build --release --manifest-path embassy-stm32/Cargo.toml --target thumbv7em-none-eabi --features stm32wb15cc,defmt,exti,time-driver-any,time \ | 118 | --- build --release --manifest-path embassy-stm32/Cargo.toml --target thumbv7em-none-eabi --features stm32wb15cc,defmt,exti,time-driver-any,time \ |
diff --git a/embassy-stm32/src/rcc/f0.rs b/embassy-stm32/src/rcc/f0.rs index a6b627887..d99fd0476 100644 --- a/embassy-stm32/src/rcc/f0.rs +++ b/embassy-stm32/src/rcc/f0.rs | |||
| @@ -11,14 +11,13 @@ pub const HSI_FREQ: Hertz = Hertz(8_000_000); | |||
| 11 | /// | 11 | /// |
| 12 | /// hse takes precedence over hsi48 if both are enabled | 12 | /// hse takes precedence over hsi48 if both are enabled |
| 13 | #[non_exhaustive] | 13 | #[non_exhaustive] |
| 14 | #[derive(Default)] | ||
| 15 | pub struct Config { | 14 | pub struct Config { |
| 16 | pub hse: Option<Hertz>, | 15 | pub hse: Option<Hertz>, |
| 17 | pub bypass_hse: bool, | 16 | pub bypass_hse: bool, |
| 18 | pub usb_pll: bool, | 17 | pub usb_pll: bool, |
| 19 | 18 | ||
| 20 | #[cfg(not(stm32f0x0))] | 19 | #[cfg(crs)] |
| 21 | pub hsi48: bool, | 20 | pub hsi48: Option<super::Hsi48Config>, |
| 22 | 21 | ||
| 23 | pub sys_ck: Option<Hertz>, | 22 | pub sys_ck: Option<Hertz>, |
| 24 | pub hclk: Option<Hertz>, | 23 | pub hclk: Option<Hertz>, |
| @@ -27,12 +26,31 @@ pub struct Config { | |||
| 27 | pub ls: super::LsConfig, | 26 | pub ls: super::LsConfig, |
| 28 | } | 27 | } |
| 29 | 28 | ||
| 29 | impl Default for Config { | ||
| 30 | fn default() -> Self { | ||
| 31 | Self { | ||
| 32 | hse: Default::default(), | ||
| 33 | bypass_hse: Default::default(), | ||
| 34 | usb_pll: Default::default(), | ||
| 35 | hsi48: Some(Default::default()), | ||
| 36 | sys_ck: Default::default(), | ||
| 37 | hclk: Default::default(), | ||
| 38 | pclk: Default::default(), | ||
| 39 | ls: Default::default(), | ||
| 40 | } | ||
| 41 | } | ||
| 42 | } | ||
| 43 | |||
| 30 | pub(crate) unsafe fn init(config: Config) { | 44 | pub(crate) unsafe fn init(config: Config) { |
| 31 | let sysclk = config.sys_ck.map(|v| v.0).unwrap_or(HSI_FREQ.0); | 45 | let sysclk = config.sys_ck.map(|v| v.0).unwrap_or(HSI_FREQ.0); |
| 32 | 46 | ||
| 47 | #[cfg(crs)] | ||
| 48 | let hsi48 = config.hsi48.map(|config| super::init_hsi48(config)); | ||
| 49 | #[cfg(not(crs))] | ||
| 50 | let hsi48: Option<Hertz> = None; | ||
| 51 | |||
| 33 | let (src_clk, use_hsi48) = config.hse.map(|v| (v.0, false)).unwrap_or_else(|| { | 52 | let (src_clk, use_hsi48) = config.hse.map(|v| (v.0, false)).unwrap_or_else(|| { |
| 34 | #[cfg(not(stm32f0x0))] | 53 | if hsi48.is_some() { |
| 35 | if config.hsi48 { | ||
| 36 | return (48_000_000, true); | 54 | return (48_000_000, true); |
| 37 | } | 55 | } |
| 38 | (HSI_FREQ.0, false) | 56 | (HSI_FREQ.0, false) |
| @@ -169,5 +187,9 @@ pub(crate) unsafe fn init(config: Config) { | |||
| 169 | pclk2_tim: Some(Hertz(pclk * timer_mul)), | 187 | pclk2_tim: Some(Hertz(pclk * timer_mul)), |
| 170 | hclk1: Some(Hertz(hclk)), | 188 | hclk1: Some(Hertz(hclk)), |
| 171 | rtc: rtc, | 189 | rtc: rtc, |
| 190 | hsi48: hsi48, | ||
| 191 | |||
| 192 | // TODO: | ||
| 193 | pll1_p: None, | ||
| 172 | ); | 194 | ); |
| 173 | } | 195 | } |
diff --git a/embassy-stm32/src/rcc/l.rs b/embassy-stm32/src/rcc/l.rs index ab1681dd4..04ea81ec4 100644 --- a/embassy-stm32/src/rcc/l.rs +++ b/embassy-stm32/src/rcc/l.rs | |||
| @@ -215,12 +215,9 @@ pub(crate) unsafe fn init(config: Config) { | |||
| 215 | }); | 215 | }); |
| 216 | 216 | ||
| 217 | #[cfg(crs)] | 217 | #[cfg(crs)] |
| 218 | let _hsi48 = config.hsi48.map(|config| { | 218 | let hsi48 = config.hsi48.map(|config| super::init_hsi48(config)); |
| 219 | // | ||
| 220 | super::init_hsi48(config) | ||
| 221 | }); | ||
| 222 | #[cfg(not(crs))] | 219 | #[cfg(not(crs))] |
| 223 | let _hsi48: Option<Hertz> = None; | 220 | let hsi48: Option<Hertz> = None; |
| 224 | 221 | ||
| 225 | let _plls = [ | 222 | let _plls = [ |
| 226 | &config.pll, | 223 | &config.pll, |
| @@ -274,12 +271,12 @@ pub(crate) unsafe fn init(config: Config) { | |||
| 274 | RCC.ccipr().modify(|w| w.set_clk48sel(config.clk48_src)); | 271 | RCC.ccipr().modify(|w| w.set_clk48sel(config.clk48_src)); |
| 275 | #[cfg(any(rcc_l0_v2))] | 272 | #[cfg(any(rcc_l0_v2))] |
| 276 | let clk48 = match config.clk48_src { | 273 | let clk48 = match config.clk48_src { |
| 277 | Clk48Src::HSI48 => _hsi48, | 274 | Clk48Src::HSI48 => hsi48, |
| 278 | Clk48Src::PLL1_VCO_DIV_2 => pll.clk48, | 275 | Clk48Src::PLL1_VCO_DIV_2 => pll.clk48, |
| 279 | }; | 276 | }; |
| 280 | #[cfg(any(stm32l4, stm32l5, stm32wb))] | 277 | #[cfg(any(stm32l4, stm32l5, stm32wb))] |
| 281 | let clk48 = match config.clk48_src { | 278 | let clk48 = match config.clk48_src { |
| 282 | Clk48Src::HSI48 => _hsi48, | 279 | Clk48Src::HSI48 => hsi48, |
| 283 | Clk48Src::MSI => msi, | 280 | Clk48Src::MSI => msi, |
| 284 | Clk48Src::PLLSAI1_Q => pllsai1.q, | 281 | Clk48Src::PLLSAI1_Q => pllsai1.q, |
| 285 | Clk48Src::PLL1_Q => pll.q, | 282 | Clk48Src::PLL1_Q => pll.q, |
| @@ -393,6 +390,7 @@ pub(crate) unsafe fn init(config: Config) { | |||
| 393 | msi: msi, | 390 | msi: msi, |
| 394 | #[cfg(any(rcc_l0_v2, stm32l4, stm32l5, stm32wb))] | 391 | #[cfg(any(rcc_l0_v2, stm32l4, stm32l5, stm32wb))] |
| 395 | clk48: clk48, | 392 | clk48: clk48, |
| 393 | hsi48: hsi48, | ||
| 396 | 394 | ||
| 397 | #[cfg(not(any(stm32l0, stm32l1)))] | 395 | #[cfg(not(any(stm32l0, stm32l1)))] |
| 398 | pll1_p: pll.p, | 396 | pll1_p: pll.p, |
| @@ -407,6 +405,13 @@ pub(crate) unsafe fn init(config: Config) { | |||
| 407 | #[cfg(any(stm32l4, stm32l5, stm32wb))] | 405 | #[cfg(any(stm32l4, stm32l5, stm32wb))] |
| 408 | pllsai1_r: pllsai1.r, | 406 | pllsai1_r: pllsai1.r, |
| 409 | 407 | ||
| 408 | #[cfg(not(any(stm32l47x, stm32l48x, stm32l49x, stm32l4ax, rcc_l4plus, stm32l5)))] | ||
| 409 | pllsai2_p: None, | ||
| 410 | #[cfg(not(any(stm32l47x, stm32l48x, stm32l49x, stm32l4ax, rcc_l4plus, stm32l5)))] | ||
| 411 | pllsai2_q: None, | ||
| 412 | #[cfg(not(any(stm32l47x, stm32l48x, stm32l49x, stm32l4ax, rcc_l4plus, stm32l5)))] | ||
| 413 | pllsai2_r: None, | ||
| 414 | |||
| 410 | #[cfg(any(stm32l47x, stm32l48x, stm32l49x, stm32l4ax, rcc_l4plus, stm32l5))] | 415 | #[cfg(any(stm32l47x, stm32l48x, stm32l49x, stm32l4ax, rcc_l4plus, stm32l5))] |
| 411 | pllsai2_p: pllsai2.p, | 416 | pllsai2_p: pllsai2.p, |
| 412 | #[cfg(any(stm32l47x, stm32l48x, stm32l49x, stm32l4ax, rcc_l4plus, stm32l5))] | 417 | #[cfg(any(stm32l47x, stm32l48x, stm32l49x, stm32l4ax, rcc_l4plus, stm32l5))] |
