@@ -19,6 +19,12 @@ impl MainPll {
19
19
) -> MainPll {
20
20
let sysclk = pllsysclk. unwrap_or ( pllsrcclk) ;
21
21
if pllsysclk. is_none ( ) && !pll48clk {
22
+ // Even if we do not use the main PLL, we still need to set the PLL source as that setting
23
+ // applies to the I2S and SAI PLLs as well.
24
+ unsafe { & * RCC :: ptr ( ) }
25
+ . pllcfgr
26
+ . write ( |w| w. pllsrc ( ) . bit ( use_hse) ) ;
27
+
22
28
return MainPll {
23
29
use_pll : false ,
24
30
pllsysclk : None ,
@@ -307,7 +313,8 @@ impl I2sPll {
307
313
fn apply_config ( config : SingleOutputPll ) {
308
314
let rcc = unsafe { & * RCC :: ptr ( ) } ;
309
315
// "M" may have been written before, but the value is identical.
310
- rcc. pllcfgr . write ( |w| unsafe { w. pllm ( ) . bits ( config. m ) } ) ;
316
+ rcc. pllcfgr
317
+ . modify ( |_, w| unsafe { w. pllm ( ) . bits ( config. m ) } ) ;
311
318
rcc. plli2scfgr
312
319
. modify ( |_, w| unsafe { w. plli2sn ( ) . bits ( config. n ) . plli2sr ( ) . bits ( config. outdiv ) } ) ;
313
320
}
@@ -429,16 +436,19 @@ impl SaiPll {
429
436
#[ cfg( not( feature = "stm32f446" ) ) ]
430
437
fn apply_config ( config : SingleOutputPll , saidiv : u32 ) {
431
438
let rcc = unsafe { & * RCC :: ptr ( ) } ;
432
- rcc. dckcfgr . modify ( |_, w| w. pllsaidivq ( ) . bits ( saidiv as u8 ) ) ;
439
+ rcc. dckcfgr
440
+ . modify ( |_, w| w. pllsaidivq ( ) . bits ( saidiv as u8 - 1 ) ) ;
433
441
// "M" may have been written before, but the value is identical.
434
- rcc. pllcfgr . write ( |w| unsafe { w. pllm ( ) . bits ( config. m ) } ) ;
442
+ rcc. pllcfgr
443
+ . modify ( |_, w| unsafe { w. pllm ( ) . bits ( config. m ) } ) ;
435
444
rcc. pllsaicfgr
436
445
. modify ( |_, w| unsafe { w. pllsain ( ) . bits ( config. n ) . pllsaiq ( ) . bits ( config. outdiv ) } ) ;
437
446
}
438
447
#[ cfg( feature = "stm32f446" ) ]
439
448
fn apply_config ( config : SingleOutputPll , saidiv : u32 ) {
440
449
let rcc = unsafe { & * RCC :: ptr ( ) } ;
441
- rcc. dckcfgr . modify ( |_, w| w. pllsaidivq ( ) . bits ( saidiv as u8 ) ) ;
450
+ rcc. dckcfgr
451
+ . modify ( |_, w| w. pllsaidivq ( ) . bits ( saidiv as u8 - 1 ) ) ;
442
452
rcc. pllsaicfgr . modify ( |_, w| unsafe {
443
453
w. pllsaim ( )
444
454
. bits ( config. m )
0 commit comments