| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314131513161317131813191320132113221323132413251326132713281329133013311332133313341335133613371338133913401341134213431344134513461347134813491350135113521353135413551356135713581359136013611362136313641365136613671368136913701371137213731374137513761377137813791380138113821383138413851386138713881389139013911392139313941395139613971398139914001401140214031404140514061407140814091410141114121413141414151416141714181419142014211422142314241425142614271428142914301431143214331434143514361437143814391440144114421443144414451446144714481449145014511452145314541455145614571458145914601461146214631464146514661467146814691470147114721473147414751476147714781479148014811482148314841485148614871488148914901491149214931494149514961497149814991500150115021503150415051506150715081509151015111512151315141515151615171518151915201521152215231524152515261527152815291530153115321533153415351536153715381539154015411542154315441545154615471548154915501551155215531554155515561557155815591560156115621563156415651566156715681569157015711572157315741575157615771578157915801581 |
- /**
- ******************************************************************************
- * @file stm32f3xx_hal_rcc_ex.c
- * @author MCD Application Team
- * @brief Extended RCC HAL module driver.
- * This file provides firmware functions to manage the following
- * functionalities RCC extension peripheral:
- * + Extended Peripheral Control functions
- *
- ******************************************************************************
- * @attention
- *
- * Copyright (c) 2016 STMicroelectronics.
- * All rights reserved.
- *
- * This software is licensed under terms that can be found in the LICENSE file in
- * the root directory of this software component.
- * If no LICENSE file comes with this software, it is provided AS-IS.
- ******************************************************************************
- */
- /* Includes ------------------------------------------------------------------*/
- #include "stm32f3xx_hal.h"
- /** @addtogroup STM32F3xx_HAL_Driver
- * @{
- */
- #ifdef HAL_RCC_MODULE_ENABLED
- /** @defgroup RCCEx RCCEx
- * @brief RCC Extension HAL module driver.
- * @{
- */
- /* Private typedef -----------------------------------------------------------*/
- /* Private define ------------------------------------------------------------*/
- /* Private macro -------------------------------------------------------------*/
- /** @defgroup RCCEx_Private_Macros RCCEx Private Macros
- * @{
- */
- /**
- * @}
- */
- /* Private variables ---------------------------------------------------------*/
- /* Private function prototypes -----------------------------------------------*/
- /* Private functions ---------------------------------------------------------*/
- #if defined(RCC_CFGR2_ADC1PRES) || defined(RCC_CFGR2_ADCPRE12) || defined(RCC_CFGR2_ADCPRE34) || defined(RCC_CFGR_USBPRE) \
- || defined(RCC_CFGR3_TIM1SW) || defined(RCC_CFGR3_TIM2SW) || defined(RCC_CFGR3_TIM8SW) || defined(RCC_CFGR3_TIM15SW) \
- || defined(RCC_CFGR3_TIM16SW) || defined(RCC_CFGR3_TIM17SW) || defined(RCC_CFGR3_TIM20SW) || defined(RCC_CFGR3_TIM34SW) \
- || defined(RCC_CFGR3_HRTIM1SW)
- /** @defgroup RCCEx_Private_Functions RCCEx Private Functions
- * @{
- */
- static uint32_t RCC_GetPLLCLKFreq(void);
- /**
- * @}
- */
- #endif /* RCC_CFGR2_ADC1PRES || RCC_CFGR2_ADCPRExx || RCC_CFGR3_TIMxSW || RCC_CFGR3_HRTIM1SW || RCC_CFGR_USBPRE */
- /** @defgroup RCCEx_Exported_Functions RCCEx Exported Functions
- * @{
- */
- /** @defgroup RCCEx_Exported_Functions_Group1 Extended Peripheral Control functions
- * @brief Extended Peripheral Control functions
- *
- @verbatim
- ===============================================================================
- ##### Extended Peripheral Control functions #####
- ===============================================================================
- [..]
- This subsection provides a set of functions allowing to control the RCC Clocks
- frequencies.
- [..]
- (@) Important note: Care must be taken when HAL_RCCEx_PeriphCLKConfig() is used to
- select the RTC clock source; in this case the Backup domain will be reset in
- order to modify the RTC Clock source, as consequence RTC registers (including
- the backup registers) are set to their reset values.
-
- @endverbatim
- * @{
- */
- /**
- * @brief Initializes the RCC extended peripherals clocks according to the specified
- * parameters in the RCC_PeriphCLKInitTypeDef.
- * @param PeriphClkInit pointer to an RCC_PeriphCLKInitTypeDef structure that
- * contains the configuration information for the Extended Peripherals clocks
- * (ADC, CEC, I2C, I2S, SDADC, HRTIM, TIM, USART, RTC and USB).
- *
- * @note Care must be taken when HAL_RCCEx_PeriphCLKConfig() is used to select
- * the RTC clock source; in this case the Backup domain will be reset in
- * order to modify the RTC Clock source, as consequence RTC registers (including
- * the backup registers) and RCC_BDCR register are set to their reset values.
- *
- * @note When the TIMx clock source is APB clock, so the TIMx clock is APB clock or
- * APB clock x 2 depending on the APB prescaler.
- * When the TIMx clock source is PLL clock, so the TIMx clock is PLL clock x 2.
- *
- * @retval HAL status
- */
- HAL_StatusTypeDef HAL_RCCEx_PeriphCLKConfig(RCC_PeriphCLKInitTypeDef *PeriphClkInit)
- {
- uint32_t tickstart = 0U;
- uint32_t temp_reg = 0U;
- FlagStatus pwrclkchanged = RESET;
-
- /* Check the parameters */
- assert_param(IS_RCC_PERIPHCLOCK(PeriphClkInit->PeriphClockSelection));
-
- /*---------------------------- RTC configuration -------------------------------*/
- if(((PeriphClkInit->PeriphClockSelection) & RCC_PERIPHCLK_RTC) == (RCC_PERIPHCLK_RTC))
- {
- /* check for RTC Parameters used to output RTCCLK */
- assert_param(IS_RCC_RTCCLKSOURCE(PeriphClkInit->RTCClockSelection));
- /* As soon as function is called to change RTC clock source, activation of the
- power domain is done. */
- /* Requires to enable write access to Backup Domain of necessary */
- if(__HAL_RCC_PWR_IS_CLK_DISABLED())
- {
- __HAL_RCC_PWR_CLK_ENABLE();
- pwrclkchanged = SET;
- }
-
- if(HAL_IS_BIT_CLR(PWR->CR, PWR_CR_DBP))
- {
- /* Enable write access to Backup domain */
- SET_BIT(PWR->CR, PWR_CR_DBP);
-
- /* Wait for Backup domain Write protection disable */
- tickstart = HAL_GetTick();
-
- while(HAL_IS_BIT_CLR(PWR->CR, PWR_CR_DBP))
- {
- if((HAL_GetTick() - tickstart) > RCC_DBP_TIMEOUT_VALUE)
- {
- return HAL_TIMEOUT;
- }
- }
- }
-
- /* Reset the Backup domain only if the RTC Clock source selection is modified from reset value */
- temp_reg = (RCC->BDCR & RCC_BDCR_RTCSEL);
- if((temp_reg != 0x00000000U) && (temp_reg != (PeriphClkInit->RTCClockSelection & RCC_BDCR_RTCSEL)))
- {
- /* Store the content of BDCR register before the reset of Backup Domain */
- temp_reg = (RCC->BDCR & ~(RCC_BDCR_RTCSEL));
- /* RTC Clock selection can be changed only if the Backup Domain is reset */
- __HAL_RCC_BACKUPRESET_FORCE();
- __HAL_RCC_BACKUPRESET_RELEASE();
- /* Restore the Content of BDCR register */
- RCC->BDCR = temp_reg;
-
- /* Wait for LSERDY if LSE was enabled */
- if (HAL_IS_BIT_SET(temp_reg, RCC_BDCR_LSEON))
- {
- /* Get Start Tick */
- tickstart = HAL_GetTick();
-
- /* Wait till LSE is ready */
- while(__HAL_RCC_GET_FLAG(RCC_FLAG_LSERDY) == RESET)
- {
- if((HAL_GetTick() - tickstart) > RCC_LSE_TIMEOUT_VALUE)
- {
- return HAL_TIMEOUT;
- }
- }
- }
- }
- __HAL_RCC_RTC_CONFIG(PeriphClkInit->RTCClockSelection);
- /* Require to disable power clock if necessary */
- if(pwrclkchanged == SET)
- {
- __HAL_RCC_PWR_CLK_DISABLE();
- }
- }
- /*------------------------------- USART1 Configuration ------------------------*/
- if(((PeriphClkInit->PeriphClockSelection) & RCC_PERIPHCLK_USART1) == RCC_PERIPHCLK_USART1)
- {
- /* Check the parameters */
- assert_param(IS_RCC_USART1CLKSOURCE(PeriphClkInit->Usart1ClockSelection));
-
- /* Configure the USART1 clock source */
- __HAL_RCC_USART1_CONFIG(PeriphClkInit->Usart1ClockSelection);
- }
- #if defined(RCC_CFGR3_USART2SW)
- /*----------------------------- USART2 Configuration --------------------------*/
- if(((PeriphClkInit->PeriphClockSelection) & RCC_PERIPHCLK_USART2) == RCC_PERIPHCLK_USART2)
- {
- /* Check the parameters */
- assert_param(IS_RCC_USART2CLKSOURCE(PeriphClkInit->Usart2ClockSelection));
-
- /* Configure the USART2 clock source */
- __HAL_RCC_USART2_CONFIG(PeriphClkInit->Usart2ClockSelection);
- }
- #endif /* RCC_CFGR3_USART2SW */
- #if defined(RCC_CFGR3_USART3SW)
- /*------------------------------ USART3 Configuration ------------------------*/
- if(((PeriphClkInit->PeriphClockSelection) & RCC_PERIPHCLK_USART3) == RCC_PERIPHCLK_USART3)
- {
- /* Check the parameters */
- assert_param(IS_RCC_USART3CLKSOURCE(PeriphClkInit->Usart3ClockSelection));
-
- /* Configure the USART3 clock source */
- __HAL_RCC_USART3_CONFIG(PeriphClkInit->Usart3ClockSelection);
- }
- #endif /* RCC_CFGR3_USART3SW */
- /*------------------------------ I2C1 Configuration ------------------------*/
- if(((PeriphClkInit->PeriphClockSelection) & RCC_PERIPHCLK_I2C1) == RCC_PERIPHCLK_I2C1)
- {
- /* Check the parameters */
- assert_param(IS_RCC_I2C1CLKSOURCE(PeriphClkInit->I2c1ClockSelection));
-
- /* Configure the I2C1 clock source */
- __HAL_RCC_I2C1_CONFIG(PeriphClkInit->I2c1ClockSelection);
- }
- #if defined(STM32F302xE) || defined(STM32F303xE)\
- || defined(STM32F302xC) || defined(STM32F303xC)\
- || defined(STM32F302x8) \
- || defined(STM32F373xC)
- /*------------------------------ USB Configuration ------------------------*/
- if(((PeriphClkInit->PeriphClockSelection) & RCC_PERIPHCLK_USB) == RCC_PERIPHCLK_USB)
- {
- /* Check the parameters */
- assert_param(IS_RCC_USBCLKSOURCE(PeriphClkInit->USBClockSelection));
-
- /* Configure the USB clock source */
- __HAL_RCC_USB_CONFIG(PeriphClkInit->USBClockSelection);
- }
- #endif /* STM32F302xE || STM32F303xE || */
- /* STM32F302xC || STM32F303xC || */
- /* STM32F302x8 || */
- /* STM32F373xC */
- #if defined(STM32F302xE) || defined(STM32F303xE) || defined(STM32F398xx)\
- || defined(STM32F302xC) || defined(STM32F303xC) || defined(STM32F358xx)\
- || defined(STM32F301x8) || defined(STM32F302x8) || defined(STM32F318xx)\
- || defined(STM32F373xC) || defined(STM32F378xx)
- /*------------------------------ I2C2 Configuration ------------------------*/
- if(((PeriphClkInit->PeriphClockSelection) & RCC_PERIPHCLK_I2C2) == RCC_PERIPHCLK_I2C2)
- {
- /* Check the parameters */
- assert_param(IS_RCC_I2C2CLKSOURCE(PeriphClkInit->I2c2ClockSelection));
-
- /* Configure the I2C2 clock source */
- __HAL_RCC_I2C2_CONFIG(PeriphClkInit->I2c2ClockSelection);
- }
- #endif /* STM32F302xE || STM32F303xE || STM32F398xx || */
- /* STM32F302xC || STM32F303xC || STM32F358xx || */
- /* STM32F301x8 || STM32F302x8 || STM32F318xx || */
- /* STM32F373xC || STM32F378xx */
-
- #if defined(STM32F302xE) || defined(STM32F303xE) || defined(STM32F398xx)\
- || defined(STM32F301x8) || defined(STM32F302x8) || defined(STM32F318xx)
- /*------------------------------ I2C3 Configuration ------------------------*/
- if(((PeriphClkInit->PeriphClockSelection) & RCC_PERIPHCLK_I2C3) == RCC_PERIPHCLK_I2C3)
- {
- /* Check the parameters */
- assert_param(IS_RCC_I2C3CLKSOURCE(PeriphClkInit->I2c3ClockSelection));
-
- /* Configure the I2C3 clock source */
- __HAL_RCC_I2C3_CONFIG(PeriphClkInit->I2c3ClockSelection);
- }
- #endif /* STM32F302xE || STM32F303xE || STM32F398xx || */
- /* STM32F301x8 || STM32F302x8 || STM32F318xx */
-
- #if defined(STM32F302xE) || defined(STM32F303xE) || defined(STM32F398xx)\
- || defined(STM32F302xC) || defined(STM32F303xC) || defined(STM32F358xx)
- /*------------------------------ UART4 Configuration ------------------------*/
- if(((PeriphClkInit->PeriphClockSelection) & RCC_PERIPHCLK_UART4) == RCC_PERIPHCLK_UART4)
- {
- /* Check the parameters */
- assert_param(IS_RCC_UART4CLKSOURCE(PeriphClkInit->Uart4ClockSelection));
-
- /* Configure the UART4 clock source */
- __HAL_RCC_UART4_CONFIG(PeriphClkInit->Uart4ClockSelection);
- }
- /*------------------------------ UART5 Configuration ------------------------*/
- if(((PeriphClkInit->PeriphClockSelection) & RCC_PERIPHCLK_UART5) == RCC_PERIPHCLK_UART5)
- {
- /* Check the parameters */
- assert_param(IS_RCC_UART5CLKSOURCE(PeriphClkInit->Uart5ClockSelection));
-
- /* Configure the UART5 clock source */
- __HAL_RCC_UART5_CONFIG(PeriphClkInit->Uart5ClockSelection);
- }
- #endif /* STM32F302xE || STM32F303xE || STM32F398xx || */
- /* STM32F302xC || STM32F303xC || STM32F358xx */
- #if defined(STM32F302xE) || defined(STM32F303xE) || defined(STM32F398xx)\
- || defined(STM32F302xC) || defined(STM32F303xC) || defined(STM32F358xx)\
- || defined(STM32F301x8) || defined(STM32F302x8) || defined(STM32F318xx)
- /*------------------------------ I2S Configuration ------------------------*/
- if(((PeriphClkInit->PeriphClockSelection) & RCC_PERIPHCLK_I2S) == RCC_PERIPHCLK_I2S)
- {
- /* Check the parameters */
- assert_param(IS_RCC_I2SCLKSOURCE(PeriphClkInit->I2sClockSelection));
-
- /* Configure the I2S clock source */
- __HAL_RCC_I2S_CONFIG(PeriphClkInit->I2sClockSelection);
- }
- #endif /* STM32F302xE || STM32F303xE || STM32F398xx || */
- /* STM32F302xC || STM32F303xC || STM32F358xx || */
- /* STM32F301x8 || STM32F302x8 || STM32F318xx */
-
- #if defined(STM32F301x8) || defined(STM32F302x8) || defined(STM32F318xx)
-
- /*------------------------------ ADC1 clock Configuration ------------------*/
- if(((PeriphClkInit->PeriphClockSelection) & RCC_PERIPHCLK_ADC1) == RCC_PERIPHCLK_ADC1)
- {
- /* Check the parameters */
- assert_param(IS_RCC_ADC1PLLCLK_DIV(PeriphClkInit->Adc1ClockSelection));
-
- /* Configure the ADC1 clock source */
- __HAL_RCC_ADC1_CONFIG(PeriphClkInit->Adc1ClockSelection);
- }
- #endif /* STM32F301x8 || STM32F302x8 || STM32F318xx */
-
- #if defined(STM32F302xE) || defined(STM32F303xE) || defined(STM32F398xx)\
- || defined(STM32F302xC) || defined(STM32F303xC) || defined(STM32F358xx)\
- || defined(STM32F303x8) || defined(STM32F334x8) || defined(STM32F328xx)
-
- /*------------------------------ ADC1 & ADC2 clock Configuration -------------*/
- if(((PeriphClkInit->PeriphClockSelection) & RCC_PERIPHCLK_ADC12) == RCC_PERIPHCLK_ADC12)
- {
- /* Check the parameters */
- assert_param(IS_RCC_ADC12PLLCLK_DIV(PeriphClkInit->Adc12ClockSelection));
-
- /* Configure the ADC12 clock source */
- __HAL_RCC_ADC12_CONFIG(PeriphClkInit->Adc12ClockSelection);
- }
- #endif /* STM32F302xE || STM32F303xE || STM32F398xx || */
- /* STM32F302xC || STM32F303xC || STM32F358xx || */
- /* STM32F303x8 || STM32F334x8 || STM32F328xx */
-
- #if defined(STM32F303xE) || defined(STM32F398xx)\
- || defined(STM32F303xC) || defined(STM32F358xx)
- /*------------------------------ ADC3 & ADC4 clock Configuration -------------*/
- if(((PeriphClkInit->PeriphClockSelection) & RCC_PERIPHCLK_ADC34) == RCC_PERIPHCLK_ADC34)
- {
- /* Check the parameters */
- assert_param(IS_RCC_ADC34PLLCLK_DIV(PeriphClkInit->Adc34ClockSelection));
-
- /* Configure the ADC34 clock source */
- __HAL_RCC_ADC34_CONFIG(PeriphClkInit->Adc34ClockSelection);
- }
- #endif /* STM32F303xE || STM32F398xx || */
- /* STM32F303xC || STM32F358xx */
- #if defined(STM32F373xC) || defined(STM32F378xx)
-
- /*------------------------------ ADC1 clock Configuration ------------------*/
- if(((PeriphClkInit->PeriphClockSelection) & RCC_PERIPHCLK_ADC1) == RCC_PERIPHCLK_ADC1)
- {
- /* Check the parameters */
- assert_param(IS_RCC_ADC1PCLK2_DIV(PeriphClkInit->Adc1ClockSelection));
-
- /* Configure the ADC1 clock source */
- __HAL_RCC_ADC1_CONFIG(PeriphClkInit->Adc1ClockSelection);
- }
- #endif /* STM32F373xC || STM32F378xx */
- #if defined(STM32F302xE) || defined(STM32F303xE) || defined(STM32F398xx)\
- || defined(STM32F302xC) || defined(STM32F303xC) || defined(STM32F358xx)\
- || defined(STM32F303x8) || defined(STM32F334x8) || defined(STM32F328xx)\
- || defined(STM32F301x8) || defined(STM32F302x8) || defined(STM32F318xx)
- /*------------------------------ TIM1 clock Configuration ----------------*/
- if(((PeriphClkInit->PeriphClockSelection) & RCC_PERIPHCLK_TIM1) == RCC_PERIPHCLK_TIM1)
- {
- /* Check the parameters */
- assert_param(IS_RCC_TIM1CLKSOURCE(PeriphClkInit->Tim1ClockSelection));
-
- /* Configure the TIM1 clock source */
- __HAL_RCC_TIM1_CONFIG(PeriphClkInit->Tim1ClockSelection);
- }
- #endif /* STM32F302xE || STM32F303xE || STM32F398xx || */
- /* STM32F302xC || STM32F303xC || STM32F358xx || */
- /* STM32F303x8 || STM32F334x8 || STM32F328xx || */
- /* STM32F301x8 || STM32F302x8 || STM32F318xx */
-
- #if defined(STM32F303xE) || defined(STM32F398xx)\
- || defined(STM32F303xC) || defined(STM32F358xx)
- /*------------------------------ TIM8 clock Configuration ----------------*/
- if(((PeriphClkInit->PeriphClockSelection) & RCC_PERIPHCLK_TIM8) == RCC_PERIPHCLK_TIM8)
- {
- /* Check the parameters */
- assert_param(IS_RCC_TIM8CLKSOURCE(PeriphClkInit->Tim8ClockSelection));
-
- /* Configure the TIM8 clock source */
- __HAL_RCC_TIM8_CONFIG(PeriphClkInit->Tim8ClockSelection);
- }
- #endif /* STM32F303xE || STM32F398xx || */
- /* STM32F303xC || STM32F358xx */
- #if defined(STM32F301x8) || defined(STM32F302x8) || defined(STM32F318xx)
- /*------------------------------ TIM15 clock Configuration ----------------*/
- if(((PeriphClkInit->PeriphClockSelection) & RCC_PERIPHCLK_TIM15) == RCC_PERIPHCLK_TIM15)
- {
- /* Check the parameters */
- assert_param(IS_RCC_TIM15CLKSOURCE(PeriphClkInit->Tim15ClockSelection));
-
- /* Configure the TIM15 clock source */
- __HAL_RCC_TIM15_CONFIG(PeriphClkInit->Tim15ClockSelection);
- }
- /*------------------------------ TIM16 clock Configuration ----------------*/
- if(((PeriphClkInit->PeriphClockSelection) & RCC_PERIPHCLK_TIM16) == RCC_PERIPHCLK_TIM16)
- {
- /* Check the parameters */
- assert_param(IS_RCC_TIM16CLKSOURCE(PeriphClkInit->Tim16ClockSelection));
-
- /* Configure the TIM16 clock source */
- __HAL_RCC_TIM16_CONFIG(PeriphClkInit->Tim16ClockSelection);
- }
- /*------------------------------ TIM17 clock Configuration ----------------*/
- if(((PeriphClkInit->PeriphClockSelection) & RCC_PERIPHCLK_TIM17) == RCC_PERIPHCLK_TIM17)
- {
- /* Check the parameters */
- assert_param(IS_RCC_TIM17CLKSOURCE(PeriphClkInit->Tim17ClockSelection));
-
- /* Configure the TIM17 clock source */
- __HAL_RCC_TIM17_CONFIG(PeriphClkInit->Tim17ClockSelection);
- }
- #endif /* STM32F301x8 || STM32F302x8 || STM32F318xx */
- #if defined(STM32F334x8)
- /*------------------------------ HRTIM1 clock Configuration ----------------*/
- if(((PeriphClkInit->PeriphClockSelection) & RCC_PERIPHCLK_HRTIM1) == RCC_PERIPHCLK_HRTIM1)
- {
- /* Check the parameters */
- assert_param(IS_RCC_HRTIM1CLKSOURCE(PeriphClkInit->Hrtim1ClockSelection));
-
- /* Configure the HRTIM1 clock source */
- __HAL_RCC_HRTIM1_CONFIG(PeriphClkInit->Hrtim1ClockSelection);
- }
- #endif /* STM32F334x8 */
- #if defined(STM32F373xC) || defined(STM32F378xx)
-
- /*------------------------------ SDADC clock Configuration -------------------*/
- if(((PeriphClkInit->PeriphClockSelection) & RCC_PERIPHCLK_SDADC) == RCC_PERIPHCLK_SDADC)
- {
- /* Check the parameters */
- assert_param(IS_RCC_SDADCSYSCLK_DIV(PeriphClkInit->SdadcClockSelection));
-
- /* Configure the SDADC clock prescaler */
- __HAL_RCC_SDADC_CONFIG(PeriphClkInit->SdadcClockSelection);
- }
- /*------------------------------ CEC clock Configuration -------------------*/
- if(((PeriphClkInit->PeriphClockSelection) & RCC_PERIPHCLK_CEC) == RCC_PERIPHCLK_CEC)
- {
- /* Check the parameters */
- assert_param(IS_RCC_CECCLKSOURCE(PeriphClkInit->CecClockSelection));
-
- /* Configure the CEC clock source */
- __HAL_RCC_CEC_CONFIG(PeriphClkInit->CecClockSelection);
- }
- #endif /* STM32F373xC || STM32F378xx */
-
- #if defined(STM32F302xE) || defined(STM32F303xE) || defined(STM32F398xx)
-
- /*------------------------------ TIM2 clock Configuration -------------------*/
- if(((PeriphClkInit->PeriphClockSelection) & RCC_PERIPHCLK_TIM2) == RCC_PERIPHCLK_TIM2)
- {
- /* Check the parameters */
- assert_param(IS_RCC_TIM2CLKSOURCE(PeriphClkInit->Tim2ClockSelection));
-
- /* Configure the CEC clock source */
- __HAL_RCC_TIM2_CONFIG(PeriphClkInit->Tim2ClockSelection);
- }
- /*------------------------------ TIM3 clock Configuration -------------------*/
- if(((PeriphClkInit->PeriphClockSelection) & RCC_PERIPHCLK_TIM34) == RCC_PERIPHCLK_TIM34)
- {
- /* Check the parameters */
- assert_param(IS_RCC_TIM3CLKSOURCE(PeriphClkInit->Tim34ClockSelection));
-
- /* Configure the CEC clock source */
- __HAL_RCC_TIM34_CONFIG(PeriphClkInit->Tim34ClockSelection);
- }
- /*------------------------------ TIM15 clock Configuration ------------------*/
- if(((PeriphClkInit->PeriphClockSelection) & RCC_PERIPHCLK_TIM15) == RCC_PERIPHCLK_TIM15)
- {
- /* Check the parameters */
- assert_param(IS_RCC_TIM15CLKSOURCE(PeriphClkInit->Tim15ClockSelection));
-
- /* Configure the CEC clock source */
- __HAL_RCC_TIM15_CONFIG(PeriphClkInit->Tim15ClockSelection);
- }
- /*------------------------------ TIM16 clock Configuration ------------------*/
- if(((PeriphClkInit->PeriphClockSelection) & RCC_PERIPHCLK_TIM16) == RCC_PERIPHCLK_TIM16)
- {
- /* Check the parameters */
- assert_param(IS_RCC_TIM16CLKSOURCE(PeriphClkInit->Tim16ClockSelection));
-
- /* Configure the CEC clock source */
- __HAL_RCC_TIM16_CONFIG(PeriphClkInit->Tim16ClockSelection);
- }
- /*------------------------------ TIM17 clock Configuration ------------------*/
- if(((PeriphClkInit->PeriphClockSelection) & RCC_PERIPHCLK_TIM17) == RCC_PERIPHCLK_TIM17)
- {
- /* Check the parameters */
- assert_param(IS_RCC_TIM17CLKSOURCE(PeriphClkInit->Tim17ClockSelection));
-
- /* Configure the CEC clock source */
- __HAL_RCC_TIM17_CONFIG(PeriphClkInit->Tim17ClockSelection);
- }
- #endif /* STM32F302xE || STM32F303xE || STM32F398xx */
- #if defined(STM32F303xE) || defined(STM32F398xx)
- /*------------------------------ TIM20 clock Configuration ------------------*/
- if(((PeriphClkInit->PeriphClockSelection) & RCC_PERIPHCLK_TIM20) == RCC_PERIPHCLK_TIM20)
- {
- /* Check the parameters */
- assert_param(IS_RCC_TIM20CLKSOURCE(PeriphClkInit->Tim20ClockSelection));
-
- /* Configure the CEC clock source */
- __HAL_RCC_TIM20_CONFIG(PeriphClkInit->Tim20ClockSelection);
- }
- #endif /* STM32F303xE || STM32F398xx */
-
- return HAL_OK;
- }
- /**
- * @brief Get the RCC_ClkInitStruct according to the internal
- * RCC configuration registers.
- * @param PeriphClkInit pointer to an RCC_PeriphCLKInitTypeDef structure that
- * returns the configuration information for the Extended Peripherals clocks
- * (ADC, CEC, I2C, I2S, SDADC, HRTIM, TIM, USART, RTC and USB clocks).
- * @retval None
- */
- void HAL_RCCEx_GetPeriphCLKConfig(RCC_PeriphCLKInitTypeDef *PeriphClkInit)
- {
- /* Set all possible values for the extended clock type parameter------------*/
- /* Common part first */
- #if defined(RCC_CFGR3_USART2SW) && defined(RCC_CFGR3_USART3SW)
- PeriphClkInit->PeriphClockSelection = RCC_PERIPHCLK_USART1 | RCC_PERIPHCLK_USART2 | RCC_PERIPHCLK_USART3 | \
- RCC_PERIPHCLK_I2C1 | RCC_PERIPHCLK_RTC;
- #else
- PeriphClkInit->PeriphClockSelection = RCC_PERIPHCLK_USART1 | \
- RCC_PERIPHCLK_I2C1 | RCC_PERIPHCLK_RTC;
- #endif /* RCC_CFGR3_USART2SW && RCC_CFGR3_USART3SW */
-
- /* Get the RTC configuration --------------------------------------------*/
- PeriphClkInit->RTCClockSelection = __HAL_RCC_GET_RTC_SOURCE();
- /* Get the USART1 clock configuration --------------------------------------------*/
- PeriphClkInit->Usart1ClockSelection = __HAL_RCC_GET_USART1_SOURCE();
- #if defined(RCC_CFGR3_USART2SW)
- /* Get the USART2 clock configuration -----------------------------------------*/
- PeriphClkInit->Usart2ClockSelection = __HAL_RCC_GET_USART2_SOURCE();
- #endif /* RCC_CFGR3_USART2SW */
- #if defined(RCC_CFGR3_USART3SW)
- /* Get the USART3 clock configuration -----------------------------------------*/
- PeriphClkInit->Usart3ClockSelection = __HAL_RCC_GET_USART3_SOURCE();
- #endif /* RCC_CFGR3_USART3SW */
- /* Get the I2C1 clock configuration -----------------------------------------*/
- PeriphClkInit->I2c1ClockSelection = __HAL_RCC_GET_I2C1_SOURCE();
- #if defined(STM32F302xE) || defined(STM32F303xE)\
- || defined(STM32F302xC) || defined(STM32F303xC)\
- || defined(STM32F302x8) \
- || defined(STM32F373xC)
- PeriphClkInit->PeriphClockSelection |= RCC_PERIPHCLK_USB;
- /* Get the USB clock configuration -----------------------------------------*/
- PeriphClkInit->USBClockSelection = __HAL_RCC_GET_USB_SOURCE();
- #endif /* STM32F302xE || STM32F303xE || */
- /* STM32F302xC || STM32F303xC || */
- /* STM32F302x8 || */
- /* STM32F373xC */
- #if defined(STM32F302xE) || defined(STM32F303xE) || defined(STM32F398xx)\
- || defined(STM32F302xC) || defined(STM32F303xC) || defined(STM32F358xx)\
- || defined(STM32F301x8) || defined(STM32F302x8) || defined(STM32F318xx)\
- || defined(STM32F373xC) || defined(STM32F378xx)
- PeriphClkInit->PeriphClockSelection |= RCC_PERIPHCLK_I2C2;
- /* Get the I2C2 clock configuration -----------------------------------------*/
- PeriphClkInit->I2c2ClockSelection = __HAL_RCC_GET_I2C2_SOURCE();
- #endif /* STM32F302xE || STM32F303xE || STM32F398xx || */
- /* STM32F302xC || STM32F303xC || STM32F358xx || */
- /* STM32F301x8 || STM32F302x8 || STM32F318xx || */
- /* STM32F373xC || STM32F378xx */
-
- #if defined(STM32F302xE) || defined(STM32F303xE) || defined(STM32F398xx)\
- || defined(STM32F301x8) || defined(STM32F302x8) || defined(STM32F318xx)
- PeriphClkInit->PeriphClockSelection |= RCC_PERIPHCLK_I2C3;
- /* Get the I2C3 clock configuration -----------------------------------------*/
- PeriphClkInit->I2c3ClockSelection = __HAL_RCC_GET_I2C3_SOURCE();
- #endif /* STM32F302xE || STM32F303xE || STM32F398xx || */
- /* STM32F301x8 || STM32F302x8 || STM32F318xx */
-
- #if defined(STM32F302xE) || defined(STM32F303xE) || defined(STM32F398xx)\
- || defined(STM32F302xC) || defined(STM32F303xC) ||defined(STM32F358xx)
- PeriphClkInit->PeriphClockSelection |= (RCC_PERIPHCLK_UART4 | RCC_PERIPHCLK_UART5);
- /* Get the UART4 clock configuration -----------------------------------------*/
- PeriphClkInit->Uart4ClockSelection = __HAL_RCC_GET_UART4_SOURCE();
- /* Get the UART5 clock configuration -----------------------------------------*/
- PeriphClkInit->Uart5ClockSelection = __HAL_RCC_GET_UART5_SOURCE();
- #endif /* STM32F302xE || STM32F303xE || STM32F398xx || */
- /* STM32F302xC || STM32F303xC || STM32F358xx */
- #if defined(STM32F302xE) || defined(STM32F303xE) || defined(STM32F398xx)\
- || defined(STM32F302xC) || defined(STM32F303xC) || defined(STM32F358xx)\
- || defined(STM32F301x8) || defined(STM32F302x8) || defined(STM32F318xx)
- PeriphClkInit->PeriphClockSelection |= RCC_PERIPHCLK_I2S;
- /* Get the I2S clock configuration -----------------------------------------*/
- PeriphClkInit->I2sClockSelection = __HAL_RCC_GET_I2S_SOURCE();
- #endif /* STM32F302xE || STM32F303xE || STM32F398xx || */
- /* STM32F302xC || STM32F303xC || STM32F358xx || */
- /* STM32F301x8 || STM32F302x8 || STM32F318xx || */
-
- #if defined(STM32F301x8) || defined(STM32F302x8) || defined(STM32F318xx)\
- || defined(STM32F373xC) || defined(STM32F378xx)
-
- PeriphClkInit->PeriphClockSelection |= RCC_PERIPHCLK_ADC1;
- /* Get the ADC1 clock configuration -----------------------------------------*/
- PeriphClkInit->Adc1ClockSelection = __HAL_RCC_GET_ADC1_SOURCE();
- #endif /* STM32F301x8 || STM32F302x8 || STM32F318xx || */
- /* STM32F373xC || STM32F378xx */
- #if defined(STM32F302xE) || defined(STM32F303xE) || defined(STM32F398xx)\
- || defined(STM32F302xC) || defined(STM32F303xC) || defined(STM32F358xx)\
- || defined(STM32F303x8) || defined(STM32F334x8) || defined(STM32F328xx)
- PeriphClkInit->PeriphClockSelection |= RCC_PERIPHCLK_ADC12;
- /* Get the ADC1 & ADC2 clock configuration -----------------------------------------*/
- PeriphClkInit->Adc12ClockSelection = __HAL_RCC_GET_ADC12_SOURCE();
- #endif /* STM32F302xE || STM32F303xE || STM32F398xx || */
- /* STM32F302xC || STM32F303xC || STM32F358xx || */
- /* STM32F303x8 || STM32F334x8 || STM32F328xx */
- #if defined(STM32F303xE) || defined(STM32F398xx)\
- || defined(STM32F303xC) || defined(STM32F358xx)
- PeriphClkInit->PeriphClockSelection |= RCC_PERIPHCLK_ADC34;
- /* Get the ADC3 & ADC4 clock configuration -----------------------------------------*/
- PeriphClkInit->Adc34ClockSelection = __HAL_RCC_GET_ADC34_SOURCE();
- #endif /* STM32F303xE || STM32F398xx || */
- /* STM32F303xC || STM32F358xx */
- #if defined(STM32F302xE) || defined(STM32F303xE) || defined(STM32F398xx)\
- || defined(STM32F302xC) || defined(STM32F303xC) || defined(STM32F358xx)\
- || defined(STM32F303x8) || defined(STM32F334x8) || defined(STM32F328xx)\
- || defined(STM32F301x8) || defined(STM32F302x8) || defined(STM32F318xx)
- PeriphClkInit->PeriphClockSelection |= RCC_PERIPHCLK_TIM1;
- /* Get the TIM1 clock configuration -----------------------------------------*/
- PeriphClkInit->Tim1ClockSelection = __HAL_RCC_GET_TIM1_SOURCE();
- #endif /* STM32F302xE || STM32F303xE || STM32F398xx || */
- /* STM32F302xC || STM32F303xC || STM32F358xx || */
- /* STM32F303x8 || STM32F334x8 || STM32F328xx || */
- /* STM32F301x8 || STM32F302x8 || STM32F318xx */
-
- #if defined(STM32F303xE) || defined(STM32F398xx)\
- || defined(STM32F303xC) || defined(STM32F358xx)
- PeriphClkInit->PeriphClockSelection |= RCC_PERIPHCLK_TIM8;
- /* Get the TIM8 clock configuration -----------------------------------------*/
- PeriphClkInit->Tim8ClockSelection = __HAL_RCC_GET_TIM8_SOURCE();
- #endif /* STM32F303xE || STM32F398xx || */
- /* STM32F303xC || STM32F358xx */
- #if defined(STM32F301x8) || defined(STM32F302x8) || defined(STM32F318xx)
- PeriphClkInit->PeriphClockSelection |= (RCC_PERIPHCLK_TIM15 | RCC_PERIPHCLK_TIM16 | RCC_PERIPHCLK_TIM17);
- /* Get the TIM15 clock configuration -----------------------------------------*/
- PeriphClkInit->Tim15ClockSelection = __HAL_RCC_GET_TIM15_SOURCE();
- /* Get the TIM16 clock configuration -----------------------------------------*/
- PeriphClkInit->Tim16ClockSelection = __HAL_RCC_GET_TIM16_SOURCE();
- /* Get the TIM17 clock configuration -----------------------------------------*/
- PeriphClkInit->Tim17ClockSelection = __HAL_RCC_GET_TIM17_SOURCE();
- #endif /* STM32F301x8 || STM32F302x8 || STM32F318xx */
- #if defined(STM32F334x8)
- PeriphClkInit->PeriphClockSelection |= RCC_PERIPHCLK_HRTIM1;
- /* Get the HRTIM1 clock configuration -----------------------------------------*/
- PeriphClkInit->Hrtim1ClockSelection = __HAL_RCC_GET_HRTIM1_SOURCE();
- #endif /* STM32F334x8 */
- #if defined(STM32F373xC) || defined(STM32F378xx)
- PeriphClkInit->PeriphClockSelection |= RCC_PERIPHCLK_SDADC;
- /* Get the SDADC clock configuration -----------------------------------------*/
- PeriphClkInit->SdadcClockSelection = __HAL_RCC_GET_SDADC_SOURCE();
- PeriphClkInit->PeriphClockSelection |= RCC_PERIPHCLK_CEC;
- /* Get the CEC clock configuration -----------------------------------------*/
- PeriphClkInit->CecClockSelection = __HAL_RCC_GET_CEC_SOURCE();
- #endif /* STM32F373xC || STM32F378xx */
- #if defined(STM32F302xE) || defined(STM32F303xE) || defined(STM32F398xx)
- PeriphClkInit->PeriphClockSelection |= RCC_PERIPHCLK_TIM2;
- /* Get the TIM2 clock configuration -----------------------------------------*/
- PeriphClkInit->Tim2ClockSelection = __HAL_RCC_GET_TIM2_SOURCE();
- PeriphClkInit->PeriphClockSelection |= RCC_PERIPHCLK_TIM34;
- /* Get the TIM3 clock configuration -----------------------------------------*/
- PeriphClkInit->Tim34ClockSelection = __HAL_RCC_GET_TIM34_SOURCE();
- PeriphClkInit->PeriphClockSelection |= RCC_PERIPHCLK_TIM15;
- /* Get the TIM15 clock configuration -----------------------------------------*/
- PeriphClkInit->Tim15ClockSelection = __HAL_RCC_GET_TIM15_SOURCE();
- PeriphClkInit->PeriphClockSelection |= RCC_PERIPHCLK_TIM16;
- /* Get the TIM16 clock configuration -----------------------------------------*/
- PeriphClkInit->Tim16ClockSelection = __HAL_RCC_GET_TIM16_SOURCE();
- PeriphClkInit->PeriphClockSelection |= RCC_PERIPHCLK_TIM17;
- /* Get the TIM17 clock configuration -----------------------------------------*/
- PeriphClkInit->Tim17ClockSelection = __HAL_RCC_GET_TIM17_SOURCE();
- #endif /* STM32F302xE || STM32F303xE || STM32F398xx */
-
- #if defined (STM32F303xE) || defined(STM32F398xx)
- PeriphClkInit->PeriphClockSelection |= RCC_PERIPHCLK_TIM20;
- /* Get the TIM20 clock configuration -----------------------------------------*/
- PeriphClkInit->Tim20ClockSelection = __HAL_RCC_GET_TIM20_SOURCE();
- #endif /* STM32F303xE || STM32F398xx */
- }
- /**
- * @brief Returns the peripheral clock frequency
- * @note Returns 0 if peripheral clock is unknown or 0xDEADDEAD if not applicable.
- * @param PeriphClk Peripheral clock identifier
- * This parameter can be one of the following values:
- * @arg @ref RCC_PERIPHCLK_RTC RTC peripheral clock
- * @arg @ref RCC_PERIPHCLK_USART1 USART1 peripheral clock
- * @arg @ref RCC_PERIPHCLK_I2C1 I2C1 peripheral clock
- @if STM32F301x8
- * @arg @ref RCC_PERIPHCLK_I2C2 I2C2 peripheral clock
- * @arg @ref RCC_PERIPHCLK_I2C3 I2C3 peripheral clock
- * @arg @ref RCC_PERIPHCLK_I2S I2S peripheral clock
- * @arg @ref RCC_PERIPHCLK_ADC1 ADC1 peripheral clock
- * @arg @ref RCC_PERIPHCLK_TIM1 TIM1 peripheral clock
- * @arg @ref RCC_PERIPHCLK_TIM15 TIM15 peripheral clock
- * @arg @ref RCC_PERIPHCLK_TIM16 TIM16 peripheral clock
- * @arg @ref RCC_PERIPHCLK_TIM17 TIM17 peripheral clock
- @endif
- @if STM32F302x8
- * @arg @ref RCC_PERIPHCLK_I2C2 I2C2 peripheral clock
- * @arg @ref RCC_PERIPHCLK_I2C3 I2C3 peripheral clock
- * @arg @ref RCC_PERIPHCLK_I2S I2S peripheral clock
- * @arg @ref RCC_PERIPHCLK_USB USB peripheral clock
- * @arg @ref RCC_PERIPHCLK_ADC1 ADC1 peripheral clock
- * @arg @ref RCC_PERIPHCLK_TIM1 TIM1 peripheral clock
- * @arg @ref RCC_PERIPHCLK_TIM15 TIM15 peripheral clock
- * @arg @ref RCC_PERIPHCLK_TIM16 TIM16 peripheral clock
- * @arg @ref RCC_PERIPHCLK_TIM17 TIM17 peripheral clock
- @endif
- @if STM32F302xC
- * @arg @ref RCC_PERIPHCLK_USART2 USART2 peripheral clock
- * @arg @ref RCC_PERIPHCLK_USART3 USART3 peripheral clock
- * @arg @ref RCC_PERIPHCLK_UART4 UART4 peripheral clock
- * @arg @ref RCC_PERIPHCLK_UART5 UART5 peripheral clock
- * @arg @ref RCC_PERIPHCLK_I2C2 I2C2 peripheral clock
- * @arg @ref RCC_PERIPHCLK_I2S I2S peripheral clock
- * @arg @ref RCC_PERIPHCLK_USB USB peripheral clock
- * @arg @ref RCC_PERIPHCLK_ADC12 ADC12 peripheral clock
- * @arg @ref RCC_PERIPHCLK_TIM1 TIM1 peripheral clock
- @endif
- @if STM32F302xE
- * @arg @ref RCC_PERIPHCLK_USART2 USART2 peripheral clock
- * @arg @ref RCC_PERIPHCLK_USART3 USART3 peripheral clock
- * @arg @ref RCC_PERIPHCLK_UART4 UART4 peripheral clock
- * @arg @ref RCC_PERIPHCLK_UART5 UART5 peripheral clock
- * @arg @ref RCC_PERIPHCLK_I2C2 I2C2 peripheral clock
- * @arg @ref RCC_PERIPHCLK_I2C3 I2C3 peripheral clock
- * @arg @ref RCC_PERIPHCLK_I2S I2S peripheral clock
- * @arg @ref RCC_PERIPHCLK_USB USB peripheral clock
- * @arg @ref RCC_PERIPHCLK_ADC12 ADC12 peripheral clock
- * @arg @ref RCC_PERIPHCLK_TIM1 TIM1 peripheral clock
- * @arg @ref RCC_PERIPHCLK_TIM2 TIM2 peripheral clock
- * @arg @ref RCC_PERIPHCLK_TIM15 TIM15 peripheral clock
- * @arg @ref RCC_PERIPHCLK_TIM16 TIM16 peripheral clock
- * @arg @ref RCC_PERIPHCLK_TIM17 TIM17 peripheral clock
- * @arg @ref RCC_PERIPHCLK_TIM34 TIM34 peripheral clock
- @endif
- @if STM32F303x8
- * @arg @ref RCC_PERIPHCLK_ADC12 ADC12 peripheral clock
- * @arg @ref RCC_PERIPHCLK_TIM1 TIM1 peripheral clock
- @endif
- @if STM32F303xC
- * @arg @ref RCC_PERIPHCLK_USART2 USART2 peripheral clock
- * @arg @ref RCC_PERIPHCLK_USART3 USART3 peripheral clock
- * @arg @ref RCC_PERIPHCLK_UART4 UART4 peripheral clock
- * @arg @ref RCC_PERIPHCLK_UART5 UART5 peripheral clock
- * @arg @ref RCC_PERIPHCLK_I2C2 I2C2 peripheral clock
- * @arg @ref RCC_PERIPHCLK_I2S I2S peripheral clock
- * @arg @ref RCC_PERIPHCLK_USB USB peripheral clock
- * @arg @ref RCC_PERIPHCLK_ADC12 ADC12 peripheral clock
- * @arg @ref RCC_PERIPHCLK_ADC34 ADC34 peripheral clock
- * @arg @ref RCC_PERIPHCLK_TIM1 TIM1 peripheral clock
- * @arg @ref RCC_PERIPHCLK_TIM8 TIM8 peripheral clock
- @endif
- @if STM32F303xE
- * @arg @ref RCC_PERIPHCLK_USART2 USART2 peripheral clock
- * @arg @ref RCC_PERIPHCLK_USART3 USART3 peripheral clock
- * @arg @ref RCC_PERIPHCLK_UART4 UART4 peripheral clock
- * @arg @ref RCC_PERIPHCLK_UART5 UART5 peripheral clock
- * @arg @ref RCC_PERIPHCLK_I2C2 I2C2 peripheral clock
- * @arg @ref RCC_PERIPHCLK_I2C3 I2C3 peripheral clock
- * @arg @ref RCC_PERIPHCLK_I2S I2S peripheral clock
- * @arg @ref RCC_PERIPHCLK_USB USB peripheral clock
- * @arg @ref RCC_PERIPHCLK_ADC12 ADC12 peripheral clock
- * @arg @ref RCC_PERIPHCLK_ADC34 ADC34 peripheral clock
- * @arg @ref RCC_PERIPHCLK_TIM1 TIM1 peripheral clock
- * @arg @ref RCC_PERIPHCLK_TIM2 TIM2 peripheral clock
- * @arg @ref RCC_PERIPHCLK_TIM8 TIM8 peripheral clock
- * @arg @ref RCC_PERIPHCLK_TIM15 TIM15 peripheral clock
- * @arg @ref RCC_PERIPHCLK_TIM16 TIM16 peripheral clock
- * @arg @ref RCC_PERIPHCLK_TIM17 TIM17 peripheral clock
- * @arg @ref RCC_PERIPHCLK_TIM20 TIM20 peripheral clock
- * @arg @ref RCC_PERIPHCLK_TIM34 TIM34 peripheral clock
- @endif
- @if STM32F318xx
- * @arg @ref RCC_PERIPHCLK_I2C2 I2C2 peripheral clock
- * @arg @ref RCC_PERIPHCLK_I2C3 I2C3 peripheral clock
- * @arg @ref RCC_PERIPHCLK_I2S I2S peripheral clock
- * @arg @ref RCC_PERIPHCLK_ADC1 ADC1 peripheral clock
- * @arg @ref RCC_PERIPHCLK_TIM1 TIM1 peripheral clock
- * @arg @ref RCC_PERIPHCLK_TIM15 TIM15 peripheral clock
- * @arg @ref RCC_PERIPHCLK_TIM16 TIM16 peripheral clock
- * @arg @ref RCC_PERIPHCLK_TIM17 TIM17 peripheral clock
- @endif
- @if STM32F328xx
- * @arg @ref RCC_PERIPHCLK_I2C2 I2C2 peripheral clock
- * @arg @ref RCC_PERIPHCLK_ADC12 ADC12 peripheral clock
- * @arg @ref RCC_PERIPHCLK_TIM1 TIM1 peripheral clock
- @endif
- @if STM32F334x8
- * @arg @ref RCC_PERIPHCLK_ADC12 ADC12 peripheral clock
- * @arg @ref RCC_PERIPHCLK_TIM1 TIM1 peripheral clock
- * @arg @ref RCC_PERIPHCLK_HRTIM1 HRTIM1 peripheral clock
- @endif
- @if STM32F358xx
- * @arg @ref RCC_PERIPHCLK_USART2 USART2 peripheral clock
- * @arg @ref RCC_PERIPHCLK_USART3 USART3 peripheral clock
- * @arg @ref RCC_PERIPHCLK_UART4 UART4 peripheral clock
- * @arg @ref RCC_PERIPHCLK_UART5 UART5 peripheral clock
- * @arg @ref RCC_PERIPHCLK_I2S I2S peripheral clock
- * @arg @ref RCC_PERIPHCLK_ADC12 ADC12 peripheral clock
- * @arg @ref RCC_PERIPHCLK_ADC34 ADC34 peripheral clock
- * @arg @ref RCC_PERIPHCLK_TIM1 TIM1 peripheral clock
- * @arg @ref RCC_PERIPHCLK_TIM8 TIM8 peripheral clock
- @endif
- @if STM32F373xC
- * @arg @ref RCC_PERIPHCLK_USART2 USART2 peripheral clock
- * @arg @ref RCC_PERIPHCLK_USART3 USART3 peripheral clock
- * @arg @ref RCC_PERIPHCLK_I2C2 I2C2 peripheral clock
- * @arg @ref RCC_PERIPHCLK_USB USB peripheral clock
- * @arg @ref RCC_PERIPHCLK_ADC1 ADC1 peripheral clock
- * @arg @ref RCC_PERIPHCLK_SDADC SDADC peripheral clock
- * @arg @ref RCC_PERIPHCLK_CEC CEC peripheral clock
- @endif
- @if STM32F378xx
- * @arg @ref RCC_PERIPHCLK_USART2 USART2 peripheral clock
- * @arg @ref RCC_PERIPHCLK_USART3 USART3 peripheral clock
- * @arg @ref RCC_PERIPHCLK_I2C2 I2C2 peripheral clock
- * @arg @ref RCC_PERIPHCLK_ADC1 ADC1 peripheral clock
- * @arg @ref RCC_PERIPHCLK_SDADC SDADC peripheral clock
- * @arg @ref RCC_PERIPHCLK_CEC CEC peripheral clock
- @endif
- @if STM32F398xx
- * @arg @ref RCC_PERIPHCLK_USART2 USART2 peripheral clock
- * @arg @ref RCC_PERIPHCLK_USART3 USART3 peripheral clock
- * @arg @ref RCC_PERIPHCLK_UART4 UART4 peripheral clock
- * @arg @ref RCC_PERIPHCLK_UART5 UART5 peripheral clock
- * @arg @ref RCC_PERIPHCLK_I2C2 I2C2 peripheral clock
- * @arg @ref RCC_PERIPHCLK_I2C3 I2C3 peripheral clock
- * @arg @ref RCC_PERIPHCLK_I2S I2S peripheral clock
- * @arg @ref RCC_PERIPHCLK_ADC12 ADC12 peripheral clock
- * @arg @ref RCC_PERIPHCLK_ADC34 ADC34 peripheral clock
- * @arg @ref RCC_PERIPHCLK_TIM1 TIM1 peripheral clock
- * @arg @ref RCC_PERIPHCLK_TIM2 TIM2 peripheral clock
- * @arg @ref RCC_PERIPHCLK_TIM8 TIM8 peripheral clock
- * @arg @ref RCC_PERIPHCLK_TIM15 TIM15 peripheral clock
- * @arg @ref RCC_PERIPHCLK_TIM16 TIM16 peripheral clock
- * @arg @ref RCC_PERIPHCLK_TIM17 TIM17 peripheral clock
- * @arg @ref RCC_PERIPHCLK_TIM20 TIM20 peripheral clock
- * @arg @ref RCC_PERIPHCLK_TIM34 TIM34 peripheral clock
- @endif
- * @retval Frequency in Hz (0: means that no available frequency for the peripheral)
- */
- uint32_t HAL_RCCEx_GetPeriphCLKFreq(uint32_t PeriphClk)
- {
- /* frequency == 0 : means that no available frequency for the peripheral */
- uint32_t frequency = 0U;
- uint32_t srcclk = 0U;
- #if defined(RCC_CFGR2_ADC1PRES) || defined(RCC_CFGR2_ADCPRE12) || defined(RCC_CFGR2_ADCPRE34)
- static const uint16_t adc_pll_prediv_table[16U] = { 1U, 2U, 4U, 6U, 8U, 10U, 12U, 16U, 32U, 64U, 128U, 256U, 256U, 256U, 256U, 256U};
- #endif /* RCC_CFGR2_ADC1PRES || RCC_CFGR2_ADCPRE12 || RCC_CFGR2_ADCPRE34 */
- #if defined(RCC_CFGR_SDPRE)
- static const uint8_t sdadc_prescaler_table[16U] = { 2U, 4U, 6U, 8U, 10U, 12U, 14U, 16U, 20U, 24U, 28U, 32U, 36U, 40U, 44U, 48U};
- #endif /* RCC_CFGR_SDPRE */
- /* Check the parameters */
- assert_param(IS_RCC_PERIPHCLOCK(PeriphClk));
-
- switch (PeriphClk)
- {
- case RCC_PERIPHCLK_RTC:
- {
- /* Get the current RTC source */
- srcclk = __HAL_RCC_GET_RTC_SOURCE();
- /* Check if LSE is ready and if RTC clock selection is LSE */
- if ((srcclk == RCC_RTCCLKSOURCE_LSE) && (HAL_IS_BIT_SET(RCC->BDCR, RCC_BDCR_LSERDY)))
- {
- frequency = LSE_VALUE;
- }
- /* Check if LSI is ready and if RTC clock selection is LSI */
- else if ((srcclk == RCC_RTCCLKSOURCE_LSI) && (HAL_IS_BIT_SET(RCC->CSR, RCC_CSR_LSIRDY)))
- {
- frequency = LSI_VALUE;
- }
- /* Check if HSE is ready and if RTC clock selection is HSI_DIV32*/
- else if ((srcclk == RCC_RTCCLKSOURCE_HSE_DIV32) && (HAL_IS_BIT_SET(RCC->CR, RCC_CR_HSERDY)))
- {
- frequency = HSE_VALUE / 32U;
- }
- break;
- }
- case RCC_PERIPHCLK_USART1:
- {
- /* Get the current USART1 source */
- srcclk = __HAL_RCC_GET_USART1_SOURCE();
- /* Check if USART1 clock selection is PCLK1 */
- #if defined(RCC_USART1CLKSOURCE_PCLK2)
- if (srcclk == RCC_USART1CLKSOURCE_PCLK2)
- {
- frequency = HAL_RCC_GetPCLK2Freq();
- }
- #else
- if (srcclk == RCC_USART1CLKSOURCE_PCLK1)
- {
- frequency = HAL_RCC_GetPCLK1Freq();
- }
- #endif /* RCC_USART1CLKSOURCE_PCLK2 */
- /* Check if HSI is ready and if USART1 clock selection is HSI */
- else if ((srcclk == RCC_USART1CLKSOURCE_HSI) && (HAL_IS_BIT_SET(RCC->CR, RCC_CR_HSIRDY)))
- {
- frequency = HSI_VALUE;
- }
- /* Check if USART1 clock selection is SYSCLK */
- else if (srcclk == RCC_USART1CLKSOURCE_SYSCLK)
- {
- frequency = HAL_RCC_GetSysClockFreq();
- }
- /* Check if LSE is ready and if USART1 clock selection is LSE */
- else if ((srcclk == RCC_USART1CLKSOURCE_LSE) && (HAL_IS_BIT_SET(RCC->BDCR, RCC_BDCR_LSERDY)))
- {
- frequency = LSE_VALUE;
- }
- break;
- }
- #if defined(RCC_CFGR3_USART2SW)
- case RCC_PERIPHCLK_USART2:
- {
- /* Get the current USART2 source */
- srcclk = __HAL_RCC_GET_USART2_SOURCE();
- /* Check if USART2 clock selection is PCLK1 */
- if (srcclk == RCC_USART2CLKSOURCE_PCLK1)
- {
- frequency = HAL_RCC_GetPCLK1Freq();
- }
- /* Check if HSI is ready and if USART2 clock selection is HSI */
- else if ((srcclk == RCC_USART2CLKSOURCE_HSI) && (HAL_IS_BIT_SET(RCC->CR, RCC_CR_HSIRDY)))
- {
- frequency = HSI_VALUE;
- }
- /* Check if USART2 clock selection is SYSCLK */
- else if (srcclk == RCC_USART2CLKSOURCE_SYSCLK)
- {
- frequency = HAL_RCC_GetSysClockFreq();
- }
- /* Check if LSE is ready and if USART2 clock selection is LSE */
- else if ((srcclk == RCC_USART2CLKSOURCE_LSE) && (HAL_IS_BIT_SET(RCC->BDCR, RCC_BDCR_LSERDY)))
- {
- frequency = LSE_VALUE;
- }
- break;
- }
- #endif /* RCC_CFGR3_USART2SW */
- #if defined(RCC_CFGR3_USART3SW)
- case RCC_PERIPHCLK_USART3:
- {
- /* Get the current USART3 source */
- srcclk = __HAL_RCC_GET_USART3_SOURCE();
- /* Check if USART3 clock selection is PCLK1 */
- if (srcclk == RCC_USART3CLKSOURCE_PCLK1)
- {
- frequency = HAL_RCC_GetPCLK1Freq();
- }
- /* Check if HSI is ready and if USART3 clock selection is HSI */
- else if ((srcclk == RCC_USART3CLKSOURCE_HSI) && (HAL_IS_BIT_SET(RCC->CR, RCC_CR_HSIRDY)))
- {
- frequency = HSI_VALUE;
- }
- /* Check if USART3 clock selection is SYSCLK */
- else if (srcclk == RCC_USART3CLKSOURCE_SYSCLK)
- {
- frequency = HAL_RCC_GetSysClockFreq();
- }
- /* Check if LSE is ready and if USART3 clock selection is LSE */
- else if ((srcclk == RCC_USART3CLKSOURCE_LSE) && (HAL_IS_BIT_SET(RCC->BDCR, RCC_BDCR_LSERDY)))
- {
- frequency = LSE_VALUE;
- }
- break;
- }
- #endif /* RCC_CFGR3_USART3SW */
- #if defined(RCC_CFGR3_UART4SW)
- case RCC_PERIPHCLK_UART4:
- {
- /* Get the current UART4 source */
- srcclk = __HAL_RCC_GET_UART4_SOURCE();
- /* Check if UART4 clock selection is PCLK1 */
- if (srcclk == RCC_UART4CLKSOURCE_PCLK1)
- {
- frequency = HAL_RCC_GetPCLK1Freq();
- }
- /* Check if HSI is ready and if UART4 clock selection is HSI */
- else if ((srcclk == RCC_UART4CLKSOURCE_HSI) && (HAL_IS_BIT_SET(RCC->CR, RCC_CR_HSIRDY)))
- {
- frequency = HSI_VALUE;
- }
- /* Check if UART4 clock selection is SYSCLK */
- else if (srcclk == RCC_UART4CLKSOURCE_SYSCLK)
- {
- frequency = HAL_RCC_GetSysClockFreq();
- }
- /* Check if LSE is ready and if UART4 clock selection is LSE */
- else if ((srcclk == RCC_UART4CLKSOURCE_LSE) && (HAL_IS_BIT_SET(RCC->BDCR, RCC_BDCR_LSERDY)))
- {
- frequency = LSE_VALUE;
- }
- break;
- }
- #endif /* RCC_CFGR3_UART4SW */
- #if defined(RCC_CFGR3_UART5SW)
- case RCC_PERIPHCLK_UART5:
- {
- /* Get the current UART5 source */
- srcclk = __HAL_RCC_GET_UART5_SOURCE();
- /* Check if UART5 clock selection is PCLK1 */
- if (srcclk == RCC_UART5CLKSOURCE_PCLK1)
- {
- frequency = HAL_RCC_GetPCLK1Freq();
- }
- /* Check if HSI is ready and if UART5 clock selection is HSI */
- else if ((srcclk == RCC_UART5CLKSOURCE_HSI) && (HAL_IS_BIT_SET(RCC->CR, RCC_CR_HSIRDY)))
- {
- frequency = HSI_VALUE;
- }
- /* Check if UART5 clock selection is SYSCLK */
- else if (srcclk == RCC_UART5CLKSOURCE_SYSCLK)
- {
- frequency = HAL_RCC_GetSysClockFreq();
- }
- /* Check if LSE is ready and if UART5 clock selection is LSE */
- else if ((srcclk == RCC_UART5CLKSOURCE_LSE) && (HAL_IS_BIT_SET(RCC->BDCR, RCC_BDCR_LSERDY)))
- {
- frequency = LSE_VALUE;
- }
- break;
- }
- #endif /* RCC_CFGR3_UART5SW */
- case RCC_PERIPHCLK_I2C1:
- {
- /* Get the current I2C1 source */
- srcclk = __HAL_RCC_GET_I2C1_SOURCE();
- /* Check if HSI is ready and if I2C1 clock selection is HSI */
- if ((srcclk == RCC_I2C1CLKSOURCE_HSI) && (HAL_IS_BIT_SET(RCC->CR, RCC_CR_HSIRDY)))
- {
- frequency = HSI_VALUE;
- }
- /* Check if I2C1 clock selection is SYSCLK */
- else if (srcclk == RCC_I2C1CLKSOURCE_SYSCLK)
- {
- frequency = HAL_RCC_GetSysClockFreq();
- }
- break;
- }
- #if defined(RCC_CFGR3_I2C2SW)
- case RCC_PERIPHCLK_I2C2:
- {
- /* Get the current I2C2 source */
- srcclk = __HAL_RCC_GET_I2C2_SOURCE();
- /* Check if HSI is ready and if I2C2 clock selection is HSI */
- if ((srcclk == RCC_I2C2CLKSOURCE_HSI) && (HAL_IS_BIT_SET(RCC->CR, RCC_CR_HSIRDY)))
- {
- frequency = HSI_VALUE;
- }
- /* Check if I2C2 clock selection is SYSCLK */
- else if (srcclk == RCC_I2C2CLKSOURCE_SYSCLK)
- {
- frequency = HAL_RCC_GetSysClockFreq();
- }
- break;
- }
- #endif /* RCC_CFGR3_I2C2SW */
- #if defined(RCC_CFGR3_I2C3SW)
- case RCC_PERIPHCLK_I2C3:
- {
- /* Get the current I2C3 source */
- srcclk = __HAL_RCC_GET_I2C3_SOURCE();
- /* Check if HSI is ready and if I2C3 clock selection is HSI */
- if ((srcclk == RCC_I2C3CLKSOURCE_HSI) && (HAL_IS_BIT_SET(RCC->CR, RCC_CR_HSIRDY)))
- {
- frequency = HSI_VALUE;
- }
- /* Check if I2C3 clock selection is SYSCLK */
- else if (srcclk == RCC_I2C3CLKSOURCE_SYSCLK)
- {
- frequency = HAL_RCC_GetSysClockFreq();
- }
- break;
- }
- #endif /* RCC_CFGR3_I2C3SW */
- #if defined(RCC_CFGR_I2SSRC)
- case RCC_PERIPHCLK_I2S:
- {
- /* Get the current I2S source */
- srcclk = __HAL_RCC_GET_I2S_SOURCE();
- /* Check if I2S clock selection is External clock mapped on the I2S_CKIN pin */
- if (srcclk == RCC_I2SCLKSOURCE_EXT)
- {
- /* External clock used. Frequency cannot be returned.*/
- frequency = 0xDEADDEADU;
- }
- /* Check if I2S clock selection is SYSCLK */
- else if (srcclk == RCC_I2SCLKSOURCE_SYSCLK)
- {
- frequency = HAL_RCC_GetSysClockFreq();
- }
- break;
- }
- #endif /* RCC_CFGR_I2SSRC */
- #if defined(RCC_CFGR_USBPRE)
- case RCC_PERIPHCLK_USB:
- {
- /* Check if PLL is ready */
- if (HAL_IS_BIT_SET(RCC->CR, RCC_CR_PLLRDY))
- {
- /* Get the current USB source */
- srcclk = __HAL_RCC_GET_USB_SOURCE();
- /* Check if USB clock selection is not divided */
- if (srcclk == RCC_USBCLKSOURCE_PLL)
- {
- frequency = RCC_GetPLLCLKFreq();
- }
- /* Check if USB clock selection is divided by 1.5 */
- else /* RCC_USBCLKSOURCE_PLL_DIV1_5 */
- {
- frequency = (RCC_GetPLLCLKFreq() * 3U) / 2U;
- }
- }
- break;
- }
- #endif /* RCC_CFGR_USBPRE */
- #if defined(RCC_CFGR2_ADC1PRES) || defined(RCC_CFGR_ADCPRE)
- case RCC_PERIPHCLK_ADC1:
- {
- /* Get the current ADC1 source */
- srcclk = __HAL_RCC_GET_ADC1_SOURCE();
- #if defined(RCC_CFGR2_ADC1PRES)
- /* Check if ADC1 clock selection is AHB */
- if (srcclk == RCC_ADC1PLLCLK_OFF)
- {
- frequency = SystemCoreClock;
- }
- /* PLL clock has been selected */
- else
- {
- /* Check if PLL is ready */
- if (HAL_IS_BIT_SET(RCC->CR, RCC_CR_PLLRDY))
- {
- /* Frequency is the PLL frequency divided by ADC prescaler (1U/2U/4U/6U/8U/10U/12U/16U/32U/64U/128U/256U) */
- frequency = RCC_GetPLLCLKFreq() / adc_pll_prediv_table[(srcclk >> RCC_CFGR2_ADC1PRES_Pos) & 0xFU];
- }
- }
- #else /* RCC_CFGR_ADCPRE */
- /* ADC1 is set to PLCK2 frequency divided by 2U/4U/6U/8U */
- frequency = HAL_RCC_GetPCLK2Freq() / (((srcclk >> RCC_CFGR_ADCPRE_Pos) + 1U) * 2U);
- #endif /* RCC_CFGR2_ADC1PRES */
- break;
- }
- #endif /* RCC_CFGR2_ADC1PRES || RCC_CFGR_ADCPRE */
- #if defined(RCC_CFGR2_ADCPRE12)
- case RCC_PERIPHCLK_ADC12:
- {
- /* Get the current ADC12 source */
- srcclk = __HAL_RCC_GET_ADC12_SOURCE();
- /* Check if ADC12 clock selection is AHB */
- if (srcclk == RCC_ADC12PLLCLK_OFF)
- {
- frequency = SystemCoreClock;
- }
- /* PLL clock has been selected */
- else
- {
- /* Check if PLL is ready */
- if (HAL_IS_BIT_SET(RCC->CR, RCC_CR_PLLRDY))
- {
- /* Frequency is the PLL frequency divided by ADC prescaler (1U/2U/4U/6/8U/10U/12U/16U/32U/64U/128U/256U) */
- frequency = RCC_GetPLLCLKFreq() / adc_pll_prediv_table[(srcclk >> RCC_CFGR2_ADCPRE12_Pos) & 0xF];
- }
- }
- break;
- }
- #endif /* RCC_CFGR2_ADCPRE12 */
- #if defined(RCC_CFGR2_ADCPRE34)
- case RCC_PERIPHCLK_ADC34:
- {
- /* Get the current ADC34 source */
- srcclk = __HAL_RCC_GET_ADC34_SOURCE();
- /* Check if ADC34 clock selection is AHB */
- if (srcclk == RCC_ADC34PLLCLK_OFF)
- {
- frequency = SystemCoreClock;
- }
- /* PLL clock has been selected */
- else
- {
- /* Check if PLL is ready */
- if (HAL_IS_BIT_SET(RCC->CR, RCC_CR_PLLRDY))
- {
- /* Frequency is the PLL frequency divided by ADC prescaler (1U/2U/4U/6U/8U/10U/12U/16U/32U/64U/128U/256U) */
- frequency = RCC_GetPLLCLKFreq() / adc_pll_prediv_table[(srcclk >> RCC_CFGR2_ADCPRE34_Pos) & 0xF];
- }
- }
- break;
- }
- #endif /* RCC_CFGR2_ADCPRE34 */
- #if defined(RCC_CFGR3_TIM1SW)
- case RCC_PERIPHCLK_TIM1:
- {
- /* Get the current TIM1 source */
- srcclk = __HAL_RCC_GET_TIM1_SOURCE();
- /* Check if PLL is ready and if TIM1 clock selection is PLL */
- if ((srcclk == RCC_TIM1CLK_PLLCLK) && (HAL_IS_BIT_SET(RCC->CR, RCC_CR_PLLRDY)))
- {
- frequency = RCC_GetPLLCLKFreq();
- }
- /* Check if TIM1 clock selection is SYSCLK */
- else if (srcclk == RCC_TIM1CLK_HCLK)
- {
- frequency = SystemCoreClock;
- }
- break;
- }
- #endif /* RCC_CFGR3_TIM1SW */
- #if defined(RCC_CFGR3_TIM2SW)
- case RCC_PERIPHCLK_TIM2:
- {
- /* Get the current TIM2 source */
- srcclk = __HAL_RCC_GET_TIM2_SOURCE();
- /* Check if PLL is ready and if TIM2 clock selection is PLL */
- if ((srcclk == RCC_TIM2CLK_PLLCLK) && (HAL_IS_BIT_SET(RCC->CR, RCC_CR_PLLRDY)))
- {
- frequency = RCC_GetPLLCLKFreq();
- }
- /* Check if TIM2 clock selection is SYSCLK */
- else if (srcclk == RCC_TIM2CLK_HCLK)
- {
- frequency = SystemCoreClock;
- }
- break;
- }
- #endif /* RCC_CFGR3_TIM2SW */
- #if defined(RCC_CFGR3_TIM8SW)
- case RCC_PERIPHCLK_TIM8:
- {
- /* Get the current TIM8 source */
- srcclk = __HAL_RCC_GET_TIM8_SOURCE();
- /* Check if PLL is ready and if TIM8 clock selection is PLL */
- if ((srcclk == RCC_TIM8CLK_PLLCLK) && (HAL_IS_BIT_SET(RCC->CR, RCC_CR_PLLRDY)))
- {
- frequency = RCC_GetPLLCLKFreq();
- }
- /* Check if TIM8 clock selection is SYSCLK */
- else if (srcclk == RCC_TIM8CLK_HCLK)
- {
- frequency = SystemCoreClock;
- }
- break;
- }
- #endif /* RCC_CFGR3_TIM8SW */
- #if defined(RCC_CFGR3_TIM15SW)
- case RCC_PERIPHCLK_TIM15:
- {
- /* Get the current TIM15 source */
- srcclk = __HAL_RCC_GET_TIM15_SOURCE();
- /* Check if PLL is ready and if TIM15 clock selection is PLL */
- if ((srcclk == RCC_TIM15CLK_PLLCLK) && (HAL_IS_BIT_SET(RCC->CR, RCC_CR_PLLRDY)))
- {
- frequency = RCC_GetPLLCLKFreq();
- }
- /* Check if TIM15 clock selection is SYSCLK */
- else if (srcclk == RCC_TIM15CLK_HCLK)
- {
- frequency = SystemCoreClock;
- }
- break;
- }
- #endif /* RCC_CFGR3_TIM15SW */
- #if defined(RCC_CFGR3_TIM16SW)
- case RCC_PERIPHCLK_TIM16:
- {
- /* Get the current TIM16 source */
- srcclk = __HAL_RCC_GET_TIM16_SOURCE();
- /* Check if PLL is ready and if TIM16 clock selection is PLL */
- if ((srcclk == RCC_TIM16CLK_PLLCLK) && (HAL_IS_BIT_SET(RCC->CR, RCC_CR_PLLRDY)))
- {
- frequency = RCC_GetPLLCLKFreq();
- }
- /* Check if TIM16 clock selection is SYSCLK */
- else if (srcclk == RCC_TIM16CLK_HCLK)
- {
- frequency = SystemCoreClock;
- }
- break;
- }
- #endif /* RCC_CFGR3_TIM16SW */
- #if defined(RCC_CFGR3_TIM17SW)
- case RCC_PERIPHCLK_TIM17:
- {
- /* Get the current TIM17 source */
- srcclk = __HAL_RCC_GET_TIM17_SOURCE();
- /* Check if PLL is ready and if TIM17 clock selection is PLL */
- if ((srcclk == RCC_TIM17CLK_PLLCLK) && (HAL_IS_BIT_SET(RCC->CR, RCC_CR_PLLRDY)))
- {
- frequency = RCC_GetPLLCLKFreq();
- }
- /* Check if TIM17 clock selection is SYSCLK */
- else if (srcclk == RCC_TIM17CLK_HCLK)
- {
- frequency = SystemCoreClock;
- }
- break;
- }
- #endif /* RCC_CFGR3_TIM17SW */
- #if defined(RCC_CFGR3_TIM20SW)
- case RCC_PERIPHCLK_TIM20:
- {
- /* Get the current TIM20 source */
- srcclk = __HAL_RCC_GET_TIM20_SOURCE();
- /* Check if PLL is ready and if TIM20 clock selection is PLL */
- if ((srcclk == RCC_TIM20CLK_PLLCLK) && (HAL_IS_BIT_SET(RCC->CR, RCC_CR_PLLRDY)))
- {
- frequency = RCC_GetPLLCLKFreq();
- }
- /* Check if TIM20 clock selection is SYSCLK */
- else if (srcclk == RCC_TIM20CLK_HCLK)
- {
- frequency = SystemCoreClock;
- }
- break;
- }
- #endif /* RCC_CFGR3_TIM20SW */
- #if defined(RCC_CFGR3_TIM34SW)
- case RCC_PERIPHCLK_TIM34:
- {
- /* Get the current TIM34 source */
- srcclk = __HAL_RCC_GET_TIM34_SOURCE();
- /* Check if PLL is ready and if TIM34 clock selection is PLL */
- if ((srcclk == RCC_TIM34CLK_PLLCLK) && (HAL_IS_BIT_SET(RCC->CR, RCC_CR_PLLRDY)))
- {
- frequency = RCC_GetPLLCLKFreq();
- }
- /* Check if TIM34 clock selection is SYSCLK */
- else if (srcclk == RCC_TIM34CLK_HCLK)
- {
- frequency = SystemCoreClock;
- }
- break;
- }
- #endif /* RCC_CFGR3_TIM34SW */
- #if defined(RCC_CFGR3_HRTIM1SW)
- case RCC_PERIPHCLK_HRTIM1:
- {
- /* Get the current HRTIM1 source */
- srcclk = __HAL_RCC_GET_HRTIM1_SOURCE();
- /* Check if PLL is ready and if HRTIM1 clock selection is PLL */
- if ((srcclk == RCC_HRTIM1CLK_PLLCLK) && (HAL_IS_BIT_SET(RCC->CR, RCC_CR_PLLRDY)))
- {
- frequency = RCC_GetPLLCLKFreq();
- }
- /* Check if HRTIM1 clock selection is SYSCLK */
- else if (srcclk == RCC_HRTIM1CLK_HCLK)
- {
- frequency = SystemCoreClock;
- }
- break;
- }
- #endif /* RCC_CFGR3_HRTIM1SW */
- #if defined(RCC_CFGR_SDPRE)
- case RCC_PERIPHCLK_SDADC:
- {
- /* Get the current SDADC source */
- srcclk = __HAL_RCC_GET_SDADC_SOURCE();
- /* Frequency is the system frequency divided by SDADC prescaler (2U/4U/6U/8U/10U/12U/14U/16U/20U/24U/28U/32U/36U/40U/44U/48U) */
- frequency = SystemCoreClock / sdadc_prescaler_table[(srcclk >> RCC_CFGR_SDPRE_Pos) & 0xF];
- break;
- }
- #endif /* RCC_CFGR_SDPRE */
- #if defined(RCC_CFGR3_CECSW)
- case RCC_PERIPHCLK_CEC:
- {
- /* Get the current CEC source */
- srcclk = __HAL_RCC_GET_CEC_SOURCE();
- /* Check if HSI is ready and if CEC clock selection is HSI */
- if ((srcclk == RCC_CECCLKSOURCE_HSI) && (HAL_IS_BIT_SET(RCC->CR, RCC_CR_HSIRDY)))
- {
- frequency = HSI_VALUE;
- }
- /* Check if LSE is ready and if CEC clock selection is LSE */
- else if ((srcclk == RCC_CECCLKSOURCE_LSE) && (HAL_IS_BIT_SET(RCC->BDCR, RCC_BDCR_LSERDY)))
- {
- frequency = LSE_VALUE;
- }
- break;
- }
- #endif /* RCC_CFGR3_CECSW */
- default:
- {
- break;
- }
- }
- return(frequency);
- }
- /**
- * @}
- */
- /**
- * @}
- */
- #if defined(RCC_CFGR2_ADC1PRES) || defined(RCC_CFGR2_ADCPRE12) || defined(RCC_CFGR2_ADCPRE34) || defined(RCC_CFGR_USBPRE) \
- || defined(RCC_CFGR3_TIM1SW) || defined(RCC_CFGR3_TIM2SW) || defined(RCC_CFGR3_TIM8SW) || defined(RCC_CFGR3_TIM15SW) \
- || defined(RCC_CFGR3_TIM16SW) || defined(RCC_CFGR3_TIM17SW) || defined(RCC_CFGR3_TIM20SW) || defined(RCC_CFGR3_TIM34SW) \
- || defined(RCC_CFGR3_HRTIM1SW)
- /** @addtogroup RCCEx_Private_Functions
- * @{
- */
- static uint32_t RCC_GetPLLCLKFreq(void)
- {
- uint32_t pllmul = 0U, pllsource = 0U, prediv = 0U, pllclk = 0U;
- pllmul = RCC->CFGR & RCC_CFGR_PLLMUL;
- pllmul = ( pllmul >> 18U) + 2U;
- pllsource = RCC->CFGR & RCC_CFGR_PLLSRC;
- #if defined(RCC_CFGR_PLLSRC_HSI_DIV2)
- if (pllsource != RCC_PLLSOURCE_HSI)
- {
- prediv = (RCC->CFGR2 & RCC_CFGR2_PREDIV) + 1U;
- /* HSE used as PLL clock source : PLLCLK = HSE/PREDIV * PLLMUL */
- pllclk = (HSE_VALUE/prediv) * pllmul;
- }
- else
- {
- /* HSI used as PLL clock source : PLLCLK = HSI/2U * PLLMUL */
- pllclk = (HSI_VALUE >> 1U) * pllmul;
- }
- #else
- prediv = (RCC->CFGR2 & RCC_CFGR2_PREDIV) + 1U;
- if (pllsource == RCC_CFGR_PLLSRC_HSE_PREDIV)
- {
- /* HSE used as PLL clock source : PLLCLK = HSE/PREDIV * PLLMUL */
- pllclk = (HSE_VALUE/prediv) * pllmul;
- }
- else
- {
- /* HSI used as PLL clock source : PLLCLK = HSI/PREDIV * PLLMUL */
- pllclk = (HSI_VALUE/prediv) * pllmul;
- }
- #endif /* RCC_CFGR_PLLSRC_HSI_DIV2 */
- return pllclk;
- }
- /**
- * @}
- */
- #endif /* RCC_CFGR2_ADC1PRES || RCC_CFGR2_ADCPRExx || RCC_CFGR3_TIMxSW || RCC_CFGR3_HRTIM1SW || RCC_CFGR_USBPRE */
-
- /**
- * @}
- */
-
- #endif /* HAL_RCC_MODULE_ENABLED */
- /**
- * @}
- */
|