@@ -404,12 +404,12 @@ void stm32l4_system_bootloader(void)
404
404
#endif
405
405
}
406
406
407
- bool stm32l4_system_configure (uint32_t sysclk , uint32_t hclk , uint32_t pclk1 , uint32_t pclk2 )
407
+ bool stm32l4_system_configure (uint32_t sysclk , uint32_t hclk , uint32_t pclk1 , uint32_t pclk2 , bool clk48 )
408
408
{
409
409
uint32_t fclk , fvco , fpll , fpllout , mout , nout , rout , n , r ;
410
410
uint32_t count , msirange , hpre , ppre1 , ppre2 , latency ;
411
411
412
- if (( sysclk <= 24000000 ) && stm32l4_system_device .clk48 )
412
+ if (! clk48 && (( sysclk <= 24000000 ) && stm32l4_system_device .clk48 ) )
413
413
{
414
414
return false;
415
415
}
@@ -533,7 +533,7 @@ bool stm32l4_system_configure(uint32_t sysclk, uint32_t hclk, uint32_t pclk1, ui
533
533
nout = 8 ;
534
534
rout = 2 ;
535
535
536
- if (sysclk <= 24000000 )
536
+ if (! clk48 && ( sysclk <= 24000000 ) )
537
537
{
538
538
/* Range 2, use MSI */
539
539
@@ -552,6 +552,11 @@ bool stm32l4_system_configure(uint32_t sysclk, uint32_t hclk, uint32_t pclk1, ui
552
552
{
553
553
/* Range 1, use HSE/PLL or MSI/PLL */
554
554
555
+ if (sysclk < 16000000 )
556
+ {
557
+ sysclk = 16000000 ;
558
+ }
559
+
555
560
if (sysclk > 80000000 )
556
561
{
557
562
sysclk = 80000000 ;
@@ -679,7 +684,7 @@ bool stm32l4_system_configure(uint32_t sysclk, uint32_t hclk, uint32_t pclk1, ui
679
684
RCC -> CFGR = (RCC -> CFGR & ~(RCC_CFGR_HPRE | RCC_CFGR_PPRE1 | RCC_CFGR_PPRE2 )) | (hpre | ppre1 | ppre2 );
680
685
681
686
682
- if (sysclk <= 24000000 )
687
+ if (! clk48 && ( sysclk <= 24000000 ) )
683
688
{
684
689
/* Range 2, use MSI */
685
690
@@ -825,7 +830,7 @@ bool stm32l4_system_configure(uint32_t sysclk, uint32_t hclk, uint32_t pclk1, ui
825
830
SystemCoreClock = sysclk ;
826
831
}
827
832
828
- if (sysclk <= 24000000 )
833
+ if (! clk48 && ( sysclk <= 24000000 ) )
829
834
{
830
835
if (hclk <= 6000000 ) { latency = FLASH_ACR_LATENCY_0WS ; }
831
836
else if (hclk <= 12000000 ) { latency = FLASH_ACR_LATENCY_1WS ; }
@@ -859,7 +864,7 @@ bool stm32l4_system_configure(uint32_t sysclk, uint32_t hclk, uint32_t pclk1, ui
859
864
860
865
bool stm32l4_system_clk48_enable (void )
861
866
{
862
- if ((stm32l4_system_device . sysclk <= 24000000 ) || (stm32l4_system_device .lseclk != 32768 ))
867
+ if ((( RCC -> CFGR & RCC_CFGR_SWS ) != RCC_CFGR_SWS_PLL ) || (stm32l4_system_device .lseclk != 32768 ))
863
868
{
864
869
return false;
865
870
}
@@ -898,7 +903,7 @@ bool stm32l4_system_clk48_enable(void)
898
903
899
904
bool stm32l4_system_clk48_disable (void )
900
905
{
901
- if ((stm32l4_system_device . sysclk <= 24000000 ) || (stm32l4_system_device .lseclk != 32768 ))
906
+ if ((( RCC -> CFGR & RCC_CFGR_SWS ) != RCC_CFGR_SWS_PLL ) || (stm32l4_system_device .lseclk != 32768 ))
902
907
{
903
908
return false;
904
909
}
0 commit comments