File indexing completed on 2025-05-11 08:23:08
0001
0002
0003
0004
0005
0006
0007
0008
0009
0010
0011
0012
0013
0014
0015
0016
0017
0018
0019
0020
0021
0022
0023 #include "stm32h7xx_hal.h"
0024
0025
0026
0027
0028
0029
0030
0031
0032
0033
0034
0035 #ifdef HAL_RCC_MODULE_ENABLED
0036
0037
0038
0039
0040
0041
0042
0043 #define PLL2_TIMEOUT_VALUE PLL_TIMEOUT_VALUE
0044 #define PLL3_TIMEOUT_VALUE PLL_TIMEOUT_VALUE
0045
0046 #define DIVIDER_P_UPDATE 0U
0047 #define DIVIDER_Q_UPDATE 1U
0048 #define DIVIDER_R_UPDATE 2U
0049
0050
0051
0052
0053
0054
0055
0056
0057
0058
0059
0060
0061
0062
0063
0064 static HAL_StatusTypeDef RCCEx_PLL2_Config(RCC_PLL2InitTypeDef *pll2, uint32_t Divider);
0065 static HAL_StatusTypeDef RCCEx_PLL3_Config(RCC_PLL3InitTypeDef *pll3, uint32_t Divider);
0066
0067
0068
0069
0070
0071
0072
0073
0074
0075
0076
0077
0078
0079
0080
0081
0082
0083
0084
0085
0086
0087
0088
0089
0090
0091
0092
0093
0094
0095
0096
0097
0098
0099
0100
0101
0102
0103
0104
0105
0106
0107
0108
0109
0110 HAL_StatusTypeDef HAL_RCCEx_PeriphCLKConfig(RCC_PeriphCLKInitTypeDef *PeriphClkInit)
0111 {
0112 uint32_t tmpreg;
0113 uint32_t tickstart;
0114 HAL_StatusTypeDef ret = HAL_OK;
0115 HAL_StatusTypeDef status = HAL_OK;
0116
0117
0118
0119 if (((PeriphClkInit->PeriphClockSelection) & RCC_PERIPHCLK_SPDIFRX) == RCC_PERIPHCLK_SPDIFRX)
0120 {
0121
0122 switch (PeriphClkInit->SpdifrxClockSelection)
0123 {
0124 case RCC_SPDIFRXCLKSOURCE_PLL:
0125
0126 __HAL_RCC_PLLCLKOUT_ENABLE(RCC_PLL1_DIVQ);
0127
0128
0129 break;
0130
0131 case RCC_SPDIFRXCLKSOURCE_PLL2:
0132
0133 ret = RCCEx_PLL2_Config(&(PeriphClkInit->PLL2), DIVIDER_R_UPDATE);
0134
0135
0136 break;
0137
0138 case RCC_SPDIFRXCLKSOURCE_PLL3:
0139 ret = RCCEx_PLL3_Config(&(PeriphClkInit->PLL3), DIVIDER_R_UPDATE);
0140
0141
0142 break;
0143
0144 case RCC_SPDIFRXCLKSOURCE_HSI:
0145
0146
0147 break;
0148
0149 default:
0150 ret = HAL_ERROR;
0151 break;
0152 }
0153
0154 if (ret == HAL_OK)
0155 {
0156
0157 __HAL_RCC_SPDIFRX_CONFIG(PeriphClkInit->SpdifrxClockSelection);
0158 }
0159 else
0160 {
0161
0162 status = ret;
0163 }
0164 }
0165
0166
0167 if (((PeriphClkInit->PeriphClockSelection) & RCC_PERIPHCLK_SAI1) == RCC_PERIPHCLK_SAI1)
0168 {
0169 switch (PeriphClkInit->Sai1ClockSelection)
0170 {
0171 case RCC_SAI1CLKSOURCE_PLL:
0172
0173 __HAL_RCC_PLLCLKOUT_ENABLE(RCC_PLL1_DIVQ);
0174
0175
0176 break;
0177
0178 case RCC_SAI1CLKSOURCE_PLL2:
0179
0180 ret = RCCEx_PLL2_Config(&(PeriphClkInit->PLL2), DIVIDER_P_UPDATE);
0181
0182
0183 break;
0184
0185 case RCC_SAI1CLKSOURCE_PLL3:
0186 ret = RCCEx_PLL3_Config(&(PeriphClkInit->PLL3), DIVIDER_P_UPDATE);
0187
0188
0189 break;
0190
0191 case RCC_SAI1CLKSOURCE_PIN:
0192
0193
0194 break;
0195
0196 case RCC_SAI1CLKSOURCE_CLKP:
0197
0198
0199 break;
0200
0201 default:
0202 ret = HAL_ERROR;
0203 break;
0204 }
0205
0206 if (ret == HAL_OK)
0207 {
0208
0209 __HAL_RCC_SAI1_CONFIG(PeriphClkInit->Sai1ClockSelection);
0210 }
0211 else
0212 {
0213
0214 status = ret;
0215 }
0216 }
0217
0218 #if defined(SAI3)
0219
0220 if (((PeriphClkInit->PeriphClockSelection) & RCC_PERIPHCLK_SAI23) == RCC_PERIPHCLK_SAI23)
0221 {
0222 switch (PeriphClkInit->Sai23ClockSelection)
0223 {
0224 case RCC_SAI23CLKSOURCE_PLL:
0225
0226 __HAL_RCC_PLLCLKOUT_ENABLE(RCC_PLL1_DIVQ);
0227
0228
0229 break;
0230
0231 case RCC_SAI23CLKSOURCE_PLL2:
0232
0233 ret = RCCEx_PLL2_Config(&(PeriphClkInit->PLL2), DIVIDER_P_UPDATE);
0234
0235
0236 break;
0237
0238 case RCC_SAI23CLKSOURCE_PLL3:
0239 ret = RCCEx_PLL3_Config(&(PeriphClkInit->PLL3), DIVIDER_P_UPDATE);
0240
0241
0242 break;
0243
0244 case RCC_SAI23CLKSOURCE_PIN:
0245
0246
0247 break;
0248
0249 case RCC_SAI23CLKSOURCE_CLKP:
0250
0251
0252 break;
0253
0254 default:
0255 ret = HAL_ERROR;
0256 break;
0257 }
0258
0259 if (ret == HAL_OK)
0260 {
0261
0262 __HAL_RCC_SAI23_CONFIG(PeriphClkInit->Sai23ClockSelection);
0263 }
0264 else
0265 {
0266
0267 status = ret;
0268 }
0269 }
0270
0271 #endif
0272
0273 #if defined(RCC_CDCCIP1R_SAI2ASEL)
0274
0275 if (((PeriphClkInit->PeriphClockSelection) & RCC_PERIPHCLK_SAI2A) == RCC_PERIPHCLK_SAI2A)
0276 {
0277 switch (PeriphClkInit->Sai2AClockSelection)
0278 {
0279 case RCC_SAI2ACLKSOURCE_PLL:
0280
0281 __HAL_RCC_PLLCLKOUT_ENABLE(RCC_PLL1_DIVQ);
0282
0283
0284 break;
0285
0286 case RCC_SAI2ACLKSOURCE_PLL2:
0287
0288 ret = RCCEx_PLL2_Config(&(PeriphClkInit->PLL2), DIVIDER_P_UPDATE);
0289
0290
0291 break;
0292
0293 case RCC_SAI2ACLKSOURCE_PLL3:
0294 ret = RCCEx_PLL3_Config(&(PeriphClkInit->PLL3), DIVIDER_P_UPDATE);
0295
0296
0297 break;
0298
0299 case RCC_SAI2ACLKSOURCE_PIN:
0300
0301
0302 break;
0303
0304 case RCC_SAI2ACLKSOURCE_CLKP:
0305
0306
0307 break;
0308
0309 case RCC_SAI2ACLKSOURCE_SPDIF:
0310
0311
0312 break;
0313
0314 default:
0315 ret = HAL_ERROR;
0316 break;
0317 }
0318
0319 if (ret == HAL_OK)
0320 {
0321
0322 __HAL_RCC_SAI2A_CONFIG(PeriphClkInit->Sai2AClockSelection);
0323 }
0324 else
0325 {
0326
0327 status = ret;
0328 }
0329 }
0330 #endif
0331
0332 #if defined(RCC_CDCCIP1R_SAI2BSEL)
0333
0334
0335 if (((PeriphClkInit->PeriphClockSelection) & RCC_PERIPHCLK_SAI2B) == RCC_PERIPHCLK_SAI2B)
0336 {
0337 switch (PeriphClkInit->Sai2BClockSelection)
0338 {
0339 case RCC_SAI2BCLKSOURCE_PLL:
0340
0341 __HAL_RCC_PLLCLKOUT_ENABLE(RCC_PLL1_DIVQ);
0342
0343
0344 break;
0345
0346 case RCC_SAI2BCLKSOURCE_PLL2:
0347
0348 ret = RCCEx_PLL2_Config(&(PeriphClkInit->PLL2), DIVIDER_P_UPDATE);
0349
0350
0351 break;
0352
0353 case RCC_SAI2BCLKSOURCE_PLL3:
0354 ret = RCCEx_PLL3_Config(&(PeriphClkInit->PLL3), DIVIDER_P_UPDATE);
0355
0356
0357 break;
0358
0359 case RCC_SAI2BCLKSOURCE_PIN:
0360
0361
0362 break;
0363
0364 case RCC_SAI2BCLKSOURCE_CLKP:
0365
0366
0367 break;
0368
0369 case RCC_SAI2BCLKSOURCE_SPDIF:
0370
0371
0372 break;
0373
0374 default:
0375 ret = HAL_ERROR;
0376 break;
0377 }
0378
0379 if (ret == HAL_OK)
0380 {
0381
0382 __HAL_RCC_SAI2B_CONFIG(PeriphClkInit->Sai2BClockSelection);
0383 }
0384 else
0385 {
0386
0387 status = ret;
0388 }
0389 }
0390 #endif
0391
0392 #if defined(SAI4)
0393
0394 if (((PeriphClkInit->PeriphClockSelection) & RCC_PERIPHCLK_SAI4A) == RCC_PERIPHCLK_SAI4A)
0395 {
0396 switch (PeriphClkInit->Sai4AClockSelection)
0397 {
0398 case RCC_SAI4ACLKSOURCE_PLL:
0399
0400 __HAL_RCC_PLLCLKOUT_ENABLE(RCC_PLL1_DIVQ);
0401
0402
0403 break;
0404
0405 case RCC_SAI4ACLKSOURCE_PLL2:
0406
0407 ret = RCCEx_PLL2_Config(&(PeriphClkInit->PLL2), DIVIDER_P_UPDATE);
0408
0409
0410 break;
0411
0412 case RCC_SAI4ACLKSOURCE_PLL3:
0413 ret = RCCEx_PLL3_Config(&(PeriphClkInit->PLL3), DIVIDER_P_UPDATE);
0414
0415
0416 break;
0417
0418 case RCC_SAI4ACLKSOURCE_PIN:
0419
0420
0421 break;
0422
0423 case RCC_SAI4ACLKSOURCE_CLKP:
0424
0425
0426 break;
0427
0428 #if defined(RCC_VER_3_0)
0429 case RCC_SAI4ACLKSOURCE_SPDIF:
0430
0431
0432 break;
0433 #endif
0434
0435 default:
0436 ret = HAL_ERROR;
0437 break;
0438 }
0439
0440 if (ret == HAL_OK)
0441 {
0442
0443 __HAL_RCC_SAI4A_CONFIG(PeriphClkInit->Sai4AClockSelection);
0444 }
0445 else
0446 {
0447
0448 status = ret;
0449 }
0450 }
0451
0452 if (((PeriphClkInit->PeriphClockSelection) & RCC_PERIPHCLK_SAI4B) == RCC_PERIPHCLK_SAI4B)
0453 {
0454 switch (PeriphClkInit->Sai4BClockSelection)
0455 {
0456 case RCC_SAI4BCLKSOURCE_PLL:
0457
0458 __HAL_RCC_PLLCLKOUT_ENABLE(RCC_PLL1_DIVQ);
0459
0460
0461 break;
0462
0463 case RCC_SAI4BCLKSOURCE_PLL2:
0464
0465 ret = RCCEx_PLL2_Config(&(PeriphClkInit->PLL2), DIVIDER_P_UPDATE);
0466
0467
0468 break;
0469
0470 case RCC_SAI4BCLKSOURCE_PLL3:
0471 ret = RCCEx_PLL3_Config(&(PeriphClkInit->PLL3), DIVIDER_P_UPDATE);
0472
0473
0474 break;
0475
0476 case RCC_SAI4BCLKSOURCE_PIN:
0477
0478
0479 break;
0480
0481 case RCC_SAI4BCLKSOURCE_CLKP:
0482
0483
0484 break;
0485
0486 #if defined(RCC_VER_3_0)
0487 case RCC_SAI4BCLKSOURCE_SPDIF:
0488
0489
0490 break;
0491 #endif
0492
0493 default:
0494 ret = HAL_ERROR;
0495 break;
0496 }
0497
0498 if (ret == HAL_OK)
0499 {
0500
0501 __HAL_RCC_SAI4B_CONFIG(PeriphClkInit->Sai4BClockSelection);
0502 }
0503 else
0504 {
0505
0506 status = ret;
0507 }
0508 }
0509 #endif
0510
0511 #if defined(QUADSPI)
0512
0513 if (((PeriphClkInit->PeriphClockSelection) & RCC_PERIPHCLK_QSPI) == RCC_PERIPHCLK_QSPI)
0514 {
0515 switch (PeriphClkInit->QspiClockSelection)
0516 {
0517 case RCC_QSPICLKSOURCE_PLL:
0518
0519 __HAL_RCC_PLLCLKOUT_ENABLE(RCC_PLL1_DIVQ);
0520
0521
0522 break;
0523
0524 case RCC_QSPICLKSOURCE_PLL2:
0525
0526 ret = RCCEx_PLL2_Config(&(PeriphClkInit->PLL2), DIVIDER_R_UPDATE);
0527
0528
0529 break;
0530
0531
0532 case RCC_QSPICLKSOURCE_CLKP:
0533
0534
0535 break;
0536
0537 case RCC_QSPICLKSOURCE_D1HCLK:
0538
0539 break;
0540
0541 default:
0542 ret = HAL_ERROR;
0543 break;
0544 }
0545
0546 if (ret == HAL_OK)
0547 {
0548
0549 __HAL_RCC_QSPI_CONFIG(PeriphClkInit->QspiClockSelection);
0550 }
0551 else
0552 {
0553
0554 status = ret;
0555 }
0556 }
0557 #endif
0558
0559 #if defined(OCTOSPI1) || defined(OCTOSPI2)
0560
0561 if (((PeriphClkInit->PeriphClockSelection) & RCC_PERIPHCLK_OSPI) == RCC_PERIPHCLK_OSPI)
0562 {
0563 switch (PeriphClkInit->OspiClockSelection)
0564 {
0565 case RCC_OSPICLKSOURCE_PLL:
0566
0567 __HAL_RCC_PLLCLKOUT_ENABLE(RCC_PLL1_DIVQ);
0568
0569
0570 break;
0571
0572 case RCC_OSPICLKSOURCE_PLL2:
0573
0574 ret = RCCEx_PLL2_Config(&(PeriphClkInit->PLL2), DIVIDER_R_UPDATE);
0575
0576
0577 break;
0578
0579
0580 case RCC_OSPICLKSOURCE_CLKP:
0581
0582
0583 break;
0584
0585 case RCC_OSPICLKSOURCE_HCLK:
0586
0587 break;
0588
0589 default:
0590 ret = HAL_ERROR;
0591 break;
0592 }
0593
0594 if (ret == HAL_OK)
0595 {
0596
0597 __HAL_RCC_OSPI_CONFIG(PeriphClkInit->OspiClockSelection);
0598 }
0599 else
0600 {
0601
0602 status = ret;
0603 }
0604 }
0605 #endif
0606
0607
0608 if (((PeriphClkInit->PeriphClockSelection) & RCC_PERIPHCLK_SPI123) == RCC_PERIPHCLK_SPI123)
0609 {
0610 switch (PeriphClkInit->Spi123ClockSelection)
0611 {
0612 case RCC_SPI123CLKSOURCE_PLL:
0613
0614 __HAL_RCC_PLLCLKOUT_ENABLE(RCC_PLL1_DIVQ);
0615
0616
0617 break;
0618
0619 case RCC_SPI123CLKSOURCE_PLL2:
0620 ret = RCCEx_PLL2_Config(&(PeriphClkInit->PLL2), DIVIDER_P_UPDATE);
0621
0622
0623 break;
0624
0625 case RCC_SPI123CLKSOURCE_PLL3:
0626 ret = RCCEx_PLL3_Config(&(PeriphClkInit->PLL3), DIVIDER_P_UPDATE);
0627
0628
0629 break;
0630
0631 case RCC_SPI123CLKSOURCE_PIN:
0632
0633
0634 break;
0635
0636 case RCC_SPI123CLKSOURCE_CLKP:
0637
0638
0639 break;
0640
0641 default:
0642 ret = HAL_ERROR;
0643 break;
0644 }
0645
0646 if (ret == HAL_OK)
0647 {
0648
0649 __HAL_RCC_SPI123_CONFIG(PeriphClkInit->Spi123ClockSelection);
0650 }
0651 else
0652 {
0653
0654 status = ret;
0655 }
0656 }
0657
0658
0659 if (((PeriphClkInit->PeriphClockSelection) & RCC_PERIPHCLK_SPI45) == RCC_PERIPHCLK_SPI45)
0660 {
0661 switch (PeriphClkInit->Spi45ClockSelection)
0662 {
0663 case RCC_SPI45CLKSOURCE_PCLK2:
0664
0665 break;
0666
0667 case RCC_SPI45CLKSOURCE_PLL2:
0668
0669 ret = RCCEx_PLL2_Config(&(PeriphClkInit->PLL2), DIVIDER_Q_UPDATE);
0670
0671
0672 break;
0673 case RCC_SPI45CLKSOURCE_PLL3:
0674 ret = RCCEx_PLL3_Config(&(PeriphClkInit->PLL3), DIVIDER_Q_UPDATE);
0675
0676 break;
0677
0678 case RCC_SPI45CLKSOURCE_HSI:
0679
0680
0681 break;
0682
0683 case RCC_SPI45CLKSOURCE_CSI:
0684
0685
0686 break;
0687
0688 case RCC_SPI45CLKSOURCE_HSE:
0689
0690
0691 break;
0692
0693 default:
0694 ret = HAL_ERROR;
0695 break;
0696 }
0697
0698 if (ret == HAL_OK)
0699 {
0700
0701 __HAL_RCC_SPI45_CONFIG(PeriphClkInit->Spi45ClockSelection);
0702 }
0703 else
0704 {
0705
0706 status = ret;
0707 }
0708 }
0709
0710
0711 if (((PeriphClkInit->PeriphClockSelection) & RCC_PERIPHCLK_SPI6) == RCC_PERIPHCLK_SPI6)
0712 {
0713 switch (PeriphClkInit->Spi6ClockSelection)
0714 {
0715 case RCC_SPI6CLKSOURCE_PCLK4:
0716
0717 break;
0718
0719 case RCC_SPI6CLKSOURCE_PLL2:
0720
0721 ret = RCCEx_PLL2_Config(&(PeriphClkInit->PLL2), DIVIDER_Q_UPDATE);
0722
0723
0724 break;
0725 case RCC_SPI6CLKSOURCE_PLL3:
0726 ret = RCCEx_PLL3_Config(&(PeriphClkInit->PLL3), DIVIDER_Q_UPDATE);
0727
0728 break;
0729
0730 case RCC_SPI6CLKSOURCE_HSI:
0731
0732
0733 break;
0734
0735 case RCC_SPI6CLKSOURCE_CSI:
0736
0737
0738 break;
0739
0740 case RCC_SPI6CLKSOURCE_HSE:
0741
0742
0743 break;
0744 #if defined(RCC_SPI6CLKSOURCE_PIN)
0745 case RCC_SPI6CLKSOURCE_PIN:
0746
0747
0748 break;
0749 #endif
0750
0751 default:
0752 ret = HAL_ERROR;
0753 break;
0754 }
0755
0756 if (ret == HAL_OK)
0757 {
0758
0759 __HAL_RCC_SPI6_CONFIG(PeriphClkInit->Spi6ClockSelection);
0760 }
0761 else
0762 {
0763
0764 status = ret;
0765 }
0766 }
0767
0768 #if defined(DSI)
0769
0770 if (((PeriphClkInit->PeriphClockSelection) & RCC_PERIPHCLK_DSI) == RCC_PERIPHCLK_DSI)
0771 {
0772 switch (PeriphClkInit->DsiClockSelection)
0773 {
0774
0775 case RCC_DSICLKSOURCE_PLL2:
0776
0777 ret = RCCEx_PLL2_Config(&(PeriphClkInit->PLL2), DIVIDER_Q_UPDATE);
0778
0779
0780 break;
0781
0782 case RCC_DSICLKSOURCE_PHY:
0783
0784
0785 break;
0786
0787 default:
0788 ret = HAL_ERROR;
0789 break;
0790 }
0791
0792 if (ret == HAL_OK)
0793 {
0794
0795 __HAL_RCC_DSI_CONFIG(PeriphClkInit->DsiClockSelection);
0796 }
0797 else
0798 {
0799
0800 status = ret;
0801 }
0802 }
0803 #endif
0804
0805 #if defined(FDCAN1) || defined(FDCAN2)
0806
0807 if (((PeriphClkInit->PeriphClockSelection) & RCC_PERIPHCLK_FDCAN) == RCC_PERIPHCLK_FDCAN)
0808 {
0809 switch (PeriphClkInit->FdcanClockSelection)
0810 {
0811 case RCC_FDCANCLKSOURCE_PLL:
0812
0813 __HAL_RCC_PLLCLKOUT_ENABLE(RCC_PLL1_DIVQ);
0814
0815
0816 break;
0817
0818 case RCC_FDCANCLKSOURCE_PLL2:
0819
0820 ret = RCCEx_PLL2_Config(&(PeriphClkInit->PLL2), DIVIDER_Q_UPDATE);
0821
0822
0823 break;
0824
0825 case RCC_FDCANCLKSOURCE_HSE:
0826
0827
0828 break;
0829
0830 default:
0831 ret = HAL_ERROR;
0832 break;
0833 }
0834
0835 if (ret == HAL_OK)
0836 {
0837
0838 __HAL_RCC_FDCAN_CONFIG(PeriphClkInit->FdcanClockSelection);
0839 }
0840 else
0841 {
0842
0843 status = ret;
0844 }
0845 }
0846 #endif
0847
0848
0849 if (((PeriphClkInit->PeriphClockSelection) & RCC_PERIPHCLK_FMC) == RCC_PERIPHCLK_FMC)
0850 {
0851 switch (PeriphClkInit->FmcClockSelection)
0852 {
0853 case RCC_FMCCLKSOURCE_PLL:
0854
0855 __HAL_RCC_PLLCLKOUT_ENABLE(RCC_PLL1_DIVQ);
0856
0857
0858 break;
0859
0860 case RCC_FMCCLKSOURCE_PLL2:
0861
0862 ret = RCCEx_PLL2_Config(&(PeriphClkInit->PLL2), DIVIDER_R_UPDATE);
0863
0864
0865 break;
0866
0867
0868 case RCC_FMCCLKSOURCE_CLKP:
0869
0870
0871 break;
0872
0873 case RCC_FMCCLKSOURCE_HCLK:
0874
0875 break;
0876
0877 default:
0878 ret = HAL_ERROR;
0879 break;
0880 }
0881
0882 if (ret == HAL_OK)
0883 {
0884
0885 __HAL_RCC_FMC_CONFIG(PeriphClkInit->FmcClockSelection);
0886 }
0887 else
0888 {
0889
0890 status = ret;
0891 }
0892 }
0893
0894
0895 if (((PeriphClkInit->PeriphClockSelection) & RCC_PERIPHCLK_RTC) == RCC_PERIPHCLK_RTC)
0896 {
0897
0898 assert_param(IS_RCC_RTCCLKSOURCE(PeriphClkInit->RTCClockSelection));
0899
0900
0901 SET_BIT(PWR->CR1, PWR_CR1_DBP);
0902
0903
0904 tickstart = HAL_GetTick();
0905
0906 while ((PWR->CR1 & PWR_CR1_DBP) == 0U)
0907 {
0908 if ((HAL_GetTick() - tickstart) > RCC_DBP_TIMEOUT_VALUE)
0909 {
0910 ret = HAL_TIMEOUT;
0911 break;
0912 }
0913 }
0914
0915 if (ret == HAL_OK)
0916 {
0917
0918 if ((RCC->BDCR & RCC_BDCR_RTCSEL) != (PeriphClkInit->RTCClockSelection & RCC_BDCR_RTCSEL))
0919 {
0920
0921 tmpreg = (RCC->BDCR & ~(RCC_BDCR_RTCSEL));
0922
0923 __HAL_RCC_BACKUPRESET_FORCE();
0924 __HAL_RCC_BACKUPRESET_RELEASE();
0925
0926 RCC->BDCR = tmpreg;
0927 }
0928
0929
0930 if (PeriphClkInit->RTCClockSelection == RCC_RTCCLKSOURCE_LSE)
0931 {
0932
0933 tickstart = HAL_GetTick();
0934
0935
0936 while (__HAL_RCC_GET_FLAG(RCC_FLAG_LSERDY) == 0U)
0937 {
0938 if ((HAL_GetTick() - tickstart) > RCC_LSE_TIMEOUT_VALUE)
0939 {
0940 ret = HAL_TIMEOUT;
0941 break;
0942 }
0943 }
0944 }
0945
0946 if (ret == HAL_OK)
0947 {
0948 __HAL_RCC_RTC_CONFIG(PeriphClkInit->RTCClockSelection);
0949 }
0950 else
0951 {
0952
0953 status = ret;
0954 }
0955 }
0956 else
0957 {
0958
0959 status = ret;
0960 }
0961 }
0962
0963
0964
0965 if (((PeriphClkInit->PeriphClockSelection) & RCC_PERIPHCLK_USART16) == RCC_PERIPHCLK_USART16)
0966 {
0967 switch (PeriphClkInit->Usart16ClockSelection)
0968 {
0969 case RCC_USART16CLKSOURCE_PCLK2:
0970
0971 break;
0972
0973 case RCC_USART16CLKSOURCE_PLL2:
0974 ret = RCCEx_PLL2_Config(&(PeriphClkInit->PLL2), DIVIDER_Q_UPDATE);
0975
0976 break;
0977
0978 case RCC_USART16CLKSOURCE_PLL3:
0979 ret = RCCEx_PLL3_Config(&(PeriphClkInit->PLL3), DIVIDER_Q_UPDATE);
0980
0981 break;
0982
0983 case RCC_USART16CLKSOURCE_HSI:
0984
0985
0986 break;
0987
0988 case RCC_USART16CLKSOURCE_CSI:
0989
0990
0991 break;
0992
0993 case RCC_USART16CLKSOURCE_LSE:
0994
0995
0996 break;
0997
0998 default:
0999 ret = HAL_ERROR;
1000 break;
1001 }
1002
1003 if (ret == HAL_OK)
1004 {
1005
1006 __HAL_RCC_USART16_CONFIG(PeriphClkInit->Usart16ClockSelection);
1007 }
1008 else
1009 {
1010
1011 status = ret;
1012 }
1013 }
1014
1015
1016 if (((PeriphClkInit->PeriphClockSelection) & RCC_PERIPHCLK_USART234578) == RCC_PERIPHCLK_USART234578)
1017 {
1018 switch (PeriphClkInit->Usart234578ClockSelection)
1019 {
1020 case RCC_USART234578CLKSOURCE_PCLK1:
1021
1022 break;
1023
1024 case RCC_USART234578CLKSOURCE_PLL2:
1025 ret = RCCEx_PLL2_Config(&(PeriphClkInit->PLL2), DIVIDER_Q_UPDATE);
1026
1027 break;
1028
1029 case RCC_USART234578CLKSOURCE_PLL3:
1030 ret = RCCEx_PLL3_Config(&(PeriphClkInit->PLL3), DIVIDER_Q_UPDATE);
1031
1032 break;
1033
1034 case RCC_USART234578CLKSOURCE_HSI:
1035
1036
1037 break;
1038
1039 case RCC_USART234578CLKSOURCE_CSI:
1040
1041
1042 break;
1043
1044 case RCC_USART234578CLKSOURCE_LSE:
1045
1046
1047 break;
1048
1049 default:
1050 ret = HAL_ERROR;
1051 break;
1052 }
1053
1054 if (ret == HAL_OK)
1055 {
1056
1057 __HAL_RCC_USART234578_CONFIG(PeriphClkInit->Usart234578ClockSelection);
1058 }
1059 else
1060 {
1061
1062 status = ret;
1063 }
1064 }
1065
1066
1067 if (((PeriphClkInit->PeriphClockSelection) & RCC_PERIPHCLK_LPUART1) == RCC_PERIPHCLK_LPUART1)
1068 {
1069 switch (PeriphClkInit->Lpuart1ClockSelection)
1070 {
1071 case RCC_LPUART1CLKSOURCE_PCLK4:
1072
1073 break;
1074
1075 case RCC_LPUART1CLKSOURCE_PLL2:
1076 ret = RCCEx_PLL2_Config(&(PeriphClkInit->PLL2), DIVIDER_Q_UPDATE);
1077
1078 break;
1079
1080 case RCC_LPUART1CLKSOURCE_PLL3:
1081 ret = RCCEx_PLL3_Config(&(PeriphClkInit->PLL3), DIVIDER_Q_UPDATE);
1082
1083 break;
1084
1085 case RCC_LPUART1CLKSOURCE_HSI:
1086
1087
1088 break;
1089
1090 case RCC_LPUART1CLKSOURCE_CSI:
1091
1092
1093 break;
1094
1095 case RCC_LPUART1CLKSOURCE_LSE:
1096
1097
1098 break;
1099
1100 default:
1101 ret = HAL_ERROR;
1102 break;
1103 }
1104
1105 if (ret == HAL_OK)
1106 {
1107
1108 __HAL_RCC_LPUART1_CONFIG(PeriphClkInit->Lpuart1ClockSelection);
1109 }
1110 else
1111 {
1112
1113 status = ret;
1114 }
1115 }
1116
1117
1118 if (((PeriphClkInit->PeriphClockSelection) & RCC_PERIPHCLK_LPTIM1) == RCC_PERIPHCLK_LPTIM1)
1119 {
1120 switch (PeriphClkInit->Lptim1ClockSelection)
1121 {
1122 case RCC_LPTIM1CLKSOURCE_PCLK1:
1123
1124 break;
1125
1126 case RCC_LPTIM1CLKSOURCE_PLL2:
1127
1128 ret = RCCEx_PLL2_Config(&(PeriphClkInit->PLL2), DIVIDER_P_UPDATE);
1129
1130
1131 break;
1132
1133 case RCC_LPTIM1CLKSOURCE_PLL3:
1134 ret = RCCEx_PLL3_Config(&(PeriphClkInit->PLL3), DIVIDER_R_UPDATE);
1135
1136
1137 break;
1138
1139 case RCC_LPTIM1CLKSOURCE_LSE:
1140
1141
1142 break;
1143
1144 case RCC_LPTIM1CLKSOURCE_LSI:
1145
1146
1147 break;
1148 case RCC_LPTIM1CLKSOURCE_CLKP:
1149
1150
1151 break;
1152
1153 default:
1154 ret = HAL_ERROR;
1155 break;
1156 }
1157
1158 if (ret == HAL_OK)
1159 {
1160
1161 __HAL_RCC_LPTIM1_CONFIG(PeriphClkInit->Lptim1ClockSelection);
1162 }
1163 else
1164 {
1165
1166 status = ret;
1167 }
1168 }
1169
1170
1171 if (((PeriphClkInit->PeriphClockSelection) & RCC_PERIPHCLK_LPTIM2) == RCC_PERIPHCLK_LPTIM2)
1172 {
1173 switch (PeriphClkInit->Lptim2ClockSelection)
1174 {
1175 case RCC_LPTIM2CLKSOURCE_PCLK4:
1176
1177 break;
1178
1179 case RCC_LPTIM2CLKSOURCE_PLL2:
1180
1181 ret = RCCEx_PLL2_Config(&(PeriphClkInit->PLL2), DIVIDER_P_UPDATE);
1182
1183
1184 break;
1185
1186 case RCC_LPTIM2CLKSOURCE_PLL3:
1187 ret = RCCEx_PLL3_Config(&(PeriphClkInit->PLL3), DIVIDER_R_UPDATE);
1188
1189
1190 break;
1191
1192 case RCC_LPTIM2CLKSOURCE_LSE:
1193
1194
1195 break;
1196
1197 case RCC_LPTIM2CLKSOURCE_LSI:
1198
1199
1200 break;
1201 case RCC_LPTIM2CLKSOURCE_CLKP:
1202
1203
1204 break;
1205
1206 default:
1207 ret = HAL_ERROR;
1208 break;
1209 }
1210
1211 if (ret == HAL_OK)
1212 {
1213
1214 __HAL_RCC_LPTIM2_CONFIG(PeriphClkInit->Lptim2ClockSelection);
1215 }
1216 else
1217 {
1218
1219 status = ret;
1220 }
1221 }
1222
1223
1224 if (((PeriphClkInit->PeriphClockSelection) & RCC_PERIPHCLK_LPTIM345) == RCC_PERIPHCLK_LPTIM345)
1225 {
1226 switch (PeriphClkInit->Lptim345ClockSelection)
1227 {
1228
1229 case RCC_LPTIM345CLKSOURCE_PCLK4:
1230
1231 break;
1232
1233 case RCC_LPTIM345CLKSOURCE_PLL2:
1234 ret = RCCEx_PLL2_Config(&(PeriphClkInit->PLL2), DIVIDER_P_UPDATE);
1235
1236
1237 break;
1238
1239 case RCC_LPTIM345CLKSOURCE_PLL3:
1240 ret = RCCEx_PLL3_Config(&(PeriphClkInit->PLL3), DIVIDER_R_UPDATE);
1241
1242
1243 break;
1244
1245 case RCC_LPTIM345CLKSOURCE_LSE:
1246
1247
1248 break;
1249
1250 case RCC_LPTIM345CLKSOURCE_LSI:
1251
1252
1253 break;
1254 case RCC_LPTIM345CLKSOURCE_CLKP:
1255
1256
1257 break;
1258
1259 default:
1260 ret = HAL_ERROR;
1261 break;
1262 }
1263
1264 if (ret == HAL_OK)
1265 {
1266
1267 __HAL_RCC_LPTIM345_CONFIG(PeriphClkInit->Lptim345ClockSelection);
1268 }
1269 else
1270 {
1271
1272 status = ret;
1273 }
1274 }
1275
1276
1277 #if defined(I2C5)
1278 if (((PeriphClkInit->PeriphClockSelection) & RCC_PERIPHCLK_I2C1235) == RCC_PERIPHCLK_I2C1235)
1279 {
1280
1281 assert_param(IS_RCC_I2C1235CLKSOURCE(PeriphClkInit->I2c1235ClockSelection));
1282
1283 if ((PeriphClkInit->I2c1235ClockSelection) == RCC_I2C1235CLKSOURCE_PLL3)
1284 {
1285 if (RCCEx_PLL3_Config(&(PeriphClkInit->PLL3), DIVIDER_R_UPDATE) != HAL_OK)
1286 {
1287 status = HAL_ERROR;
1288 }
1289 }
1290
1291 __HAL_RCC_I2C1235_CONFIG(PeriphClkInit->I2c1235ClockSelection);
1292
1293 }
1294 #else
1295 if (((PeriphClkInit->PeriphClockSelection) & RCC_PERIPHCLK_I2C123) == RCC_PERIPHCLK_I2C123)
1296 {
1297
1298 assert_param(IS_RCC_I2C123CLKSOURCE(PeriphClkInit->I2c123ClockSelection));
1299
1300 if ((PeriphClkInit->I2c123ClockSelection) == RCC_I2C123CLKSOURCE_PLL3)
1301 {
1302 if (RCCEx_PLL3_Config(&(PeriphClkInit->PLL3), DIVIDER_R_UPDATE) != HAL_OK)
1303 {
1304 status = HAL_ERROR;
1305 }
1306 }
1307
1308 __HAL_RCC_I2C123_CONFIG(PeriphClkInit->I2c123ClockSelection);
1309
1310 }
1311 #endif
1312
1313
1314 if (((PeriphClkInit->PeriphClockSelection) & RCC_PERIPHCLK_I2C4) == RCC_PERIPHCLK_I2C4)
1315 {
1316
1317 assert_param(IS_RCC_I2C4CLKSOURCE(PeriphClkInit->I2c4ClockSelection));
1318
1319 if ((PeriphClkInit->I2c4ClockSelection) == RCC_I2C4CLKSOURCE_PLL3)
1320 {
1321 if (RCCEx_PLL3_Config(&(PeriphClkInit->PLL3), DIVIDER_R_UPDATE) != HAL_OK)
1322 {
1323 status = HAL_ERROR;
1324 }
1325 }
1326
1327 __HAL_RCC_I2C4_CONFIG(PeriphClkInit->I2c4ClockSelection);
1328
1329 }
1330
1331
1332 if (((PeriphClkInit->PeriphClockSelection) & RCC_PERIPHCLK_ADC) == RCC_PERIPHCLK_ADC)
1333 {
1334 switch (PeriphClkInit->AdcClockSelection)
1335 {
1336
1337 case RCC_ADCCLKSOURCE_PLL2:
1338
1339 ret = RCCEx_PLL2_Config(&(PeriphClkInit->PLL2), DIVIDER_P_UPDATE);
1340
1341
1342 break;
1343
1344 case RCC_ADCCLKSOURCE_PLL3:
1345 ret = RCCEx_PLL3_Config(&(PeriphClkInit->PLL3), DIVIDER_R_UPDATE);
1346
1347
1348 break;
1349
1350 case RCC_ADCCLKSOURCE_CLKP:
1351
1352
1353 break;
1354
1355 default:
1356 ret = HAL_ERROR;
1357 break;
1358 }
1359
1360 if (ret == HAL_OK)
1361 {
1362
1363 __HAL_RCC_ADC_CONFIG(PeriphClkInit->AdcClockSelection);
1364 }
1365 else
1366 {
1367
1368 status = ret;
1369 }
1370 }
1371
1372
1373 if (((PeriphClkInit->PeriphClockSelection) & RCC_PERIPHCLK_USB) == RCC_PERIPHCLK_USB)
1374 {
1375
1376 switch (PeriphClkInit->UsbClockSelection)
1377 {
1378 case RCC_USBCLKSOURCE_PLL:
1379
1380 __HAL_RCC_PLLCLKOUT_ENABLE(RCC_PLL1_DIVQ);
1381
1382
1383 break;
1384
1385 case RCC_USBCLKSOURCE_PLL3:
1386
1387 ret = RCCEx_PLL3_Config(&(PeriphClkInit->PLL3), DIVIDER_Q_UPDATE);
1388
1389
1390 break;
1391
1392 case RCC_USBCLKSOURCE_HSI48:
1393
1394
1395 break;
1396
1397 default:
1398 ret = HAL_ERROR;
1399 break;
1400 }
1401
1402 if (ret == HAL_OK)
1403 {
1404
1405 __HAL_RCC_USB_CONFIG(PeriphClkInit->UsbClockSelection);
1406 }
1407 else
1408 {
1409
1410 status = ret;
1411 }
1412
1413 }
1414
1415
1416 if (((PeriphClkInit->PeriphClockSelection) & RCC_PERIPHCLK_SDMMC) == RCC_PERIPHCLK_SDMMC)
1417 {
1418
1419 assert_param(IS_RCC_SDMMC(PeriphClkInit->SdmmcClockSelection));
1420
1421 switch (PeriphClkInit->SdmmcClockSelection)
1422 {
1423 case RCC_SDMMCCLKSOURCE_PLL:
1424
1425 __HAL_RCC_PLLCLKOUT_ENABLE(RCC_PLL1_DIVQ);
1426
1427
1428 break;
1429
1430 case RCC_SDMMCCLKSOURCE_PLL2:
1431
1432 ret = RCCEx_PLL2_Config(&(PeriphClkInit->PLL2), DIVIDER_R_UPDATE);
1433
1434
1435 break;
1436
1437 default:
1438 ret = HAL_ERROR;
1439 break;
1440 }
1441
1442 if (ret == HAL_OK)
1443 {
1444
1445 __HAL_RCC_SDMMC_CONFIG(PeriphClkInit->SdmmcClockSelection);
1446 }
1447 else
1448 {
1449
1450 status = ret;
1451 }
1452 }
1453
1454 #if defined(LTDC)
1455
1456 if (((PeriphClkInit->PeriphClockSelection) & RCC_PERIPHCLK_LTDC) == RCC_PERIPHCLK_LTDC)
1457 {
1458 if (RCCEx_PLL3_Config(&(PeriphClkInit->PLL3), DIVIDER_R_UPDATE) != HAL_OK)
1459 {
1460 status = HAL_ERROR;
1461 }
1462 }
1463 #endif
1464
1465
1466 if (((PeriphClkInit->PeriphClockSelection) & RCC_PERIPHCLK_RNG) == RCC_PERIPHCLK_RNG)
1467 {
1468
1469 switch (PeriphClkInit->RngClockSelection)
1470 {
1471 case RCC_RNGCLKSOURCE_PLL:
1472
1473 __HAL_RCC_PLLCLKOUT_ENABLE(RCC_PLL1_DIVQ);
1474
1475
1476 break;
1477
1478 case RCC_RNGCLKSOURCE_LSE:
1479
1480
1481 break;
1482
1483 case RCC_RNGCLKSOURCE_LSI:
1484
1485
1486 break;
1487 case RCC_RNGCLKSOURCE_HSI48:
1488
1489
1490 break;
1491
1492 default:
1493 ret = HAL_ERROR;
1494 break;
1495 }
1496
1497 if (ret == HAL_OK)
1498 {
1499
1500 __HAL_RCC_RNG_CONFIG(PeriphClkInit->RngClockSelection);
1501 }
1502 else
1503 {
1504
1505 status = ret;
1506 }
1507
1508 }
1509
1510
1511 if (((PeriphClkInit->PeriphClockSelection) & RCC_PERIPHCLK_SWPMI1) == RCC_PERIPHCLK_SWPMI1)
1512 {
1513
1514 assert_param(IS_RCC_SWPMI1CLKSOURCE(PeriphClkInit->Swpmi1ClockSelection));
1515
1516
1517 __HAL_RCC_SWPMI1_CONFIG(PeriphClkInit->Swpmi1ClockSelection);
1518 }
1519 #if defined(HRTIM1)
1520
1521 if (((PeriphClkInit->PeriphClockSelection) & RCC_PERIPHCLK_HRTIM1) == RCC_PERIPHCLK_HRTIM1)
1522 {
1523
1524 assert_param(IS_RCC_HRTIM1CLKSOURCE(PeriphClkInit->Hrtim1ClockSelection));
1525
1526
1527 __HAL_RCC_HRTIM1_CONFIG(PeriphClkInit->Hrtim1ClockSelection);
1528 }
1529 #endif
1530
1531 if (((PeriphClkInit->PeriphClockSelection) & RCC_PERIPHCLK_DFSDM1) == RCC_PERIPHCLK_DFSDM1)
1532 {
1533
1534 assert_param(IS_RCC_DFSDM1CLKSOURCE(PeriphClkInit->Dfsdm1ClockSelection));
1535
1536
1537 __HAL_RCC_DFSDM1_CONFIG(PeriphClkInit->Dfsdm1ClockSelection);
1538 }
1539
1540 #if defined(DFSDM2_BASE)
1541
1542 if (((PeriphClkInit->PeriphClockSelection) & RCC_PERIPHCLK_DFSDM2) == RCC_PERIPHCLK_DFSDM2)
1543 {
1544
1545 assert_param(IS_RCC_DFSDM2CLKSOURCE(PeriphClkInit->Dfsdm2ClockSelection));
1546
1547
1548 __HAL_RCC_DFSDM2_CONFIG(PeriphClkInit->Dfsdm2ClockSelection);
1549 }
1550 #endif
1551
1552
1553 if (((PeriphClkInit->PeriphClockSelection) & RCC_PERIPHCLK_TIM) == RCC_PERIPHCLK_TIM)
1554 {
1555
1556 assert_param(IS_RCC_TIMPRES(PeriphClkInit->TIMPresSelection));
1557
1558
1559 __HAL_RCC_TIMCLKPRESCALER(PeriphClkInit->TIMPresSelection);
1560 }
1561
1562
1563 if (((PeriphClkInit->PeriphClockSelection) & RCC_PERIPHCLK_CKPER) == RCC_PERIPHCLK_CKPER)
1564 {
1565
1566 assert_param(IS_RCC_CLKPSOURCE(PeriphClkInit->CkperClockSelection));
1567
1568
1569 __HAL_RCC_CLKP_CONFIG(PeriphClkInit->CkperClockSelection);
1570 }
1571
1572
1573 if (((PeriphClkInit->PeriphClockSelection) & RCC_PERIPHCLK_CEC) == RCC_PERIPHCLK_CEC)
1574 {
1575
1576 assert_param(IS_RCC_CECCLKSOURCE(PeriphClkInit->CecClockSelection));
1577
1578
1579 __HAL_RCC_CEC_CONFIG(PeriphClkInit->CecClockSelection);
1580 }
1581
1582
1583 if (((PeriphClkInit->PeriphClockSelection) & RCC_PERIPHCLK_PLL2_DIVP) == RCC_PERIPHCLK_PLL2_DIVP)
1584 {
1585 ret = RCCEx_PLL2_Config(&(PeriphClkInit->PLL2), DIVIDER_P_UPDATE);
1586
1587 if (ret == HAL_OK)
1588 {
1589
1590 }
1591 else
1592 {
1593
1594 status = ret;
1595 }
1596 }
1597
1598
1599 if (((PeriphClkInit->PeriphClockSelection) & RCC_PERIPHCLK_PLL2_DIVQ) == RCC_PERIPHCLK_PLL2_DIVQ)
1600 {
1601 ret = RCCEx_PLL2_Config(&(PeriphClkInit->PLL2), DIVIDER_Q_UPDATE);
1602
1603 if (ret == HAL_OK)
1604 {
1605
1606 }
1607 else
1608 {
1609
1610 status = ret;
1611 }
1612 }
1613
1614
1615 if (((PeriphClkInit->PeriphClockSelection) & RCC_PERIPHCLK_PLL2_DIVR) == RCC_PERIPHCLK_PLL2_DIVR)
1616 {
1617 ret = RCCEx_PLL2_Config(&(PeriphClkInit->PLL2), DIVIDER_R_UPDATE);
1618
1619 if (ret == HAL_OK)
1620 {
1621
1622 }
1623 else
1624 {
1625
1626 status = ret;
1627 }
1628 }
1629
1630
1631
1632 if (((PeriphClkInit->PeriphClockSelection) & RCC_PERIPHCLK_PLL3_DIVP) == RCC_PERIPHCLK_PLL3_DIVP)
1633 {
1634 ret = RCCEx_PLL3_Config(&(PeriphClkInit->PLL3), DIVIDER_P_UPDATE);
1635
1636 if (ret == HAL_OK)
1637 {
1638
1639 }
1640 else
1641 {
1642
1643 status = ret;
1644 }
1645 }
1646
1647
1648 if (((PeriphClkInit->PeriphClockSelection) & RCC_PERIPHCLK_PLL3_DIVQ) == RCC_PERIPHCLK_PLL3_DIVQ)
1649 {
1650 ret = RCCEx_PLL3_Config(&(PeriphClkInit->PLL3), DIVIDER_Q_UPDATE);
1651
1652 if (ret == HAL_OK)
1653 {
1654
1655 }
1656 else
1657 {
1658
1659 status = ret;
1660 }
1661 }
1662
1663
1664 if (((PeriphClkInit->PeriphClockSelection) & RCC_PERIPHCLK_PLL3_DIVR) == RCC_PERIPHCLK_PLL3_DIVR)
1665 {
1666 ret = RCCEx_PLL3_Config(&(PeriphClkInit->PLL3), DIVIDER_R_UPDATE);
1667
1668 if (ret == HAL_OK)
1669 {
1670
1671 }
1672 else
1673 {
1674
1675 status = ret;
1676 }
1677 }
1678
1679 if (status == HAL_OK)
1680 {
1681 return HAL_OK;
1682 }
1683 return HAL_ERROR;
1684 }
1685
1686
1687
1688
1689
1690
1691
1692
1693
1694
1695
1696
1697 void HAL_RCCEx_GetPeriphCLKConfig(RCC_PeriphCLKInitTypeDef *PeriphClkInit)
1698 {
1699
1700 PeriphClkInit->PeriphClockSelection =
1701 RCC_PERIPHCLK_USART16 | RCC_PERIPHCLK_USART234578 | RCC_PERIPHCLK_LPUART1 |
1702 RCC_PERIPHCLK_I2C4 | RCC_PERIPHCLK_LPTIM1 | RCC_PERIPHCLK_LPTIM2 | RCC_PERIPHCLK_LPTIM345 |
1703 RCC_PERIPHCLK_SAI1 | RCC_PERIPHCLK_SPI123 | RCC_PERIPHCLK_SPI45 | RCC_PERIPHCLK_SPI6 |
1704 RCC_PERIPHCLK_FDCAN | RCC_PERIPHCLK_SDMMC | RCC_PERIPHCLK_RNG | RCC_PERIPHCLK_USB |
1705 RCC_PERIPHCLK_ADC | RCC_PERIPHCLK_SWPMI1 | RCC_PERIPHCLK_DFSDM1 | RCC_PERIPHCLK_RTC |
1706 RCC_PERIPHCLK_CEC | RCC_PERIPHCLK_FMC | RCC_PERIPHCLK_SPDIFRX | RCC_PERIPHCLK_TIM |
1707 RCC_PERIPHCLK_CKPER;
1708
1709 #if defined(I2C5)
1710 PeriphClkInit->PeriphClockSelection |= RCC_PERIPHCLK_I2C1235;
1711 #else
1712 PeriphClkInit->PeriphClockSelection |= RCC_PERIPHCLK_I2C123;
1713 #endif
1714 #if defined(RCC_CDCCIP1R_SAI2ASEL)
1715 PeriphClkInit->PeriphClockSelection |= RCC_PERIPHCLK_SAI2A;
1716 #endif
1717 #if defined(RCC_CDCCIP1R_SAI2BSEL)
1718 PeriphClkInit->PeriphClockSelection |= RCC_PERIPHCLK_SAI2B;
1719 #endif
1720 #if defined(SAI3)
1721 PeriphClkInit->PeriphClockSelection |= RCC_PERIPHCLK_SAI23;
1722 #endif
1723 #if defined(SAI4)
1724 PeriphClkInit->PeriphClockSelection |= RCC_PERIPHCLK_SAI4A;
1725 PeriphClkInit->PeriphClockSelection |= RCC_PERIPHCLK_SAI4B;
1726 #endif
1727 #if defined(DFSDM2_BASE)
1728 PeriphClkInit->PeriphClockSelection |= RCC_PERIPHCLK_DFSDM2;
1729 #endif
1730 #if defined(QUADSPI)
1731 PeriphClkInit->PeriphClockSelection |= RCC_PERIPHCLK_QSPI;
1732 #endif
1733 #if defined(OCTOSPI1) || defined(OCTOSPI2)
1734 PeriphClkInit->PeriphClockSelection |= RCC_PERIPHCLK_OSPI;
1735 #endif
1736 #if defined(HRTIM1)
1737 PeriphClkInit->PeriphClockSelection |= RCC_PERIPHCLK_HRTIM1;
1738 #endif
1739 #if defined(LTDC)
1740 PeriphClkInit->PeriphClockSelection |= RCC_PERIPHCLK_LTDC;
1741 #endif
1742 #if defined(DSI)
1743 PeriphClkInit->PeriphClockSelection |= RCC_PERIPHCLK_DSI;
1744 #endif
1745
1746
1747 PeriphClkInit->PLL3.PLL3M = (uint32_t)((RCC->PLLCKSELR & RCC_PLLCKSELR_DIVM3) >> RCC_PLLCKSELR_DIVM3_Pos);
1748 PeriphClkInit->PLL3.PLL3N = (uint32_t)((RCC->PLL3DIVR & RCC_PLL3DIVR_N3) >> RCC_PLL3DIVR_N3_Pos) + 1U;
1749 PeriphClkInit->PLL3.PLL3R = (uint32_t)((RCC->PLL3DIVR & RCC_PLL3DIVR_R3) >> RCC_PLL3DIVR_R3_Pos) + 1U;
1750 PeriphClkInit->PLL3.PLL3P = (uint32_t)((RCC->PLL3DIVR & RCC_PLL3DIVR_P3) >> RCC_PLL3DIVR_P3_Pos) + 1U;
1751 PeriphClkInit->PLL3.PLL3Q = (uint32_t)((RCC->PLL3DIVR & RCC_PLL3DIVR_Q3) >> RCC_PLL3DIVR_Q3_Pos) + 1U;
1752 PeriphClkInit->PLL3.PLL3RGE = (uint32_t)((RCC->PLLCFGR & RCC_PLLCFGR_PLL3RGE) >> RCC_PLLCFGR_PLL3RGE_Pos);
1753 PeriphClkInit->PLL3.PLL3VCOSEL = (uint32_t)((RCC->PLLCFGR & RCC_PLLCFGR_PLL3VCOSEL) >> RCC_PLLCFGR_PLL3VCOSEL_Pos);
1754
1755
1756 PeriphClkInit->PLL2.PLL2M = (uint32_t)((RCC->PLLCKSELR & RCC_PLLCKSELR_DIVM2) >> RCC_PLLCKSELR_DIVM2_Pos);
1757 PeriphClkInit->PLL2.PLL2N = (uint32_t)((RCC->PLL2DIVR & RCC_PLL2DIVR_N2) >> RCC_PLL2DIVR_N2_Pos) + 1U;
1758 PeriphClkInit->PLL2.PLL2R = (uint32_t)((RCC->PLL2DIVR & RCC_PLL2DIVR_R2) >> RCC_PLL2DIVR_R2_Pos) + 1U;
1759 PeriphClkInit->PLL2.PLL2P = (uint32_t)((RCC->PLL2DIVR & RCC_PLL2DIVR_P2) >> RCC_PLL2DIVR_P2_Pos) + 1U;
1760 PeriphClkInit->PLL2.PLL2Q = (uint32_t)((RCC->PLL2DIVR & RCC_PLL2DIVR_Q2) >> RCC_PLL2DIVR_Q2_Pos) + 1U;
1761 PeriphClkInit->PLL2.PLL2RGE = (uint32_t)((RCC->PLLCFGR & RCC_PLLCFGR_PLL2RGE) >> RCC_PLLCFGR_PLL2RGE_Pos);
1762 PeriphClkInit->PLL2.PLL2VCOSEL = (uint32_t)((RCC->PLLCFGR & RCC_PLLCFGR_PLL2VCOSEL) >> RCC_PLLCFGR_PLL2VCOSEL_Pos);
1763
1764
1765 PeriphClkInit->Usart16ClockSelection = __HAL_RCC_GET_USART16_SOURCE();
1766
1767 PeriphClkInit->Usart234578ClockSelection = __HAL_RCC_GET_USART234578_SOURCE();
1768
1769 PeriphClkInit->Lpuart1ClockSelection = __HAL_RCC_GET_LPUART1_SOURCE();
1770 #if defined(I2C5)
1771
1772 PeriphClkInit->I2c1235ClockSelection = __HAL_RCC_GET_I2C1_SOURCE();
1773 #else
1774
1775 PeriphClkInit->I2c123ClockSelection = __HAL_RCC_GET_I2C1_SOURCE();
1776 #endif
1777
1778 PeriphClkInit->Lptim1ClockSelection = __HAL_RCC_GET_LPTIM1_SOURCE();
1779
1780 PeriphClkInit->Lptim2ClockSelection = __HAL_RCC_GET_LPTIM2_SOURCE();
1781
1782 PeriphClkInit->Lptim345ClockSelection = __HAL_RCC_GET_LPTIM345_SOURCE();
1783
1784 PeriphClkInit->Sai1ClockSelection = __HAL_RCC_GET_SAI1_SOURCE();
1785 #if defined(SAI3)
1786
1787 PeriphClkInit->Sai23ClockSelection = __HAL_RCC_GET_SAI23_SOURCE();
1788 #endif
1789 #if defined(RCC_CDCCIP1R_SAI2ASEL_0)
1790
1791 PeriphClkInit->Sai2AClockSelection = __HAL_RCC_GET_SAI2A_SOURCE();
1792 #endif
1793 #if defined(RCC_CDCCIP1R_SAI2BSEL_0)
1794
1795 PeriphClkInit->Sai2BClockSelection = __HAL_RCC_GET_SAI2B_SOURCE();
1796 #endif
1797 #if defined(SAI4)
1798
1799 PeriphClkInit->Sai4AClockSelection = __HAL_RCC_GET_SAI4A_SOURCE();
1800
1801 PeriphClkInit->Sai4BClockSelection = __HAL_RCC_GET_SAI4B_SOURCE();
1802 #endif
1803
1804 PeriphClkInit->RTCClockSelection = __HAL_RCC_GET_RTC_SOURCE();
1805
1806 PeriphClkInit->UsbClockSelection = __HAL_RCC_GET_USB_SOURCE();
1807
1808 PeriphClkInit->SdmmcClockSelection = __HAL_RCC_GET_SDMMC_SOURCE();
1809
1810 PeriphClkInit->RngClockSelection = __HAL_RCC_GET_RNG_SOURCE();
1811 #if defined(HRTIM1)
1812
1813 PeriphClkInit->Hrtim1ClockSelection = __HAL_RCC_GET_HRTIM1_SOURCE();
1814 #endif
1815
1816 PeriphClkInit->AdcClockSelection = __HAL_RCC_GET_ADC_SOURCE();
1817
1818 PeriphClkInit->Swpmi1ClockSelection = __HAL_RCC_GET_SWPMI1_SOURCE();
1819
1820 PeriphClkInit->Dfsdm1ClockSelection = __HAL_RCC_GET_DFSDM1_SOURCE();
1821 #if defined(DFSDM2_BASE)
1822
1823 PeriphClkInit->Dfsdm2ClockSelection = __HAL_RCC_GET_DFSDM2_SOURCE();
1824 #endif
1825
1826 PeriphClkInit->SpdifrxClockSelection = __HAL_RCC_GET_SPDIFRX_SOURCE();
1827
1828 PeriphClkInit->Spi123ClockSelection = __HAL_RCC_GET_SPI123_SOURCE();
1829
1830 PeriphClkInit->Spi45ClockSelection = __HAL_RCC_GET_SPI45_SOURCE();
1831
1832 PeriphClkInit->Spi6ClockSelection = __HAL_RCC_GET_SPI6_SOURCE();
1833
1834 PeriphClkInit->FdcanClockSelection = __HAL_RCC_GET_FDCAN_SOURCE();
1835
1836 PeriphClkInit->CecClockSelection = __HAL_RCC_GET_CEC_SOURCE();
1837
1838 PeriphClkInit->FmcClockSelection = __HAL_RCC_GET_FMC_SOURCE();
1839 #if defined(QUADSPI)
1840
1841 PeriphClkInit->QspiClockSelection = __HAL_RCC_GET_QSPI_SOURCE();
1842 #endif
1843 #if defined(OCTOSPI1) || defined(OCTOSPI2)
1844
1845 PeriphClkInit->OspiClockSelection = __HAL_RCC_GET_OSPI_SOURCE();
1846 #endif
1847
1848 #if defined(DSI)
1849
1850 PeriphClkInit->DsiClockSelection = __HAL_RCC_GET_DSI_SOURCE();
1851 #endif
1852
1853
1854 PeriphClkInit->CkperClockSelection = __HAL_RCC_GET_CLKP_SOURCE();
1855
1856
1857 if ((RCC->CFGR & RCC_CFGR_TIMPRE) == 0U)
1858 {
1859 PeriphClkInit->TIMPresSelection = RCC_TIMPRES_DESACTIVATED;
1860 }
1861 else
1862 {
1863 PeriphClkInit->TIMPresSelection = RCC_TIMPRES_ACTIVATED;
1864 }
1865 }
1866
1867
1868
1869
1870
1871
1872
1873
1874
1875
1876
1877
1878
1879
1880
1881
1882
1883
1884
1885
1886 uint32_t HAL_RCCEx_GetPeriphCLKFreq(uint64_t PeriphClk)
1887 {
1888 PLL1_ClocksTypeDef pll1_clocks;
1889 PLL2_ClocksTypeDef pll2_clocks;
1890 PLL3_ClocksTypeDef pll3_clocks;
1891
1892
1893 uint32_t frequency;
1894
1895 uint32_t saiclocksource;
1896 uint32_t ckpclocksource;
1897 uint32_t srcclk;
1898
1899 if (PeriphClk == RCC_PERIPHCLK_SAI1)
1900 {
1901
1902 saiclocksource = __HAL_RCC_GET_SAI1_SOURCE();
1903
1904 switch (saiclocksource)
1905 {
1906 case RCC_SAI1CLKSOURCE_PLL:
1907 {
1908 if (HAL_IS_BIT_SET(RCC->CR, RCC_CR_PLL1RDY))
1909 {
1910 HAL_RCCEx_GetPLL1ClockFreq(&pll1_clocks);
1911 frequency = pll1_clocks.PLL1_Q_Frequency;
1912 }
1913 else
1914 {
1915 frequency = 0;
1916 }
1917 break;
1918 }
1919 case RCC_SAI1CLKSOURCE_PLL2:
1920 {
1921 if (HAL_IS_BIT_SET(RCC->CR, RCC_CR_PLL2RDY))
1922 {
1923 HAL_RCCEx_GetPLL2ClockFreq(&pll2_clocks);
1924 frequency = pll2_clocks.PLL2_P_Frequency;
1925 }
1926 else
1927 {
1928 frequency = 0;
1929 }
1930 break;
1931 }
1932
1933 case RCC_SAI1CLKSOURCE_PLL3:
1934 {
1935 if (HAL_IS_BIT_SET(RCC->CR, RCC_CR_PLL3RDY))
1936 {
1937 HAL_RCCEx_GetPLL3ClockFreq(&pll3_clocks);
1938 frequency = pll3_clocks.PLL3_P_Frequency;
1939 }
1940 else
1941 {
1942 frequency = 0;
1943 }
1944 break;
1945 }
1946
1947 case RCC_SAI1CLKSOURCE_CLKP:
1948 {
1949
1950 ckpclocksource = __HAL_RCC_GET_CLKP_SOURCE();
1951
1952 if ((HAL_IS_BIT_SET(RCC->CR, RCC_CR_HSIRDY)) && (ckpclocksource == RCC_CLKPSOURCE_HSI))
1953 {
1954
1955 frequency = (HSI_VALUE >> (__HAL_RCC_GET_HSI_DIVIDER() >> 3));
1956 }
1957
1958 else if ((HAL_IS_BIT_SET(RCC->CR, RCC_CR_CSIRDY)) && (ckpclocksource == RCC_CLKPSOURCE_CSI))
1959 {
1960
1961 frequency = CSI_VALUE;
1962 }
1963
1964 else if ((HAL_IS_BIT_SET(RCC->CR, RCC_CR_HSERDY)) && (ckpclocksource == RCC_CLKPSOURCE_HSE))
1965 {
1966
1967 frequency = HSE_VALUE;
1968 }
1969
1970 else
1971 {
1972
1973 frequency = 0;
1974 }
1975
1976 break;
1977 }
1978
1979 case (RCC_SAI1CLKSOURCE_PIN):
1980 {
1981 frequency = EXTERNAL_CLOCK_VALUE;
1982 break;
1983 }
1984 default :
1985 {
1986 frequency = 0;
1987 break;
1988 }
1989 }
1990 }
1991
1992 #if defined(SAI3)
1993 else if (PeriphClk == RCC_PERIPHCLK_SAI23)
1994 {
1995
1996 saiclocksource = __HAL_RCC_GET_SAI23_SOURCE();
1997
1998 switch (saiclocksource)
1999 {
2000 case RCC_SAI23CLKSOURCE_PLL:
2001 {
2002 if (HAL_IS_BIT_SET(RCC->CR, RCC_CR_PLL1RDY))
2003 {
2004 HAL_RCCEx_GetPLL1ClockFreq(&pll1_clocks);
2005 frequency = pll1_clocks.PLL1_Q_Frequency;
2006 }
2007 else
2008 {
2009 frequency = 0;
2010 }
2011 break;
2012 }
2013 case RCC_SAI23CLKSOURCE_PLL2:
2014 {
2015 if (HAL_IS_BIT_SET(RCC->CR, RCC_CR_PLL2RDY))
2016 {
2017 HAL_RCCEx_GetPLL2ClockFreq(&pll2_clocks);
2018 frequency = pll2_clocks.PLL2_P_Frequency;
2019 }
2020 else
2021 {
2022 frequency = 0;
2023 }
2024 break;
2025 }
2026
2027 case RCC_SAI23CLKSOURCE_PLL3:
2028 {
2029 if (HAL_IS_BIT_SET(RCC->CR, RCC_CR_PLL3RDY))
2030 {
2031 HAL_RCCEx_GetPLL3ClockFreq(&pll3_clocks);
2032 frequency = pll3_clocks.PLL3_P_Frequency;
2033 }
2034 else
2035 {
2036 frequency = 0;
2037 }
2038 break;
2039 }
2040
2041 case RCC_SAI23CLKSOURCE_CLKP:
2042 {
2043
2044 ckpclocksource = __HAL_RCC_GET_CLKP_SOURCE();
2045
2046 if ((HAL_IS_BIT_SET(RCC->CR, RCC_CR_HSIRDY)) && (ckpclocksource == RCC_CLKPSOURCE_HSI))
2047 {
2048
2049 frequency = (HSI_VALUE >> (__HAL_RCC_GET_HSI_DIVIDER() >> 3));
2050 }
2051
2052 else if ((HAL_IS_BIT_SET(RCC->CR, RCC_CR_CSIRDY)) && (ckpclocksource == RCC_CLKPSOURCE_CSI))
2053 {
2054
2055 frequency = CSI_VALUE;
2056 }
2057
2058 else if ((HAL_IS_BIT_SET(RCC->CR, RCC_CR_HSERDY)) && (ckpclocksource == RCC_CLKPSOURCE_HSE))
2059 {
2060
2061 frequency = HSE_VALUE;
2062 }
2063
2064 else
2065 {
2066
2067 frequency = 0;
2068 }
2069
2070 break;
2071 }
2072
2073 case (RCC_SAI23CLKSOURCE_PIN):
2074 {
2075 frequency = EXTERNAL_CLOCK_VALUE;
2076 break;
2077 }
2078 default :
2079 {
2080 frequency = 0;
2081 break;
2082 }
2083 }
2084 }
2085 #endif
2086
2087 #if defined(RCC_CDCCIP1R_SAI2ASEL)
2088
2089 else if (PeriphClk == RCC_PERIPHCLK_SAI2A)
2090 {
2091 saiclocksource = __HAL_RCC_GET_SAI2A_SOURCE();
2092
2093 switch (saiclocksource)
2094 {
2095 case RCC_SAI2ACLKSOURCE_PLL:
2096 {
2097 if (HAL_IS_BIT_SET(RCC->CR, RCC_CR_PLL1RDY))
2098 {
2099 HAL_RCCEx_GetPLL1ClockFreq(&pll1_clocks);
2100 frequency = pll1_clocks.PLL1_Q_Frequency;
2101 }
2102 else
2103 {
2104 frequency = 0;
2105 }
2106 break;
2107 }
2108 case RCC_SAI2ACLKSOURCE_PLL2:
2109 {
2110 if (HAL_IS_BIT_SET(RCC->CR, RCC_CR_PLL2RDY))
2111 {
2112 HAL_RCCEx_GetPLL2ClockFreq(&pll2_clocks);
2113 frequency = pll2_clocks.PLL2_P_Frequency;
2114 }
2115 else
2116 {
2117 frequency = 0;
2118 }
2119 break;
2120 }
2121
2122 case RCC_SAI2ACLKSOURCE_PLL3:
2123 {
2124 if (HAL_IS_BIT_SET(RCC->CR, RCC_CR_PLL3RDY))
2125 {
2126 HAL_RCCEx_GetPLL3ClockFreq(&pll3_clocks);
2127 frequency = pll3_clocks.PLL3_P_Frequency;
2128 }
2129 else
2130 {
2131 frequency = 0;
2132 }
2133 break;
2134 }
2135
2136 case RCC_SAI2ACLKSOURCE_CLKP:
2137 {
2138
2139 ckpclocksource = __HAL_RCC_GET_CLKP_SOURCE();
2140
2141 if ((HAL_IS_BIT_SET(RCC->CR, RCC_CR_HSIRDY)) && (ckpclocksource == RCC_CLKPSOURCE_HSI))
2142 {
2143
2144 frequency = (HSI_VALUE >> (__HAL_RCC_GET_HSI_DIVIDER() >> 3));
2145 }
2146
2147 else if ((HAL_IS_BIT_SET(RCC->CR, RCC_CR_CSIRDY)) && (ckpclocksource == RCC_CLKPSOURCE_CSI))
2148 {
2149
2150 frequency = CSI_VALUE;
2151 }
2152
2153 else if ((HAL_IS_BIT_SET(RCC->CR, RCC_CR_HSERDY)) && (ckpclocksource == RCC_CLKPSOURCE_HSE))
2154 {
2155
2156 frequency = HSE_VALUE;
2157 }
2158
2159 else
2160 {
2161
2162 frequency = 0;
2163 }
2164
2165 break;
2166 }
2167
2168 case (RCC_SAI2ACLKSOURCE_PIN):
2169 {
2170 frequency = EXTERNAL_CLOCK_VALUE;
2171 break;
2172 }
2173
2174 default :
2175 {
2176 frequency = 0;
2177 break;
2178 }
2179 }
2180
2181 }
2182 #endif
2183
2184 #if defined(RCC_CDCCIP1R_SAI2BSEL_0)
2185 else if (PeriphClk == RCC_PERIPHCLK_SAI2B)
2186 {
2187
2188 saiclocksource = __HAL_RCC_GET_SAI2B_SOURCE();
2189
2190 switch (saiclocksource)
2191 {
2192 case RCC_SAI2BCLKSOURCE_PLL:
2193 {
2194 if (HAL_IS_BIT_SET(RCC->CR, RCC_CR_PLL1RDY))
2195 {
2196 HAL_RCCEx_GetPLL1ClockFreq(&pll1_clocks);
2197 frequency = pll1_clocks.PLL1_Q_Frequency;
2198 }
2199 else
2200 {
2201 frequency = 0;
2202 }
2203 break;
2204 }
2205 case RCC_SAI2BCLKSOURCE_PLL2:
2206 {
2207 if (HAL_IS_BIT_SET(RCC->CR, RCC_CR_PLL2RDY))
2208 {
2209 HAL_RCCEx_GetPLL2ClockFreq(&pll2_clocks);
2210 frequency = pll2_clocks.PLL2_P_Frequency;
2211 }
2212 else
2213 {
2214 frequency = 0;
2215 }
2216 break;
2217 }
2218
2219 case RCC_SAI2BCLKSOURCE_PLL3:
2220 {
2221 if (HAL_IS_BIT_SET(RCC->CR, RCC_CR_PLL3RDY))
2222 {
2223 HAL_RCCEx_GetPLL3ClockFreq(&pll3_clocks);
2224 frequency = pll3_clocks.PLL3_P_Frequency;
2225 }
2226 else
2227 {
2228 frequency = 0;
2229 }
2230 break;
2231 }
2232
2233 case RCC_SAI2BCLKSOURCE_CLKP:
2234 {
2235
2236 ckpclocksource = __HAL_RCC_GET_CLKP_SOURCE();
2237
2238 if ((HAL_IS_BIT_SET(RCC->CR, RCC_CR_HSIRDY)) && (ckpclocksource == RCC_CLKPSOURCE_HSI))
2239 {
2240
2241 frequency = (HSI_VALUE >> (__HAL_RCC_GET_HSI_DIVIDER() >> 3));
2242 }
2243
2244 else if ((HAL_IS_BIT_SET(RCC->CR, RCC_CR_CSIRDY)) && (ckpclocksource == RCC_CLKPSOURCE_CSI))
2245 {
2246
2247 frequency = CSI_VALUE;
2248 }
2249
2250 else if ((HAL_IS_BIT_SET(RCC->CR, RCC_CR_HSERDY)) && (ckpclocksource == RCC_CLKPSOURCE_HSE))
2251 {
2252
2253 frequency = HSE_VALUE;
2254 }
2255
2256 else
2257 {
2258
2259 frequency = 0;
2260 }
2261 break;
2262 }
2263
2264 case (RCC_SAI2BCLKSOURCE_PIN):
2265 {
2266 frequency = EXTERNAL_CLOCK_VALUE;
2267 break;
2268 }
2269
2270 default :
2271 {
2272 frequency = 0;
2273 break;
2274 }
2275 }
2276 }
2277 #endif
2278
2279 #if defined(SAI4)
2280 else if (PeriphClk == RCC_PERIPHCLK_SAI4A)
2281 {
2282
2283 saiclocksource = __HAL_RCC_GET_SAI4A_SOURCE();
2284
2285 switch (saiclocksource)
2286 {
2287 case RCC_SAI4ACLKSOURCE_PLL:
2288 {
2289 if (HAL_IS_BIT_SET(RCC->CR, RCC_CR_PLL1RDY))
2290 {
2291 HAL_RCCEx_GetPLL1ClockFreq(&pll1_clocks);
2292 frequency = pll1_clocks.PLL1_Q_Frequency;
2293 }
2294 else
2295 {
2296 frequency = 0;
2297 }
2298 break;
2299 }
2300 case RCC_SAI4ACLKSOURCE_PLL2:
2301 {
2302 if (HAL_IS_BIT_SET(RCC->CR, RCC_CR_PLL2RDY))
2303 {
2304 HAL_RCCEx_GetPLL2ClockFreq(&pll2_clocks);
2305 frequency = pll2_clocks.PLL2_P_Frequency;
2306 }
2307 else
2308 {
2309 frequency = 0;
2310 }
2311 break;
2312 }
2313
2314 case RCC_SAI4ACLKSOURCE_PLL3:
2315 {
2316 if (HAL_IS_BIT_SET(RCC->CR, RCC_CR_PLL3RDY))
2317 {
2318 HAL_RCCEx_GetPLL3ClockFreq(&pll3_clocks);
2319 frequency = pll3_clocks.PLL3_P_Frequency;
2320 }
2321 else
2322 {
2323 frequency = 0;
2324 }
2325 break;
2326 }
2327
2328 case RCC_SAI4ACLKSOURCE_CLKP:
2329 {
2330
2331 ckpclocksource = __HAL_RCC_GET_CLKP_SOURCE();
2332
2333 if ((HAL_IS_BIT_SET(RCC->CR, RCC_CR_HSIRDY)) && (ckpclocksource == RCC_CLKPSOURCE_HSI))
2334 {
2335
2336 frequency = (HSI_VALUE >> (__HAL_RCC_GET_HSI_DIVIDER() >> 3));
2337 }
2338
2339 else if ((HAL_IS_BIT_SET(RCC->CR, RCC_CR_CSIRDY)) && (ckpclocksource == RCC_CLKPSOURCE_CSI))
2340 {
2341
2342 frequency = CSI_VALUE;
2343 }
2344
2345 else if ((HAL_IS_BIT_SET(RCC->CR, RCC_CR_HSERDY)) && (ckpclocksource == RCC_CLKPSOURCE_HSE))
2346 {
2347
2348 frequency = HSE_VALUE;
2349 }
2350
2351 else
2352 {
2353
2354 frequency = 0;
2355 }
2356
2357 break;
2358 }
2359
2360 case RCC_SAI4ACLKSOURCE_PIN:
2361 {
2362 frequency = EXTERNAL_CLOCK_VALUE;
2363 break;
2364 }
2365
2366 default :
2367 {
2368 frequency = 0;
2369 break;
2370 }
2371 }
2372 }
2373
2374 else if (PeriphClk == RCC_PERIPHCLK_SAI4B)
2375 {
2376
2377 saiclocksource = __HAL_RCC_GET_SAI4B_SOURCE();
2378
2379 switch (saiclocksource)
2380 {
2381 case RCC_SAI4BCLKSOURCE_PLL:
2382 {
2383 if (HAL_IS_BIT_SET(RCC->CR, RCC_CR_PLL1RDY))
2384 {
2385 HAL_RCCEx_GetPLL1ClockFreq(&pll1_clocks);
2386 frequency = pll1_clocks.PLL1_Q_Frequency;
2387 }
2388 else
2389 {
2390 frequency = 0;
2391 }
2392 break;
2393 }
2394 case RCC_SAI4BCLKSOURCE_PLL2:
2395 {
2396 if (HAL_IS_BIT_SET(RCC->CR, RCC_CR_PLL2RDY))
2397 {
2398 HAL_RCCEx_GetPLL2ClockFreq(&pll2_clocks);
2399 frequency = pll2_clocks.PLL2_P_Frequency;
2400 }
2401 else
2402 {
2403 frequency = 0;
2404 }
2405 break;
2406 }
2407
2408 case RCC_SAI4BCLKSOURCE_PLL3:
2409 {
2410 if (HAL_IS_BIT_SET(RCC->CR, RCC_CR_PLL3RDY))
2411 {
2412 HAL_RCCEx_GetPLL3ClockFreq(&pll3_clocks);
2413 frequency = pll3_clocks.PLL3_P_Frequency;
2414 }
2415 else
2416 {
2417 frequency = 0;
2418 }
2419 break;
2420 }
2421
2422 case RCC_SAI4BCLKSOURCE_CLKP:
2423 {
2424
2425 ckpclocksource = __HAL_RCC_GET_CLKP_SOURCE();
2426
2427 if ((HAL_IS_BIT_SET(RCC->CR, RCC_CR_HSIRDY)) && (ckpclocksource == RCC_CLKPSOURCE_HSI))
2428 {
2429
2430 frequency = (HSI_VALUE >> (__HAL_RCC_GET_HSI_DIVIDER() >> 3));
2431 }
2432
2433 else if ((HAL_IS_BIT_SET(RCC->CR, RCC_CR_CSIRDY)) && (ckpclocksource == RCC_CLKPSOURCE_CSI))
2434 {
2435
2436 frequency = CSI_VALUE;
2437 }
2438
2439 else if ((HAL_IS_BIT_SET(RCC->CR, RCC_CR_HSERDY)) && (ckpclocksource == RCC_CLKPSOURCE_HSE))
2440 {
2441
2442 frequency = HSE_VALUE;
2443 }
2444
2445 else
2446 {
2447
2448 frequency = 0;
2449 }
2450
2451 break;
2452 }
2453
2454 case RCC_SAI4BCLKSOURCE_PIN:
2455 {
2456 frequency = EXTERNAL_CLOCK_VALUE;
2457 break;
2458 }
2459
2460 default :
2461 {
2462 frequency = 0;
2463 break;
2464 }
2465 }
2466 }
2467 #endif
2468 else if (PeriphClk == RCC_PERIPHCLK_SPI123)
2469 {
2470
2471 srcclk = __HAL_RCC_GET_SPI123_SOURCE();
2472
2473 switch (srcclk)
2474 {
2475 case RCC_SPI123CLKSOURCE_PLL:
2476 {
2477 if (HAL_IS_BIT_SET(RCC->CR, RCC_CR_PLL1RDY))
2478 {
2479 HAL_RCCEx_GetPLL1ClockFreq(&pll1_clocks);
2480 frequency = pll1_clocks.PLL1_Q_Frequency;
2481 }
2482 else
2483 {
2484 frequency = 0;
2485 }
2486 break;
2487 }
2488 case RCC_SPI123CLKSOURCE_PLL2:
2489 {
2490 if (HAL_IS_BIT_SET(RCC->CR, RCC_CR_PLL2RDY))
2491 {
2492 HAL_RCCEx_GetPLL2ClockFreq(&pll2_clocks);
2493 frequency = pll2_clocks.PLL2_P_Frequency;
2494 }
2495 else
2496 {
2497 frequency = 0;
2498 }
2499 break;
2500 }
2501
2502 case RCC_SPI123CLKSOURCE_PLL3:
2503 {
2504 if (HAL_IS_BIT_SET(RCC->CR, RCC_CR_PLL3RDY))
2505 {
2506 HAL_RCCEx_GetPLL3ClockFreq(&pll3_clocks);
2507 frequency = pll3_clocks.PLL3_P_Frequency;
2508 }
2509 else
2510 {
2511 frequency = 0;
2512 }
2513 break;
2514 }
2515
2516 case RCC_SPI123CLKSOURCE_CLKP:
2517 {
2518
2519 ckpclocksource = __HAL_RCC_GET_CLKP_SOURCE();
2520
2521 if ((HAL_IS_BIT_SET(RCC->CR, RCC_CR_HSIRDY)) && (ckpclocksource == RCC_CLKPSOURCE_HSI))
2522 {
2523
2524 frequency = (HSI_VALUE >> (__HAL_RCC_GET_HSI_DIVIDER() >> 3));
2525 }
2526
2527 else if ((HAL_IS_BIT_SET(RCC->CR, RCC_CR_CSIRDY)) && (ckpclocksource == RCC_CLKPSOURCE_CSI))
2528 {
2529
2530 frequency = CSI_VALUE;
2531 }
2532
2533 else if ((HAL_IS_BIT_SET(RCC->CR, RCC_CR_HSERDY)) && (ckpclocksource == RCC_CLKPSOURCE_HSE))
2534 {
2535
2536 frequency = HSE_VALUE;
2537 }
2538
2539 else
2540 {
2541
2542 frequency = 0;
2543 }
2544
2545 break;
2546 }
2547
2548 case (RCC_SPI123CLKSOURCE_PIN):
2549 {
2550 frequency = EXTERNAL_CLOCK_VALUE;
2551 break;
2552 }
2553 default :
2554 {
2555 frequency = 0;
2556 break;
2557 }
2558 }
2559 }
2560 else if (PeriphClk == RCC_PERIPHCLK_SPI45)
2561 {
2562
2563 srcclk = __HAL_RCC_GET_SPI45_SOURCE();
2564 switch (srcclk)
2565 {
2566 case RCC_SPI45CLKSOURCE_PCLK2:
2567 {
2568 frequency = HAL_RCC_GetPCLK1Freq();
2569 break;
2570 }
2571 case RCC_SPI45CLKSOURCE_PLL2:
2572 {
2573 if (HAL_IS_BIT_SET(RCC->CR, RCC_CR_PLL2RDY))
2574 {
2575 HAL_RCCEx_GetPLL2ClockFreq(&pll2_clocks);
2576 frequency = pll2_clocks.PLL2_Q_Frequency;
2577 }
2578 else
2579 {
2580 frequency = 0;
2581 }
2582 break;
2583 }
2584 case RCC_SPI45CLKSOURCE_PLL3:
2585 {
2586 if (HAL_IS_BIT_SET(RCC->CR, RCC_CR_PLL3RDY))
2587 {
2588 HAL_RCCEx_GetPLL3ClockFreq(&pll3_clocks);
2589 frequency = pll3_clocks.PLL3_Q_Frequency;
2590 }
2591 else
2592 {
2593 frequency = 0;
2594 }
2595 break;
2596 }
2597 case RCC_SPI45CLKSOURCE_HSI:
2598 {
2599 if (HAL_IS_BIT_SET(RCC->CR, RCC_CR_HSIRDY))
2600 {
2601 frequency = (HSI_VALUE >> (__HAL_RCC_GET_HSI_DIVIDER() >> 3));
2602 }
2603 else
2604 {
2605 frequency = 0;
2606 }
2607 break;
2608 }
2609 case RCC_SPI45CLKSOURCE_CSI:
2610 {
2611 if (HAL_IS_BIT_SET(RCC->CR, RCC_CR_CSIRDY))
2612 {
2613 frequency = CSI_VALUE;
2614 }
2615 else
2616 {
2617 frequency = 0;
2618 }
2619 break;
2620 }
2621 case RCC_SPI45CLKSOURCE_HSE:
2622 {
2623 if (HAL_IS_BIT_SET(RCC->CR, RCC_CR_HSERDY))
2624 {
2625 frequency = HSE_VALUE;
2626 }
2627 else
2628 {
2629 frequency = 0;
2630 }
2631 break;
2632 }
2633 default :
2634 {
2635 frequency = 0;
2636 break;
2637 }
2638 }
2639 }
2640 else if (PeriphClk == RCC_PERIPHCLK_ADC)
2641 {
2642
2643 srcclk = __HAL_RCC_GET_ADC_SOURCE();
2644
2645 switch (srcclk)
2646 {
2647 case RCC_ADCCLKSOURCE_PLL2:
2648 {
2649 if (HAL_IS_BIT_SET(RCC->CR, RCC_CR_PLL2RDY))
2650 {
2651 HAL_RCCEx_GetPLL2ClockFreq(&pll2_clocks);
2652 frequency = pll2_clocks.PLL2_P_Frequency;
2653 }
2654 else
2655 {
2656 frequency = 0;
2657 }
2658 break;
2659 }
2660 case RCC_ADCCLKSOURCE_PLL3:
2661 {
2662 if (HAL_IS_BIT_SET(RCC->CR, RCC_CR_PLL3RDY))
2663 {
2664 HAL_RCCEx_GetPLL3ClockFreq(&pll3_clocks);
2665 frequency = pll3_clocks.PLL3_R_Frequency;
2666 }
2667 else
2668 {
2669 frequency = 0;
2670 }
2671 break;
2672 }
2673
2674 case RCC_ADCCLKSOURCE_CLKP:
2675 {
2676
2677 ckpclocksource = __HAL_RCC_GET_CLKP_SOURCE();
2678
2679 if ((HAL_IS_BIT_SET(RCC->CR, RCC_CR_HSIRDY)) && (ckpclocksource == RCC_CLKPSOURCE_HSI))
2680 {
2681
2682 frequency = (HSI_VALUE >> (__HAL_RCC_GET_HSI_DIVIDER() >> 3));
2683 }
2684
2685 else if ((HAL_IS_BIT_SET(RCC->CR, RCC_CR_CSIRDY)) && (ckpclocksource == RCC_CLKPSOURCE_CSI))
2686 {
2687
2688 frequency = CSI_VALUE;
2689 }
2690
2691 else if ((HAL_IS_BIT_SET(RCC->CR, RCC_CR_HSERDY)) && (ckpclocksource == RCC_CLKPSOURCE_HSE))
2692 {
2693
2694 frequency = HSE_VALUE;
2695 }
2696
2697 else
2698 {
2699
2700 frequency = 0;
2701 }
2702
2703 break;
2704 }
2705
2706 default :
2707 {
2708 frequency = 0;
2709 break;
2710 }
2711 }
2712 }
2713 else if (PeriphClk == RCC_PERIPHCLK_SDMMC)
2714 {
2715
2716 srcclk = __HAL_RCC_GET_SDMMC_SOURCE();
2717
2718 switch (srcclk)
2719 {
2720 case RCC_SDMMCCLKSOURCE_PLL:
2721 {
2722 if (HAL_IS_BIT_SET(RCC->CR, RCC_CR_PLL1RDY))
2723 {
2724 HAL_RCCEx_GetPLL1ClockFreq(&pll1_clocks);
2725 frequency = pll1_clocks.PLL1_Q_Frequency;
2726 }
2727 else
2728 {
2729 frequency = 0;
2730 }
2731 break;
2732 }
2733 case RCC_SDMMCCLKSOURCE_PLL2:
2734 {
2735 if (HAL_IS_BIT_SET(RCC->CR, RCC_CR_PLL2RDY))
2736 {
2737 HAL_RCCEx_GetPLL2ClockFreq(&pll2_clocks);
2738 frequency = pll2_clocks.PLL2_R_Frequency;
2739 }
2740 else
2741 {
2742 frequency = 0;
2743 }
2744 break;
2745 }
2746
2747 default :
2748 {
2749 frequency = 0;
2750 break;
2751 }
2752 }
2753 }
2754 else if (PeriphClk == RCC_PERIPHCLK_SPI6)
2755 {
2756
2757 srcclk = __HAL_RCC_GET_SPI6_SOURCE();
2758
2759 switch (srcclk)
2760 {
2761 case RCC_SPI6CLKSOURCE_D3PCLK1:
2762 {
2763 frequency = HAL_RCCEx_GetD3PCLK1Freq();
2764 break;
2765 }
2766 case RCC_SPI6CLKSOURCE_PLL2:
2767 {
2768 if (HAL_IS_BIT_SET(RCC->CR, RCC_CR_PLL2RDY))
2769 {
2770 HAL_RCCEx_GetPLL2ClockFreq(&pll2_clocks);
2771 frequency = pll2_clocks.PLL2_Q_Frequency;
2772 }
2773 else
2774 {
2775 frequency = 0;
2776 }
2777 break;
2778 }
2779 case RCC_SPI6CLKSOURCE_PLL3:
2780 {
2781 if (HAL_IS_BIT_SET(RCC->CR, RCC_CR_PLL3RDY))
2782 {
2783 HAL_RCCEx_GetPLL3ClockFreq(&pll3_clocks);
2784 frequency = pll3_clocks.PLL3_Q_Frequency;
2785 }
2786 else
2787 {
2788 frequency = 0;
2789 }
2790 break;
2791 }
2792 case RCC_SPI6CLKSOURCE_HSI:
2793 {
2794 if (HAL_IS_BIT_SET(RCC->CR, RCC_CR_HSIRDY))
2795 {
2796 frequency = (HSI_VALUE >> (__HAL_RCC_GET_HSI_DIVIDER() >> 3));
2797 }
2798 else
2799 {
2800 frequency = 0;
2801 }
2802 break;
2803 }
2804 case RCC_SPI6CLKSOURCE_CSI:
2805 {
2806 if (HAL_IS_BIT_SET(RCC->CR, RCC_CR_CSIRDY))
2807 {
2808 frequency = CSI_VALUE;
2809 }
2810 else
2811 {
2812 frequency = 0;
2813 }
2814 break;
2815 }
2816 case RCC_SPI6CLKSOURCE_HSE:
2817 {
2818 if (HAL_IS_BIT_SET(RCC->CR, RCC_CR_HSERDY))
2819 {
2820 frequency = HSE_VALUE;
2821 }
2822 else
2823 {
2824 frequency = 0;
2825 }
2826 break;
2827 }
2828 #if defined(RCC_SPI6CLKSOURCE_PIN)
2829 case RCC_SPI6CLKSOURCE_PIN:
2830 {
2831 frequency = EXTERNAL_CLOCK_VALUE;
2832 break;
2833 }
2834 #endif
2835 default :
2836 {
2837 frequency = 0;
2838 break;
2839 }
2840 }
2841 }
2842 else if (PeriphClk == RCC_PERIPHCLK_FDCAN)
2843 {
2844
2845 srcclk = __HAL_RCC_GET_FDCAN_SOURCE();
2846
2847 switch (srcclk)
2848 {
2849 case RCC_FDCANCLKSOURCE_HSE:
2850 {
2851 if (HAL_IS_BIT_SET(RCC->CR, RCC_CR_HSERDY))
2852 {
2853 frequency = HSE_VALUE;
2854 }
2855 else
2856 {
2857 frequency = 0;
2858 }
2859 break;
2860 }
2861 case RCC_FDCANCLKSOURCE_PLL:
2862 {
2863 if (HAL_IS_BIT_SET(RCC->CR, RCC_CR_PLL1RDY))
2864 {
2865 HAL_RCCEx_GetPLL1ClockFreq(&pll1_clocks);
2866 frequency = pll1_clocks.PLL1_Q_Frequency;
2867 }
2868 else
2869 {
2870 frequency = 0;
2871 }
2872 break;
2873 }
2874 case RCC_FDCANCLKSOURCE_PLL2:
2875 {
2876 if (HAL_IS_BIT_SET(RCC->CR, RCC_CR_PLL2RDY))
2877 {
2878 HAL_RCCEx_GetPLL2ClockFreq(&pll2_clocks);
2879 frequency = pll2_clocks.PLL2_Q_Frequency;
2880 }
2881 else
2882 {
2883 frequency = 0;
2884 }
2885 break;
2886 }
2887 default :
2888 {
2889 frequency = 0;
2890 break;
2891 }
2892 }
2893 }
2894 else
2895 {
2896 frequency = 0;
2897 }
2898
2899 return frequency;
2900 }
2901
2902
2903
2904
2905
2906
2907
2908
2909 uint32_t HAL_RCCEx_GetD1PCLK1Freq(void)
2910 {
2911 #if defined(RCC_D1CFGR_D1PPRE)
2912
2913 return (HAL_RCC_GetHCLKFreq() >> (D1CorePrescTable[(RCC->D1CFGR & RCC_D1CFGR_D1PPRE) >> RCC_D1CFGR_D1PPRE_Pos] & 0x1FU));
2914 #else
2915
2916 return (HAL_RCC_GetHCLKFreq() >> (D1CorePrescTable[(RCC->CDCFGR1 & RCC_CDCFGR1_CDPPRE) >> RCC_CDCFGR1_CDPPRE_Pos] & 0x1FU));
2917 #endif
2918 }
2919
2920
2921
2922
2923
2924
2925
2926 uint32_t HAL_RCCEx_GetD3PCLK1Freq(void)
2927 {
2928 #if defined(RCC_D3CFGR_D3PPRE)
2929
2930 return (HAL_RCC_GetHCLKFreq() >> (D1CorePrescTable[(RCC->D3CFGR & RCC_D3CFGR_D3PPRE) >> RCC_D3CFGR_D3PPRE_Pos] & 0x1FU));
2931 #else
2932
2933 return (HAL_RCC_GetHCLKFreq() >> (D1CorePrescTable[(RCC->SRDCFGR & RCC_SRDCFGR_SRDPPRE) >> RCC_SRDCFGR_SRDPPRE_Pos] & 0x1FU));
2934 #endif
2935 }
2936
2937
2938
2939
2940
2941
2942
2943
2944
2945
2946
2947
2948
2949
2950 void HAL_RCCEx_GetPLL2ClockFreq(PLL2_ClocksTypeDef *PLL2_Clocks)
2951 {
2952 uint32_t pllsource, pll2m, pll2fracen, hsivalue;
2953 float_t fracn2, pll2vco;
2954
2955
2956
2957
2958 pllsource = (RCC->PLLCKSELR & RCC_PLLCKSELR_PLLSRC);
2959 pll2m = ((RCC->PLLCKSELR & RCC_PLLCKSELR_DIVM2) >> 12);
2960 pll2fracen = (RCC->PLLCFGR & RCC_PLLCFGR_PLL2FRACEN) >> RCC_PLLCFGR_PLL2FRACEN_Pos;
2961 fracn2 = (float_t)(uint32_t)(pll2fracen * ((RCC->PLL2FRACR & RCC_PLL2FRACR_FRACN2) >> 3));
2962
2963 if (pll2m != 0U)
2964 {
2965 switch (pllsource)
2966 {
2967
2968 case RCC_PLLSOURCE_HSI:
2969
2970 if (__HAL_RCC_GET_FLAG(RCC_FLAG_HSIDIV) != 0U)
2971 {
2972 hsivalue = (HSI_VALUE >> (__HAL_RCC_GET_HSI_DIVIDER() >> 3));
2973 pll2vco = ((float_t)hsivalue / (float_t)pll2m) * ((float_t)(uint32_t)(RCC->PLL2DIVR & RCC_PLL2DIVR_N2) + (fracn2 / (float_t)0x2000) + (float_t)1);
2974 }
2975 else
2976 {
2977 pll2vco = ((float_t)HSI_VALUE / (float_t)pll2m) * ((float_t)(uint32_t)(RCC->PLL2DIVR & RCC_PLL2DIVR_N2) + (fracn2 / (float_t)0x2000) + (float_t)1);
2978 }
2979 break;
2980
2981 case RCC_PLLSOURCE_CSI:
2982 pll2vco = ((float_t)CSI_VALUE / (float_t)pll2m) * ((float_t)(uint32_t)(RCC->PLL2DIVR & RCC_PLL2DIVR_N2) + (fracn2 / (float_t)0x2000) + (float_t)1);
2983 break;
2984
2985 case RCC_PLLSOURCE_HSE:
2986 pll2vco = ((float_t)HSE_VALUE / (float_t)pll2m) * ((float_t)(uint32_t)(RCC->PLL2DIVR & RCC_PLL2DIVR_N2) + (fracn2 / (float_t)0x2000) + (float_t)1);
2987 break;
2988
2989 default:
2990 pll2vco = ((float_t)CSI_VALUE / (float_t)pll2m) * ((float_t)(uint32_t)(RCC->PLL2DIVR & RCC_PLL2DIVR_N2) + (fracn2 / (float_t)0x2000) + (float_t)1);
2991 break;
2992 }
2993 PLL2_Clocks->PLL2_P_Frequency = (uint32_t)(float_t)(pll2vco / ((float_t)(uint32_t)((RCC->PLL2DIVR & RCC_PLL2DIVR_P2) >> 9) + (float_t)1)) ;
2994 PLL2_Clocks->PLL2_Q_Frequency = (uint32_t)(float_t)(pll2vco / ((float_t)(uint32_t)((RCC->PLL2DIVR & RCC_PLL2DIVR_Q2) >> 16) + (float_t)1)) ;
2995 PLL2_Clocks->PLL2_R_Frequency = (uint32_t)(float_t)(pll2vco / ((float_t)(uint32_t)((RCC->PLL2DIVR & RCC_PLL2DIVR_R2) >> 24) + (float_t)1)) ;
2996 }
2997 else
2998 {
2999 PLL2_Clocks->PLL2_P_Frequency = 0U;
3000 PLL2_Clocks->PLL2_Q_Frequency = 0U;
3001 PLL2_Clocks->PLL2_R_Frequency = 0U;
3002 }
3003 }
3004
3005
3006
3007
3008
3009
3010
3011
3012
3013
3014
3015
3016
3017
3018
3019 void HAL_RCCEx_GetPLL3ClockFreq(PLL3_ClocksTypeDef *PLL3_Clocks)
3020 {
3021 uint32_t pllsource, pll3m, pll3fracen, hsivalue;
3022 float_t fracn3, pll3vco;
3023
3024
3025
3026
3027 pllsource = (RCC->PLLCKSELR & RCC_PLLCKSELR_PLLSRC);
3028 pll3m = ((RCC->PLLCKSELR & RCC_PLLCKSELR_DIVM3) >> 20) ;
3029 pll3fracen = (RCC->PLLCFGR & RCC_PLLCFGR_PLL3FRACEN) >> RCC_PLLCFGR_PLL3FRACEN_Pos;
3030 fracn3 = (float_t)(uint32_t)(pll3fracen * ((RCC->PLL3FRACR & RCC_PLL3FRACR_FRACN3) >> 3));
3031
3032 if (pll3m != 0U)
3033 {
3034 switch (pllsource)
3035 {
3036 case RCC_PLLSOURCE_HSI:
3037
3038 if (__HAL_RCC_GET_FLAG(RCC_FLAG_HSIDIV) != 0U)
3039 {
3040 hsivalue = (HSI_VALUE >> (__HAL_RCC_GET_HSI_DIVIDER() >> 3));
3041 pll3vco = ((float_t)hsivalue / (float_t)pll3m) * ((float_t)(uint32_t)(RCC->PLL3DIVR & RCC_PLL3DIVR_N3) + (fracn3 / (float_t)0x2000) + (float_t)1);
3042 }
3043 else
3044 {
3045 pll3vco = ((float_t)HSI_VALUE / (float_t)pll3m) * ((float_t)(uint32_t)(RCC->PLL3DIVR & RCC_PLL3DIVR_N3) + (fracn3 / (float_t)0x2000) + (float_t)1);
3046 }
3047 break;
3048 case RCC_PLLSOURCE_CSI:
3049 pll3vco = ((float_t)CSI_VALUE / (float_t)pll3m) * ((float_t)(uint32_t)(RCC->PLL3DIVR & RCC_PLL3DIVR_N3) + (fracn3 / (float_t)0x2000) + (float_t)1);
3050 break;
3051
3052 case RCC_PLLSOURCE_HSE:
3053 pll3vco = ((float_t)HSE_VALUE / (float_t)pll3m) * ((float_t)(uint32_t)(RCC->PLL3DIVR & RCC_PLL3DIVR_N3) + (fracn3 / (float_t)0x2000) + (float_t)1);
3054 break;
3055
3056 default:
3057 pll3vco = ((float_t)CSI_VALUE / (float_t)pll3m) * ((float_t)(uint32_t)(RCC->PLL3DIVR & RCC_PLL3DIVR_N3) + (fracn3 / (float_t)0x2000) + (float_t)1);
3058 break;
3059 }
3060 PLL3_Clocks->PLL3_P_Frequency = (uint32_t)(float_t)(pll3vco / ((float_t)(uint32_t)((RCC->PLL3DIVR & RCC_PLL3DIVR_P3) >> 9) + (float_t)1)) ;
3061 PLL3_Clocks->PLL3_Q_Frequency = (uint32_t)(float_t)(pll3vco / ((float_t)(uint32_t)((RCC->PLL3DIVR & RCC_PLL3DIVR_Q3) >> 16) + (float_t)1)) ;
3062 PLL3_Clocks->PLL3_R_Frequency = (uint32_t)(float_t)(pll3vco / ((float_t)(uint32_t)((RCC->PLL3DIVR & RCC_PLL3DIVR_R3) >> 24) + (float_t)1)) ;
3063 }
3064 else
3065 {
3066 PLL3_Clocks->PLL3_P_Frequency = 0U;
3067 PLL3_Clocks->PLL3_Q_Frequency = 0U;
3068 PLL3_Clocks->PLL3_R_Frequency = 0U;
3069 }
3070
3071 }
3072
3073
3074
3075
3076
3077
3078
3079
3080
3081
3082
3083
3084
3085
3086
3087 void HAL_RCCEx_GetPLL1ClockFreq(PLL1_ClocksTypeDef *PLL1_Clocks)
3088 {
3089 uint32_t pllsource, pll1m, pll1fracen, hsivalue;
3090 float_t fracn1, pll1vco;
3091
3092 pllsource = (RCC->PLLCKSELR & RCC_PLLCKSELR_PLLSRC);
3093 pll1m = ((RCC->PLLCKSELR & RCC_PLLCKSELR_DIVM1) >> 4);
3094 pll1fracen = RCC->PLLCFGR & RCC_PLLCFGR_PLL1FRACEN;
3095 fracn1 = (float_t)(uint32_t)(pll1fracen * ((RCC->PLL1FRACR & RCC_PLL1FRACR_FRACN1) >> 3));
3096
3097 if (pll1m != 0U)
3098 {
3099 switch (pllsource)
3100 {
3101
3102 case RCC_PLLSOURCE_HSI:
3103
3104 if (__HAL_RCC_GET_FLAG(RCC_FLAG_HSIDIV) != 0U)
3105 {
3106 hsivalue = (HSI_VALUE >> (__HAL_RCC_GET_HSI_DIVIDER() >> 3));
3107 pll1vco = ((float_t)hsivalue / (float_t)pll1m) * ((float_t)(uint32_t)(RCC->PLL1DIVR & RCC_PLL1DIVR_N1) + (fracn1 / (float_t)0x2000) + (float_t)1);
3108 }
3109 else
3110 {
3111 pll1vco = ((float_t)HSI_VALUE / (float_t)pll1m) * ((float_t)(uint32_t)(RCC->PLL1DIVR & RCC_PLL1DIVR_N1) + (fracn1 / (float_t)0x2000) + (float_t)1);
3112 }
3113 break;
3114 case RCC_PLLSOURCE_CSI:
3115 pll1vco = ((float_t)CSI_VALUE / (float_t)pll1m) * ((float_t)(uint32_t)(RCC->PLL1DIVR & RCC_PLL1DIVR_N1) + (fracn1 / (float_t)0x2000) + (float_t)1);
3116 break;
3117
3118 case RCC_PLLSOURCE_HSE:
3119 pll1vco = ((float_t)HSE_VALUE / (float_t)pll1m) * ((float_t)(uint32_t)(RCC->PLL1DIVR & RCC_PLL1DIVR_N1) + (fracn1 / (float_t)0x2000) + (float_t)1);
3120 break;
3121
3122 default:
3123 pll1vco = ((float_t)HSI_VALUE / (float_t)pll1m) * ((float_t)(uint32_t)(RCC->PLL1DIVR & RCC_PLL1DIVR_N1) + (fracn1 / (float_t)0x2000) + (float_t)1);
3124 break;
3125 }
3126
3127 PLL1_Clocks->PLL1_P_Frequency = (uint32_t)(float_t)(pll1vco / ((float_t)(uint32_t)((RCC->PLL1DIVR & RCC_PLL1DIVR_P1) >> 9) + (float_t)1)) ;
3128 PLL1_Clocks->PLL1_Q_Frequency = (uint32_t)(float_t)(pll1vco / ((float_t)(uint32_t)((RCC->PLL1DIVR & RCC_PLL1DIVR_Q1) >> 16) + (float_t)1)) ;
3129 PLL1_Clocks->PLL1_R_Frequency = (uint32_t)(float_t)(pll1vco / ((float_t)(uint32_t)((RCC->PLL1DIVR & RCC_PLL1DIVR_R1) >> 24) + (float_t)1)) ;
3130 }
3131 else
3132 {
3133 PLL1_Clocks->PLL1_P_Frequency = 0U;
3134 PLL1_Clocks->PLL1_Q_Frequency = 0U;
3135 PLL1_Clocks->PLL1_R_Frequency = 0U;
3136 }
3137
3138 }
3139
3140
3141
3142
3143
3144
3145
3146
3147
3148 uint32_t HAL_RCCEx_GetD1SysClockFreq(void)
3149 {
3150 uint32_t common_system_clock;
3151
3152 #if defined(RCC_D1CFGR_D1CPRE)
3153 common_system_clock = HAL_RCC_GetSysClockFreq() >> (D1CorePrescTable[(RCC->D1CFGR & RCC_D1CFGR_D1CPRE) >> RCC_D1CFGR_D1CPRE_Pos] & 0x1FU);
3154 #else
3155 common_system_clock = HAL_RCC_GetSysClockFreq() >> (D1CorePrescTable[(RCC->CDCFGR1 & RCC_CDCFGR1_CDCPRE) >> RCC_CDCFGR1_CDCPRE_Pos] & 0x1FU);
3156 #endif
3157
3158
3159 #if defined(RCC_D1CFGR_HPRE)
3160 SystemD2Clock = (common_system_clock >> ((D1CorePrescTable[(RCC->D1CFGR & RCC_D1CFGR_HPRE) >> RCC_D1CFGR_HPRE_Pos]) & 0x1FU));
3161 #else
3162 SystemD2Clock = (common_system_clock >> ((D1CorePrescTable[(RCC->CDCFGR1 & RCC_CDCFGR1_HPRE) >> RCC_CDCFGR1_HPRE_Pos]) & 0x1FU));
3163 #endif
3164
3165 #if defined(DUAL_CORE) && defined(CORE_CM4)
3166 SystemCoreClock = SystemD2Clock;
3167 #else
3168 SystemCoreClock = common_system_clock;
3169 #endif
3170
3171 return common_system_clock;
3172 }
3173
3174
3175
3176
3177
3178
3179
3180
3181
3182
3183
3184
3185
3186
3187
3188
3189 void HAL_RCCEx_EnableLSECSS(void)
3190 {
3191 SET_BIT(RCC->BDCR, RCC_BDCR_LSECSSON) ;
3192 }
3193
3194
3195
3196
3197
3198
3199 void HAL_RCCEx_DisableLSECSS(void)
3200 {
3201 CLEAR_BIT(RCC->BDCR, RCC_BDCR_LSECSSON) ;
3202
3203 __HAL_RCC_DISABLE_IT(RCC_IT_LSECSS);
3204 }
3205
3206
3207
3208
3209
3210
3211 void HAL_RCCEx_EnableLSECSS_IT(void)
3212 {
3213
3214 SET_BIT(RCC->BDCR, RCC_BDCR_LSECSSON) ;
3215
3216
3217 __HAL_RCC_ENABLE_IT(RCC_IT_LSECSS);
3218
3219
3220 #if defined(DUAL_CORE) && defined(CORE_CM4)
3221 __HAL_RCC_C2_LSECSS_EXTI_ENABLE_IT();
3222 #else
3223 __HAL_RCC_LSECSS_EXTI_ENABLE_IT();
3224 #endif
3225 __HAL_RCC_LSECSS_EXTI_ENABLE_RISING_EDGE();
3226 }
3227
3228
3229
3230
3231
3232
3233
3234
3235
3236
3237
3238 void HAL_RCCEx_WakeUpStopCLKConfig(uint32_t WakeUpClk)
3239 {
3240 assert_param(IS_RCC_STOP_WAKEUPCLOCK(WakeUpClk));
3241
3242 __HAL_RCC_WAKEUPSTOP_CLK_CONFIG(WakeUpClk);
3243 }
3244
3245
3246
3247
3248
3249
3250
3251
3252
3253 void HAL_RCCEx_KerWakeUpStopCLKConfig(uint32_t WakeUpClk)
3254 {
3255 assert_param(IS_RCC_STOP_KERWAKEUPCLOCK(WakeUpClk));
3256
3257 __HAL_RCC_KERWAKEUPSTOP_CLK_CONFIG(WakeUpClk);
3258 }
3259
3260 #if defined(DUAL_CORE)
3261
3262
3263
3264
3265
3266
3267
3268
3269
3270
3271 void HAL_RCCEx_EnableBootCore(uint32_t RCC_BootCx)
3272 {
3273 assert_param(IS_RCC_BOOT_CORE(RCC_BootCx));
3274 SET_BIT(RCC->GCR, RCC_BootCx) ;
3275 }
3276
3277 #endif
3278
3279 #if defined(DUAL_CORE)
3280
3281
3282
3283
3284
3285
3286
3287
3288
3289
3290 void HAL_RCCEx_WWDGxSysResetConfig(uint32_t RCC_WWDGx)
3291 {
3292 assert_param(IS_RCC_SCOPE_WWDG(RCC_WWDGx));
3293 SET_BIT(RCC->GCR, RCC_WWDGx) ;
3294 }
3295
3296 #else
3297 #if defined(RCC_GCR_WW1RSC)
3298
3299
3300
3301
3302
3303
3304
3305
3306
3307 void HAL_RCCEx_WWDGxSysResetConfig(uint32_t RCC_WWDGx)
3308 {
3309 assert_param(IS_RCC_SCOPE_WWDG(RCC_WWDGx));
3310 SET_BIT(RCC->GCR, RCC_WWDGx) ;
3311 }
3312 #endif
3313 #endif
3314
3315
3316
3317
3318
3319
3320
3321
3322
3323
3324
3325
3326
3327
3328
3329
3330
3331
3332
3333
3334
3335
3336
3337
3338
3339
3340
3341
3342
3343
3344
3345
3346
3347
3348
3349
3350
3351
3352
3353
3354
3355
3356
3357
3358
3359
3360
3361
3362
3363
3364
3365
3366
3367
3368
3369
3370
3371
3372
3373
3374
3375
3376
3377
3378
3379
3380
3381
3382
3383
3384
3385
3386
3387
3388
3389 void HAL_RCCEx_CRSConfig(RCC_CRSInitTypeDef *pInit)
3390 {
3391 uint32_t value;
3392
3393
3394 assert_param(IS_RCC_CRS_SYNC_DIV(pInit->Prescaler));
3395 assert_param(IS_RCC_CRS_SYNC_SOURCE(pInit->Source));
3396 assert_param(IS_RCC_CRS_SYNC_POLARITY(pInit->Polarity));
3397 assert_param(IS_RCC_CRS_RELOADVALUE(pInit->ReloadValue));
3398 assert_param(IS_RCC_CRS_ERRORLIMIT(pInit->ErrorLimitValue));
3399 assert_param(IS_RCC_CRS_HSI48CALIBRATION(pInit->HSI48CalibrationValue));
3400
3401
3402
3403
3404 __HAL_RCC_CRS_FORCE_RESET();
3405 __HAL_RCC_CRS_RELEASE_RESET();
3406
3407
3408
3409
3410 if ((HAL_GetREVID() <= REV_ID_Y) && (pInit->Source == RCC_CRS_SYNC_SOURCE_USB2))
3411 {
3412
3413 value = (pInit->Prescaler | RCC_CRS_SYNC_SOURCE_PIN | pInit->Polarity);
3414 }
3415 else
3416 {
3417 value = (pInit->Prescaler | pInit->Source | pInit->Polarity);
3418 }
3419
3420 value |= pInit->ReloadValue;
3421
3422 value |= (pInit->ErrorLimitValue << CRS_CFGR_FELIM_Pos);
3423 WRITE_REG(CRS->CFGR, value);
3424
3425
3426
3427 MODIFY_REG(CRS->CR, CRS_CR_TRIM, (pInit->HSI48CalibrationValue << CRS_CR_TRIM_Pos));
3428
3429
3430
3431
3432 SET_BIT(CRS->CR, CRS_CR_AUTOTRIMEN | CRS_CR_CEN);
3433 }
3434
3435
3436
3437
3438
3439 void HAL_RCCEx_CRSSoftwareSynchronizationGenerate(void)
3440 {
3441 SET_BIT(CRS->CR, CRS_CR_SWSYNC);
3442 }
3443
3444
3445
3446
3447
3448
3449 void HAL_RCCEx_CRSGetSynchronizationInfo(RCC_CRSSynchroInfoTypeDef *pSynchroInfo)
3450 {
3451
3452 assert_param(pSynchroInfo != (void *)NULL);
3453
3454
3455 pSynchroInfo->ReloadValue = (uint32_t)(READ_BIT(CRS->CFGR, CRS_CFGR_RELOAD));
3456
3457
3458 pSynchroInfo->HSI48CalibrationValue = (uint32_t)(READ_BIT(CRS->CR, CRS_CR_TRIM) >> CRS_CR_TRIM_Pos);
3459
3460
3461 pSynchroInfo->FreqErrorCapture = (uint32_t)(READ_BIT(CRS->ISR, CRS_ISR_FECAP) >> CRS_ISR_FECAP_Pos);
3462
3463
3464 pSynchroInfo->FreqErrorDirection = (uint32_t)(READ_BIT(CRS->ISR, CRS_ISR_FEDIR));
3465 }
3466
3467
3468
3469
3470
3471
3472
3473
3474
3475
3476
3477
3478
3479
3480
3481
3482 uint32_t HAL_RCCEx_CRSWaitSynchronization(uint32_t Timeout)
3483 {
3484 uint32_t crsstatus = RCC_CRS_NONE;
3485 uint32_t tickstart;
3486
3487
3488 tickstart = HAL_GetTick();
3489
3490
3491 do
3492 {
3493 if (Timeout != HAL_MAX_DELAY)
3494 {
3495 if (((HAL_GetTick() - tickstart) > Timeout) || (Timeout == 0U))
3496 {
3497 crsstatus = RCC_CRS_TIMEOUT;
3498 }
3499 }
3500
3501 if (__HAL_RCC_CRS_GET_FLAG(RCC_CRS_FLAG_SYNCOK))
3502 {
3503
3504 crsstatus |= RCC_CRS_SYNCOK;
3505
3506
3507 __HAL_RCC_CRS_CLEAR_FLAG(RCC_CRS_FLAG_SYNCOK);
3508 }
3509
3510
3511 if (__HAL_RCC_CRS_GET_FLAG(RCC_CRS_FLAG_SYNCWARN))
3512 {
3513
3514 crsstatus |= RCC_CRS_SYNCWARN;
3515
3516
3517 __HAL_RCC_CRS_CLEAR_FLAG(RCC_CRS_FLAG_SYNCWARN);
3518 }
3519
3520
3521 if (__HAL_RCC_CRS_GET_FLAG(RCC_CRS_FLAG_TRIMOVF))
3522 {
3523
3524 crsstatus |= RCC_CRS_TRIMOVF;
3525
3526
3527 __HAL_RCC_CRS_CLEAR_FLAG(RCC_CRS_FLAG_TRIMOVF);
3528 }
3529
3530
3531 if (__HAL_RCC_CRS_GET_FLAG(RCC_CRS_FLAG_SYNCERR))
3532 {
3533
3534 crsstatus |= RCC_CRS_SYNCERR;
3535
3536
3537 __HAL_RCC_CRS_CLEAR_FLAG(RCC_CRS_FLAG_SYNCERR);
3538 }
3539
3540
3541 if (__HAL_RCC_CRS_GET_FLAG(RCC_CRS_FLAG_SYNCMISS))
3542 {
3543
3544 crsstatus |= RCC_CRS_SYNCMISS;
3545
3546
3547 __HAL_RCC_CRS_CLEAR_FLAG(RCC_CRS_FLAG_SYNCMISS);
3548 }
3549
3550
3551 if (__HAL_RCC_CRS_GET_FLAG(RCC_CRS_FLAG_ESYNC))
3552 {
3553
3554 __HAL_RCC_CRS_CLEAR_FLAG(RCC_CRS_FLAG_ESYNC);
3555 }
3556 }
3557 while (RCC_CRS_NONE == crsstatus);
3558
3559 return crsstatus;
3560 }
3561
3562
3563
3564
3565
3566 void HAL_RCCEx_CRS_IRQHandler(void)
3567 {
3568 uint32_t crserror = RCC_CRS_NONE;
3569
3570 uint32_t itflags = READ_REG(CRS->ISR);
3571 uint32_t itsources = READ_REG(CRS->CR);
3572
3573
3574 if (((itflags & RCC_CRS_FLAG_SYNCOK) != 0U) && ((itsources & RCC_CRS_IT_SYNCOK) != 0U))
3575 {
3576
3577 WRITE_REG(CRS->ICR, CRS_ICR_SYNCOKC);
3578
3579
3580 HAL_RCCEx_CRS_SyncOkCallback();
3581 }
3582
3583 else if (((itflags & RCC_CRS_FLAG_SYNCWARN) != 0U) && ((itsources & RCC_CRS_IT_SYNCWARN) != 0U))
3584 {
3585
3586 WRITE_REG(CRS->ICR, CRS_ICR_SYNCWARNC);
3587
3588
3589 HAL_RCCEx_CRS_SyncWarnCallback();
3590 }
3591
3592 else if (((itflags & RCC_CRS_FLAG_ESYNC) != 0U) && ((itsources & RCC_CRS_IT_ESYNC) != 0U))
3593 {
3594
3595 WRITE_REG(CRS->ICR, CRS_ICR_ESYNCC);
3596
3597
3598 HAL_RCCEx_CRS_ExpectedSyncCallback();
3599 }
3600
3601 else
3602 {
3603 if (((itflags & RCC_CRS_FLAG_ERR) != 0U) && ((itsources & RCC_CRS_IT_ERR) != 0U))
3604 {
3605 if ((itflags & RCC_CRS_FLAG_SYNCERR) != 0U)
3606 {
3607 crserror |= RCC_CRS_SYNCERR;
3608 }
3609 if ((itflags & RCC_CRS_FLAG_SYNCMISS) != 0U)
3610 {
3611 crserror |= RCC_CRS_SYNCMISS;
3612 }
3613 if ((itflags & RCC_CRS_FLAG_TRIMOVF) != 0U)
3614 {
3615 crserror |= RCC_CRS_TRIMOVF;
3616 }
3617
3618
3619 WRITE_REG(CRS->ICR, CRS_ICR_ERRC);
3620
3621
3622 HAL_RCCEx_CRS_ErrorCallback(crserror);
3623 }
3624 }
3625 }
3626
3627
3628
3629
3630
3631 __weak void HAL_RCCEx_CRS_SyncOkCallback(void)
3632 {
3633
3634
3635
3636 }
3637
3638
3639
3640
3641
3642 __weak void HAL_RCCEx_CRS_SyncWarnCallback(void)
3643 {
3644
3645
3646
3647 }
3648
3649
3650
3651
3652
3653 __weak void HAL_RCCEx_CRS_ExpectedSyncCallback(void)
3654 {
3655
3656
3657
3658 }
3659
3660
3661
3662
3663
3664
3665
3666
3667
3668
3669 __weak void HAL_RCCEx_CRS_ErrorCallback(uint32_t Error)
3670 {
3671
3672 UNUSED(Error);
3673
3674
3675
3676
3677 }
3678
3679
3680
3681
3682
3683
3684
3685
3686
3687
3688
3689
3690
3691
3692
3693
3694
3695
3696
3697
3698
3699
3700
3701 static HAL_StatusTypeDef RCCEx_PLL2_Config(RCC_PLL2InitTypeDef *pll2, uint32_t Divider)
3702 {
3703
3704 uint32_t tickstart;
3705 HAL_StatusTypeDef status = HAL_OK;
3706 assert_param(IS_RCC_PLL2M_VALUE(pll2->PLL2M));
3707 assert_param(IS_RCC_PLL2N_VALUE(pll2->PLL2N));
3708 assert_param(IS_RCC_PLL2P_VALUE(pll2->PLL2P));
3709 assert_param(IS_RCC_PLL2R_VALUE(pll2->PLL2R));
3710 assert_param(IS_RCC_PLL2Q_VALUE(pll2->PLL2Q));
3711 assert_param(IS_RCC_PLL2RGE_VALUE(pll2->PLL2RGE));
3712 assert_param(IS_RCC_PLL2VCO_VALUE(pll2->PLL2VCOSEL));
3713 assert_param(IS_RCC_PLLFRACN_VALUE(pll2->PLL2FRACN));
3714
3715
3716 if (__HAL_RCC_GET_PLL_OSCSOURCE() == RCC_PLLSOURCE_NONE)
3717 {
3718 return HAL_ERROR;
3719 }
3720
3721
3722 else
3723 {
3724
3725 __HAL_RCC_PLL2_DISABLE();
3726
3727
3728 tickstart = HAL_GetTick();
3729
3730
3731 while (__HAL_RCC_GET_FLAG(RCC_FLAG_PLL2RDY) != 0U)
3732 {
3733 if ((HAL_GetTick() - tickstart) > PLL2_TIMEOUT_VALUE)
3734 {
3735 return HAL_TIMEOUT;
3736 }
3737 }
3738
3739
3740 __HAL_RCC_PLL2_CONFIG(pll2->PLL2M,
3741 pll2->PLL2N,
3742 pll2->PLL2P,
3743 pll2->PLL2Q,
3744 pll2->PLL2R);
3745
3746
3747 __HAL_RCC_PLL2_VCIRANGE(pll2->PLL2RGE) ;
3748
3749
3750 __HAL_RCC_PLL2_VCORANGE(pll2->PLL2VCOSEL) ;
3751
3752
3753 __HAL_RCC_PLL2FRACN_DISABLE();
3754
3755
3756 __HAL_RCC_PLL2FRACN_CONFIG(pll2->PLL2FRACN);
3757
3758
3759 __HAL_RCC_PLL2FRACN_ENABLE();
3760
3761
3762 if (Divider == DIVIDER_P_UPDATE)
3763 {
3764 __HAL_RCC_PLL2CLKOUT_ENABLE(RCC_PLL2_DIVP);
3765 }
3766 else if (Divider == DIVIDER_Q_UPDATE)
3767 {
3768 __HAL_RCC_PLL2CLKOUT_ENABLE(RCC_PLL2_DIVQ);
3769 }
3770 else
3771 {
3772 __HAL_RCC_PLL2CLKOUT_ENABLE(RCC_PLL2_DIVR);
3773 }
3774
3775
3776 __HAL_RCC_PLL2_ENABLE();
3777
3778
3779 tickstart = HAL_GetTick();
3780
3781
3782 while (__HAL_RCC_GET_FLAG(RCC_FLAG_PLL2RDY) == 0U)
3783 {
3784 if ((HAL_GetTick() - tickstart) > PLL2_TIMEOUT_VALUE)
3785 {
3786 return HAL_TIMEOUT;
3787 }
3788 }
3789
3790 }
3791
3792
3793 return status;
3794 }
3795
3796
3797
3798
3799
3800
3801
3802
3803
3804
3805
3806 static HAL_StatusTypeDef RCCEx_PLL3_Config(RCC_PLL3InitTypeDef *pll3, uint32_t Divider)
3807 {
3808 uint32_t tickstart;
3809 HAL_StatusTypeDef status = HAL_OK;
3810 assert_param(IS_RCC_PLL3M_VALUE(pll3->PLL3M));
3811 assert_param(IS_RCC_PLL3N_VALUE(pll3->PLL3N));
3812 assert_param(IS_RCC_PLL3P_VALUE(pll3->PLL3P));
3813 assert_param(IS_RCC_PLL3R_VALUE(pll3->PLL3R));
3814 assert_param(IS_RCC_PLL3Q_VALUE(pll3->PLL3Q));
3815 assert_param(IS_RCC_PLL3RGE_VALUE(pll3->PLL3RGE));
3816 assert_param(IS_RCC_PLL3VCO_VALUE(pll3->PLL3VCOSEL));
3817 assert_param(IS_RCC_PLLFRACN_VALUE(pll3->PLL3FRACN));
3818
3819
3820 if (__HAL_RCC_GET_PLL_OSCSOURCE() == RCC_PLLSOURCE_NONE)
3821 {
3822 return HAL_ERROR;
3823 }
3824
3825
3826 else
3827 {
3828
3829 __HAL_RCC_PLL3_DISABLE();
3830
3831
3832 tickstart = HAL_GetTick();
3833
3834 while (__HAL_RCC_GET_FLAG(RCC_FLAG_PLL3RDY) != 0U)
3835 {
3836 if ((HAL_GetTick() - tickstart) > PLL3_TIMEOUT_VALUE)
3837 {
3838 return HAL_TIMEOUT;
3839 }
3840 }
3841
3842
3843 __HAL_RCC_PLL3_CONFIG(pll3->PLL3M,
3844 pll3->PLL3N,
3845 pll3->PLL3P,
3846 pll3->PLL3Q,
3847 pll3->PLL3R);
3848
3849
3850 __HAL_RCC_PLL3_VCIRANGE(pll3->PLL3RGE) ;
3851
3852
3853 __HAL_RCC_PLL3_VCORANGE(pll3->PLL3VCOSEL) ;
3854
3855
3856 __HAL_RCC_PLL3FRACN_DISABLE();
3857
3858
3859 __HAL_RCC_PLL3FRACN_CONFIG(pll3->PLL3FRACN);
3860
3861
3862 __HAL_RCC_PLL3FRACN_ENABLE();
3863
3864
3865 if (Divider == DIVIDER_P_UPDATE)
3866 {
3867 __HAL_RCC_PLL3CLKOUT_ENABLE(RCC_PLL3_DIVP);
3868 }
3869 else if (Divider == DIVIDER_Q_UPDATE)
3870 {
3871 __HAL_RCC_PLL3CLKOUT_ENABLE(RCC_PLL3_DIVQ);
3872 }
3873 else
3874 {
3875 __HAL_RCC_PLL3CLKOUT_ENABLE(RCC_PLL3_DIVR);
3876 }
3877
3878
3879 __HAL_RCC_PLL3_ENABLE();
3880
3881
3882 tickstart = HAL_GetTick();
3883
3884
3885 while (__HAL_RCC_GET_FLAG(RCC_FLAG_PLL3RDY) == 0U)
3886 {
3887 if ((HAL_GetTick() - tickstart) > PLL3_TIMEOUT_VALUE)
3888 {
3889 return HAL_TIMEOUT;
3890 }
3891 }
3892
3893 }
3894
3895
3896 return status;
3897 }
3898
3899
3900
3901
3902
3903 void HAL_RCCEx_LSECSS_IRQHandler(void)
3904 {
3905
3906 if (__HAL_RCC_GET_IT(RCC_IT_LSECSS))
3907 {
3908
3909
3910 __HAL_RCC_CLEAR_IT(RCC_IT_LSECSS);
3911
3912
3913 HAL_RCCEx_LSECSS_Callback();
3914
3915 }
3916 }
3917
3918
3919
3920
3921
3922 __weak void HAL_RCCEx_LSECSS_Callback(void)
3923 {
3924
3925
3926
3927 }
3928
3929
3930
3931
3932
3933
3934
3935 #endif
3936
3937
3938
3939
3940
3941
3942
3943