aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMartin Algesten <[email protected]>2025-01-24 10:06:32 +0100
committerMartin Algesten <[email protected]>2025-01-24 10:06:32 +0100
commit4743501172dadc405f71dec34b0b9fa933c916b8 (patch)
tree47fa72b9b28a42ee6aeac43a3e10abf5d6081762
parent3ba94c0ab3fcb859619fa70fcf37a3505392f05c (diff)
Move PLL2/3 config to before PLL
-rw-r--r--embassy-stm32/src/rcc/f013.rs60
1 files changed, 31 insertions, 29 deletions
diff --git a/embassy-stm32/src/rcc/f013.rs b/embassy-stm32/src/rcc/f013.rs
index 8d86629b5..13b0ae38e 100644
--- a/embassy-stm32/src/rcc/f013.rs
+++ b/embassy-stm32/src/rcc/f013.rs
@@ -209,6 +209,28 @@ pub(crate) unsafe fn init(config: Config) {
209 #[cfg(not(crs))] 209 #[cfg(not(crs))]
210 let hsi48: Option<Hertz> = None; 210 let hsi48: Option<Hertz> = None;
211 211
212 // PLL2 and PLL3
213 // Configure this before PLL since PLL2 can be the source for PLL.
214 #[cfg(stm32f107)]
215 {
216 // Common prediv for PLL2 and PLL3
217 RCC.cfgr2().modify(|w| w.set_prediv2(config.prediv2));
218
219 // Configure PLL2
220 if let Some(pll2) = config.pll2 {
221 RCC.cfgr2().modify(|w| w.set_pll2mul(pll2.mul));
222 RCC.cr().modify(|w| w.set_pll2on(true));
223 while !RCC.cr().read().pll2rdy() {}
224 }
225
226 // Configure PLL3
227 if let Some(pll3) = config.pll3 {
228 RCC.cfgr2().modify(|w| w.set_pll3mul(pll3.mul));
229 RCC.cr().modify(|w| w.set_pll3on(true));
230 while !RCC.cr().read().pll3rdy() {}
231 }
232 }
233
212 // Enable PLL 234 // Enable PLL
213 let pll = config.pll.map(|pll| { 235 let pll = config.pll.map(|pll| {
214 let (src_val, src_freq) = match pll.src { 236 let (src_val, src_freq) = match pll.src {
@@ -221,7 +243,12 @@ pub(crate) unsafe fn init(config: Config) {
221 } 243 }
222 (Pllsrc::HSI_DIV2, unwrap!(hsi)) 244 (Pllsrc::HSI_DIV2, unwrap!(hsi))
223 } 245 }
224 PllSource::HSE => (Pllsrc::HSE_DIV_PREDIV, unwrap!(hse)), 246 PllSource::HSE => {
247 #[cfg(stm32f107)]
248 RCC.cfgr2().modify(|w| w.set_prediv1src(Prediv1src::HSE));
249
250 (Pllsrc::HSE_DIV_PREDIV, unwrap!(hse))
251 }
225 #[cfg(rcc_f0v4)] 252 #[cfg(rcc_f0v4)]
226 PllSource::HSI48 => (Pllsrc::HSI48_DIV_PREDIV, unwrap!(hsi48)), 253 PllSource::HSI48 => (Pllsrc::HSI48_DIV_PREDIV, unwrap!(hsi48)),
227 #[cfg(stm32f107)] 254 #[cfg(stm32f107)]
@@ -229,9 +256,12 @@ pub(crate) unsafe fn init(config: Config) {
229 if config.pll2.is_none() { 256 if config.pll2.is_none() {
230 panic!("if PLL source is PLL2, Config::pll2 must also be set."); 257 panic!("if PLL source is PLL2, Config::pll2 must also be set.");
231 } 258 }
259 RCC.cfgr2().modify(|w| w.set_prediv1src(Prediv1src::PLL2));
260
232 let pll2 = unwrap!(config.pll2); 261 let pll2 = unwrap!(config.pll2);
233 let in_freq = hse.unwrap() / config.prediv2; 262 let in_freq = hse.unwrap() / config.prediv2;
234 let pll2freq = in_freq * pll2.mul; 263 let pll2freq = in_freq * pll2.mul;
264
235 (Pllsrc::HSE_DIV_PREDIV, pll2freq) 265 (Pllsrc::HSE_DIV_PREDIV, pll2freq)
236 } 266 }
237 }; 267 };
@@ -259,34 +289,6 @@ pub(crate) unsafe fn init(config: Config) {
259 out_freq 289 out_freq
260 }); 290 });
261 291
262 #[cfg(stm32f107)]
263 match config.pll.map(|pll| pll.src) {
264 Some(PllSource::HSE) => RCC.cfgr2().modify(|w| w.set_prediv1src(Prediv1src::HSE)),
265 Some(PllSource::PLL2) => RCC.cfgr2().modify(|w| w.set_prediv1src(Prediv1src::PLL2)),
266 _ => {}
267 }
268
269 // pll2 and pll3
270 #[cfg(stm32f107)]
271 {
272 // Common prediv for PLL2 and PLL3
273 RCC.cfgr2().modify(|w| w.set_prediv2(config.prediv2));
274
275 // Configure PLL2
276 if let Some(pll2) = config.pll2 {
277 RCC.cfgr2().modify(|w| w.set_pll2mul(pll2.mul));
278 RCC.cr().modify(|w| w.set_pll2on(true));
279 while !RCC.cr().read().pll2rdy() {}
280 }
281
282 // Configure PLL3
283 if let Some(pll3) = config.pll3 {
284 RCC.cfgr2().modify(|w| w.set_pll3mul(pll3.mul));
285 RCC.cr().modify(|w| w.set_pll3on(true));
286 while !RCC.cr().read().pll3rdy() {}
287 }
288 }
289
290 #[cfg(stm32f3)] 292 #[cfg(stm32f3)]
291 let pll_mul_2 = pll.map(|pll| pll * 2u32); 293 let pll_mul_2 = pll.map(|pll| pll * 2u32);
292 294