@@ -19,6 +19,9 @@ impl RccExt for RCC {
1919 pclk2 : None ,
2020 sysclk : None ,
2121 pll48clk : false ,
22+ pclk1_overclock : false ,
23+ pclk2_overclock : false ,
24+ sysclk_overclock : false ,
2225 } ,
2326 }
2427 }
@@ -124,6 +127,9 @@ pub struct CFGR {
124127 pclk2 : Option < u32 > ,
125128 sysclk : Option < u32 > ,
126129 pll48clk : bool ,
130+ pclk1_overclock : bool ,
131+ pclk2_overclock : bool ,
132+ sysclk_overclock : bool ,
127133}
128134
129135impl CFGR {
@@ -174,6 +180,21 @@ impl CFGR {
174180 self
175181 }
176182
183+ pub unsafe fn pclk1_allow_overclock ( mut self ) -> Self {
184+ self . pclk1_overclock = true ;
185+ self
186+ }
187+
188+ pub unsafe fn pclk2_allow_overclock ( mut self ) -> Self {
189+ self . pclk2_overclock = true ;
190+ self
191+ }
192+
193+ pub unsafe fn sysclk_allow_overclock ( mut self ) -> Self {
194+ self . sysclk_overclock = true ;
195+ self
196+ }
197+
177198 #[ inline( always) ]
178199 fn pll_setup ( & self ) -> ( bool , bool , u32 , Option < Hertz > ) {
179200 let pllsrcclk = self . hse . unwrap_or ( HSI ) ;
@@ -290,7 +311,9 @@ impl CFGR {
290311
291312 let ( use_pll, sysclk_on_pll, sysclk, pll48clk) = self . pll_setup ( ) ;
292313
293- assert ! ( !sysclk_on_pll || sysclk <= SYSCLK_MAX && sysclk >= SYSCLK_MIN ) ;
314+ assert ! (
315+ self . sysclk_overclock || !sysclk_on_pll || sysclk <= SYSCLK_MAX && sysclk >= SYSCLK_MIN
316+ ) ;
294317
295318 let hclk = self . hclk . unwrap_or ( sysclk) ;
296319 let ( hpre_bits, hpre_div) = match ( sysclk + hclk - 1 ) / hclk {
@@ -324,7 +347,7 @@ impl CFGR {
324347 // Calculate real APB1 clock
325348 let pclk1 = hclk / u32:: from ( ppre1) ;
326349
327- assert ! ( pclk1 <= PCLK1_MAX ) ;
350+ assert ! ( self . pclk1_overclock || pclk1 <= PCLK1_MAX ) ;
328351
329352 let pclk2 = self
330353 . pclk2
@@ -341,7 +364,7 @@ impl CFGR {
341364 // Calculate real APB2 clock
342365 let pclk2 = hclk / u32:: from ( ppre2) ;
343366
344- assert ! ( pclk2 <= PCLK2_MAX ) ;
367+ assert ! ( self . pclk2_overclock || pclk2 <= PCLK2_MAX ) ;
345368
346369 Self :: flash_setup ( sysclk) ;
347370
0 commit comments