@@ -19,6 +19,9 @@ impl RccExt for RCC {
19
19
pclk2 : None ,
20
20
sysclk : None ,
21
21
pll48clk : false ,
22
+ pclk1_overclock : false ,
23
+ pclk2_overclock : false ,
24
+ sysclk_overclock : false ,
22
25
} ,
23
26
}
24
27
}
@@ -124,6 +127,9 @@ pub struct CFGR {
124
127
pclk2 : Option < u32 > ,
125
128
sysclk : Option < u32 > ,
126
129
pll48clk : bool ,
130
+ pclk1_overclock : bool ,
131
+ pclk2_overclock : bool ,
132
+ sysclk_overclock : bool ,
127
133
}
128
134
129
135
impl CFGR {
@@ -174,6 +180,21 @@ impl CFGR {
174
180
self
175
181
}
176
182
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
+
177
198
#[ inline( always) ]
178
199
fn pll_setup ( & self ) -> ( bool , bool , u32 , Option < Hertz > ) {
179
200
let pllsrcclk = self . hse . unwrap_or ( HSI ) ;
@@ -290,7 +311,9 @@ impl CFGR {
290
311
291
312
let ( use_pll, sysclk_on_pll, sysclk, pll48clk) = self . pll_setup ( ) ;
292
313
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
+ ) ;
294
317
295
318
let hclk = self . hclk . unwrap_or ( sysclk) ;
296
319
let ( hpre_bits, hpre_div) = match ( sysclk + hclk - 1 ) / hclk {
@@ -324,7 +347,7 @@ impl CFGR {
324
347
// Calculate real APB1 clock
325
348
let pclk1 = hclk / u32:: from ( ppre1) ;
326
349
327
- assert ! ( pclk1 <= PCLK1_MAX ) ;
350
+ assert ! ( self . pclk1_overclock || pclk1 <= PCLK1_MAX ) ;
328
351
329
352
let pclk2 = self
330
353
. pclk2
@@ -341,7 +364,7 @@ impl CFGR {
341
364
// Calculate real APB2 clock
342
365
let pclk2 = hclk / u32:: from ( ppre2) ;
343
366
344
- assert ! ( pclk2 <= PCLK2_MAX ) ;
367
+ assert ! ( self . pclk2_overclock || pclk2 <= PCLK2_MAX ) ;
345
368
346
369
Self :: flash_setup ( sysclk) ;
347
370
0 commit comments