@@ -182,7 +182,10 @@ impl APB2 {
182
182
}
183
183
}
184
184
185
- const HSI : u32 = 8_000_000 ; // Hz
185
+ /// Frequency of interal hardware RC oscillator (HSI OSC)
186
+ pub const HSI : Hertz = Hertz ( 8_000_000 ) ;
187
+ /// Frequency of external 32.768 kHz oscillator (LSE OSC)
188
+ pub const LSE : Hertz = Hertz ( 32_768 ) ;
186
189
187
190
// some microcontrollers do not have USB
188
191
#[ cfg( any( feature = "stm32f301" , feature = "stm32f318" , feature = "stm32f334" , ) ) ]
@@ -469,7 +472,7 @@ impl CFGR {
469
472
feature = "stm32f398"
470
473
) ) ) ]
471
474
fn calc_pll ( & self , sysclk : u32 ) -> ( u32 , PllConfig ) {
472
- let pllsrcclk = self . hse . unwrap_or ( HSI / 2 ) ;
475
+ let pllsrcclk = self . hse . unwrap_or ( HSI . integer ( ) / 2 ) ;
473
476
// Get the optimal value for the pll divisor (PLL_DIV) and multiplier (PLL_MUL)
474
477
// Only for HSE PLL_DIV can be changed
475
478
let ( pll_mul, pll_div) : ( u32 , Option < u32 > ) = if self . hse . is_some ( ) {
@@ -545,7 +548,7 @@ impl CFGR {
545
548
feature = "stm32f398" ,
546
549
) ) ]
547
550
fn calc_pll ( & self , sysclk : u32 ) -> ( u32 , PllConfig ) {
548
- let pllsrcclk = self . hse . unwrap_or ( HSI ) ;
551
+ let pllsrcclk = self . hse . unwrap_or ( HSI . integer ( ) ) ;
549
552
550
553
let ( pll_mul, pll_div) = {
551
554
// Get the optimal value for the pll divisor (PLL_DIV) and multiplcator (PLL_MUL)
@@ -613,15 +616,17 @@ impl CFGR {
613
616
// Oscillator (max 32 Mhz), without using the PLL.
614
617
( Some ( sysclk) , Some ( hse) ) if sysclk == hse => ( hse, cfgr:: SW_A :: HSE , None ) ,
615
618
// No need to use the PLL
616
- ( Some ( sysclk) , None ) if sysclk == HSI => ( HSI , cfgr:: SW_A :: HSI , None ) ,
619
+ ( Some ( sysclk) , None ) if sysclk == HSI . integer ( ) => {
620
+ ( HSI . integer ( ) , cfgr:: SW_A :: HSI , None )
621
+ }
617
622
( Some ( sysclk) , _) => {
618
623
let ( sysclk, pll_config) = self . calc_pll ( sysclk) ;
619
624
( sysclk, cfgr:: SW_A :: PLL , Some ( pll_config) )
620
625
}
621
626
// Use HSE as system clock
622
627
( None , Some ( hse) ) => ( hse, cfgr:: SW_A :: HSE , None ) ,
623
628
// Use HSI as system clock
624
- ( None , None ) => ( HSI , cfgr:: SW_A :: HSI , None ) ,
629
+ ( None , None ) => ( HSI . integer ( ) , cfgr:: SW_A :: HSI , None ) ,
625
630
}
626
631
}
627
632
0 commit comments