@@ -182,7 +182,10 @@ impl APB2 {
182182 }
183183}
184184
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 ) ;
186189
187190// some microcontrollers do not have USB
188191#[ cfg( any( feature = "stm32f301" , feature = "stm32f318" , feature = "stm32f334" , ) ) ]
@@ -469,7 +472,7 @@ impl CFGR {
469472 feature = "stm32f398"
470473 ) ) ) ]
471474 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 ) ;
473476 // Get the optimal value for the pll divisor (PLL_DIV) and multiplier (PLL_MUL)
474477 // Only for HSE PLL_DIV can be changed
475478 let ( pll_mul, pll_div) : ( u32 , Option < u32 > ) = if self . hse . is_some ( ) {
@@ -545,7 +548,7 @@ impl CFGR {
545548 feature = "stm32f398" ,
546549 ) ) ]
547550 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 ( ) ) ;
549552
550553 let ( pll_mul, pll_div) = {
551554 // Get the optimal value for the pll divisor (PLL_DIV) and multiplcator (PLL_MUL)
@@ -613,15 +616,17 @@ impl CFGR {
613616 // Oscillator (max 32 Mhz), without using the PLL.
614617 ( Some ( sysclk) , Some ( hse) ) if sysclk == hse => ( hse, cfgr:: SW_A :: HSE , None ) ,
615618 // 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+ }
617622 ( Some ( sysclk) , _) => {
618623 let ( sysclk, pll_config) = self . calc_pll ( sysclk) ;
619624 ( sysclk, cfgr:: SW_A :: PLL , Some ( pll_config) )
620625 }
621626 // Use HSE as system clock
622627 ( None , Some ( hse) ) => ( hse, cfgr:: SW_A :: HSE , None ) ,
623628 // Use HSI as system clock
624- ( None , None ) => ( HSI , cfgr:: SW_A :: HSI , None ) ,
629+ ( None , None ) => ( HSI . integer ( ) , cfgr:: SW_A :: HSI , None ) ,
625630 }
626631 }
627632
0 commit comments