mbed library sources. Supersedes mbed-src.
Dependents: Nucleo_Hello_Encoder BLE_iBeaconScan AM1805_DEMO DISCO-F429ZI_ExportTemplate1 ... more
targets/TARGET_STM/TARGET_STM32F0/device/stm32f0xx_ll_rcc.c@156:95d6b41a828b, 2017-01-16 (annotated)
- Committer:
- <>
- Date:
- Mon Jan 16 15:03:32 2017 +0000
- Revision:
- 156:95d6b41a828b
- Child:
- 180:96ed750bd169
This updates the lib to the mbed lib v134
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
<> | 156:95d6b41a828b | 1 | /** |
<> | 156:95d6b41a828b | 2 | ****************************************************************************** |
<> | 156:95d6b41a828b | 3 | * @file stm32f0xx_ll_rcc.c |
<> | 156:95d6b41a828b | 4 | * @author MCD Application Team |
<> | 156:95d6b41a828b | 5 | * @version V1.4.0 |
<> | 156:95d6b41a828b | 6 | * @date 27-May-2016 |
<> | 156:95d6b41a828b | 7 | * @brief RCC LL module driver. |
<> | 156:95d6b41a828b | 8 | ****************************************************************************** |
<> | 156:95d6b41a828b | 9 | * @attention |
<> | 156:95d6b41a828b | 10 | * |
<> | 156:95d6b41a828b | 11 | * <h2><center>© COPYRIGHT(c) 2016 STMicroelectronics</center></h2> |
<> | 156:95d6b41a828b | 12 | * |
<> | 156:95d6b41a828b | 13 | * Redistribution and use in source and binary forms, with or without modification, |
<> | 156:95d6b41a828b | 14 | * are permitted provided that the following conditions are met: |
<> | 156:95d6b41a828b | 15 | * 1. Redistributions of source code must retain the above copyright notice, |
<> | 156:95d6b41a828b | 16 | * this list of conditions and the following disclaimer. |
<> | 156:95d6b41a828b | 17 | * 2. Redistributions in binary form must reproduce the above copyright notice, |
<> | 156:95d6b41a828b | 18 | * this list of conditions and the following disclaimer in the documentation |
<> | 156:95d6b41a828b | 19 | * and/or other materials provided with the distribution. |
<> | 156:95d6b41a828b | 20 | * 3. Neither the name of STMicroelectronics nor the names of its contributors |
<> | 156:95d6b41a828b | 21 | * may be used to endorse or promote products derived from this software |
<> | 156:95d6b41a828b | 22 | * without specific prior written permission. |
<> | 156:95d6b41a828b | 23 | * |
<> | 156:95d6b41a828b | 24 | * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" |
<> | 156:95d6b41a828b | 25 | * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE |
<> | 156:95d6b41a828b | 26 | * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE |
<> | 156:95d6b41a828b | 27 | * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE |
<> | 156:95d6b41a828b | 28 | * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL |
<> | 156:95d6b41a828b | 29 | * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR |
<> | 156:95d6b41a828b | 30 | * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER |
<> | 156:95d6b41a828b | 31 | * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, |
<> | 156:95d6b41a828b | 32 | * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE |
<> | 156:95d6b41a828b | 33 | * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
<> | 156:95d6b41a828b | 34 | * |
<> | 156:95d6b41a828b | 35 | ****************************************************************************** |
<> | 156:95d6b41a828b | 36 | */ |
<> | 156:95d6b41a828b | 37 | #if defined(USE_FULL_LL_DRIVER) |
<> | 156:95d6b41a828b | 38 | |
<> | 156:95d6b41a828b | 39 | /* Includes ------------------------------------------------------------------*/ |
<> | 156:95d6b41a828b | 40 | #include "stm32f0xx_ll_rcc.h" |
<> | 156:95d6b41a828b | 41 | #ifdef USE_FULL_ASSERT |
<> | 156:95d6b41a828b | 42 | #include "stm32_assert.h" |
<> | 156:95d6b41a828b | 43 | #else |
<> | 156:95d6b41a828b | 44 | #define assert_param(expr) ((void)0U) |
<> | 156:95d6b41a828b | 45 | #endif /* USE_FULL_ASSERT */ |
<> | 156:95d6b41a828b | 46 | /** @addtogroup STM32F0xx_LL_Driver |
<> | 156:95d6b41a828b | 47 | * @{ |
<> | 156:95d6b41a828b | 48 | */ |
<> | 156:95d6b41a828b | 49 | |
<> | 156:95d6b41a828b | 50 | #if defined(RCC) |
<> | 156:95d6b41a828b | 51 | |
<> | 156:95d6b41a828b | 52 | /** @defgroup RCC_LL RCC |
<> | 156:95d6b41a828b | 53 | * @{ |
<> | 156:95d6b41a828b | 54 | */ |
<> | 156:95d6b41a828b | 55 | |
<> | 156:95d6b41a828b | 56 | /* Private types -------------------------------------------------------------*/ |
<> | 156:95d6b41a828b | 57 | /* Private variables ---------------------------------------------------------*/ |
<> | 156:95d6b41a828b | 58 | |
<> | 156:95d6b41a828b | 59 | /* Private constants ---------------------------------------------------------*/ |
<> | 156:95d6b41a828b | 60 | /* Private macros ------------------------------------------------------------*/ |
<> | 156:95d6b41a828b | 61 | /** @addtogroup RCC_LL_Private_Macros |
<> | 156:95d6b41a828b | 62 | * @{ |
<> | 156:95d6b41a828b | 63 | */ |
<> | 156:95d6b41a828b | 64 | #if defined(RCC_CFGR3_USART2SW) && defined(RCC_CFGR3_USART3SW) |
<> | 156:95d6b41a828b | 65 | #define IS_LL_RCC_USART_CLKSOURCE(__VALUE__) (((__VALUE__) == LL_RCC_USART1_CLKSOURCE) \ |
<> | 156:95d6b41a828b | 66 | || ((__VALUE__) == LL_RCC_USART2_CLKSOURCE) \ |
<> | 156:95d6b41a828b | 67 | || ((__VALUE__) == LL_RCC_USART3_CLKSOURCE)) |
<> | 156:95d6b41a828b | 68 | #elif defined(RCC_CFGR3_USART2SW) && !defined(RCC_CFGR3_USART3SW) |
<> | 156:95d6b41a828b | 69 | #define IS_LL_RCC_USART_CLKSOURCE(__VALUE__) (((__VALUE__) == LL_RCC_USART1_CLKSOURCE) \ |
<> | 156:95d6b41a828b | 70 | || ((__VALUE__) == LL_RCC_USART2_CLKSOURCE)) |
<> | 156:95d6b41a828b | 71 | #elif defined(RCC_CFGR3_USART3SW) && !defined(RCC_CFGR3_USART2SW) |
<> | 156:95d6b41a828b | 72 | #define IS_LL_RCC_USART_CLKSOURCE(__VALUE__) (((__VALUE__) == LL_RCC_USART1_CLKSOURCE) \ |
<> | 156:95d6b41a828b | 73 | || ((__VALUE__) == LL_RCC_USART3_CLKSOURCE)) |
<> | 156:95d6b41a828b | 74 | #else |
<> | 156:95d6b41a828b | 75 | #define IS_LL_RCC_USART_CLKSOURCE(__VALUE__) (((__VALUE__) == LL_RCC_USART1_CLKSOURCE)) |
<> | 156:95d6b41a828b | 76 | #endif /* RCC_CFGR3_USART2SW && RCC_CFGR3_USART3SW */ |
<> | 156:95d6b41a828b | 77 | |
<> | 156:95d6b41a828b | 78 | #define IS_LL_RCC_I2C_CLKSOURCE(__VALUE__) ((__VALUE__) == LL_RCC_I2C1_CLKSOURCE) |
<> | 156:95d6b41a828b | 79 | |
<> | 156:95d6b41a828b | 80 | #if defined(USB) |
<> | 156:95d6b41a828b | 81 | #define IS_LL_RCC_USB_CLKSOURCE(__VALUE__) (((__VALUE__) == LL_RCC_USB_CLKSOURCE)) |
<> | 156:95d6b41a828b | 82 | #endif /* USB */ |
<> | 156:95d6b41a828b | 83 | |
<> | 156:95d6b41a828b | 84 | #if defined(CEC) |
<> | 156:95d6b41a828b | 85 | #define IS_LL_RCC_CEC_CLKSOURCE(__VALUE__) (((__VALUE__) == LL_RCC_CEC_CLKSOURCE)) |
<> | 156:95d6b41a828b | 86 | #endif /* CEC */ |
<> | 156:95d6b41a828b | 87 | |
<> | 156:95d6b41a828b | 88 | /** |
<> | 156:95d6b41a828b | 89 | * @} |
<> | 156:95d6b41a828b | 90 | */ |
<> | 156:95d6b41a828b | 91 | |
<> | 156:95d6b41a828b | 92 | /* Private function prototypes -----------------------------------------------*/ |
<> | 156:95d6b41a828b | 93 | /** @defgroup RCC_LL_Private_Functions RCC Private functions |
<> | 156:95d6b41a828b | 94 | * @{ |
<> | 156:95d6b41a828b | 95 | */ |
<> | 156:95d6b41a828b | 96 | uint32_t RCC_GetSystemClockFreq(void); |
<> | 156:95d6b41a828b | 97 | uint32_t RCC_GetHCLKClockFreq(uint32_t SYSCLK_Frequency); |
<> | 156:95d6b41a828b | 98 | uint32_t RCC_GetPCLK1ClockFreq(uint32_t HCLK_Frequency); |
<> | 156:95d6b41a828b | 99 | uint32_t RCC_PLL_GetFreqDomain_SYS(void); |
<> | 156:95d6b41a828b | 100 | /** |
<> | 156:95d6b41a828b | 101 | * @} |
<> | 156:95d6b41a828b | 102 | */ |
<> | 156:95d6b41a828b | 103 | |
<> | 156:95d6b41a828b | 104 | |
<> | 156:95d6b41a828b | 105 | /* Exported functions --------------------------------------------------------*/ |
<> | 156:95d6b41a828b | 106 | /** @addtogroup RCC_LL_Exported_Functions |
<> | 156:95d6b41a828b | 107 | * @{ |
<> | 156:95d6b41a828b | 108 | */ |
<> | 156:95d6b41a828b | 109 | |
<> | 156:95d6b41a828b | 110 | /** @addtogroup RCC_LL_EF_Init |
<> | 156:95d6b41a828b | 111 | * @{ |
<> | 156:95d6b41a828b | 112 | */ |
<> | 156:95d6b41a828b | 113 | |
<> | 156:95d6b41a828b | 114 | /** |
<> | 156:95d6b41a828b | 115 | * @brief Reset the RCC clock configuration to the default reset state. |
<> | 156:95d6b41a828b | 116 | * @note The default reset state of the clock configuration is given below: |
<> | 156:95d6b41a828b | 117 | * - HSI ON and used as system clock source |
<> | 156:95d6b41a828b | 118 | * - HSE and PLL OFF |
<> | 156:95d6b41a828b | 119 | * - AHB and APB1 prescaler set to 1. |
<> | 156:95d6b41a828b | 120 | * - CSS, MCO OFF |
<> | 156:95d6b41a828b | 121 | * - All interrupts disabled |
<> | 156:95d6b41a828b | 122 | * @note This function doesn't modify the configuration of the |
<> | 156:95d6b41a828b | 123 | * - Peripheral clocks |
<> | 156:95d6b41a828b | 124 | * - LSI, LSE and RTC clocks |
<> | 156:95d6b41a828b | 125 | * @retval An ErrorStatus enumeration value: |
<> | 156:95d6b41a828b | 126 | * - SUCCESS: RCC registers are de-initialized |
<> | 156:95d6b41a828b | 127 | * - ERROR: not applicable |
<> | 156:95d6b41a828b | 128 | */ |
<> | 156:95d6b41a828b | 129 | ErrorStatus LL_RCC_DeInit(void) |
<> | 156:95d6b41a828b | 130 | { |
<> | 156:95d6b41a828b | 131 | uint32_t vl_mask = 0U; |
<> | 156:95d6b41a828b | 132 | |
<> | 156:95d6b41a828b | 133 | /* Set HSION bit */ |
<> | 156:95d6b41a828b | 134 | LL_RCC_HSI_Enable(); |
<> | 156:95d6b41a828b | 135 | |
<> | 156:95d6b41a828b | 136 | /* Set HSITRIM bits to the reset value*/ |
<> | 156:95d6b41a828b | 137 | LL_RCC_HSI_SetCalibTrimming(0x10U); |
<> | 156:95d6b41a828b | 138 | |
<> | 156:95d6b41a828b | 139 | /* Reset SW, HPRE, PPRE and MCOSEL bits */ |
<> | 156:95d6b41a828b | 140 | vl_mask = 0xFFFFFFFFU; |
<> | 156:95d6b41a828b | 141 | CLEAR_BIT(vl_mask, (RCC_CFGR_SW | RCC_CFGR_HPRE | RCC_CFGR_PPRE | RCC_CFGR_MCOSEL)); |
<> | 156:95d6b41a828b | 142 | LL_RCC_WriteReg(CFGR, vl_mask); |
<> | 156:95d6b41a828b | 143 | |
<> | 156:95d6b41a828b | 144 | /* Reset HSEON, CSSON, PLLON bits */ |
<> | 156:95d6b41a828b | 145 | vl_mask = 0xFFFFFFFFU; |
<> | 156:95d6b41a828b | 146 | CLEAR_BIT(vl_mask, (RCC_CR_PLLON | RCC_CR_CSSON | RCC_CR_HSEON)); |
<> | 156:95d6b41a828b | 147 | LL_RCC_WriteReg(CR, vl_mask); |
<> | 156:95d6b41a828b | 148 | |
<> | 156:95d6b41a828b | 149 | /* Reset HSEBYP bit */ |
<> | 156:95d6b41a828b | 150 | LL_RCC_HSE_DisableBypass(); |
<> | 156:95d6b41a828b | 151 | |
<> | 156:95d6b41a828b | 152 | /* Reset CFGR register */ |
<> | 156:95d6b41a828b | 153 | LL_RCC_WriteReg(CFGR, 0x00000000U); |
<> | 156:95d6b41a828b | 154 | |
<> | 156:95d6b41a828b | 155 | #if defined(RCC_HSI48_SUPPORT) |
<> | 156:95d6b41a828b | 156 | /* Reset CR2 register */ |
<> | 156:95d6b41a828b | 157 | LL_RCC_WriteReg(CR2, 0x00000000U); |
<> | 156:95d6b41a828b | 158 | |
<> | 156:95d6b41a828b | 159 | /* Disable HSI48 */ |
<> | 156:95d6b41a828b | 160 | LL_RCC_HSI48_Disable(); |
<> | 156:95d6b41a828b | 161 | |
<> | 156:95d6b41a828b | 162 | #endif /*RCC_HSI48_SUPPORT*/ |
<> | 156:95d6b41a828b | 163 | /* Set HSI14TRIM/HSI14ON/HSI14DIS bits to the reset value*/ |
<> | 156:95d6b41a828b | 164 | LL_RCC_HSI14_SetCalibTrimming(0x10U); |
<> | 156:95d6b41a828b | 165 | LL_RCC_HSI14_Disable(); |
<> | 156:95d6b41a828b | 166 | LL_RCC_HSI14_EnableADCControl(); |
<> | 156:95d6b41a828b | 167 | |
<> | 156:95d6b41a828b | 168 | /* Reset CFGR2 register */ |
<> | 156:95d6b41a828b | 169 | LL_RCC_WriteReg(CFGR2, 0x00000000U); |
<> | 156:95d6b41a828b | 170 | |
<> | 156:95d6b41a828b | 171 | /* Reset CFGR3 register */ |
<> | 156:95d6b41a828b | 172 | LL_RCC_WriteReg(CFGR3, 0x00000000U); |
<> | 156:95d6b41a828b | 173 | |
<> | 156:95d6b41a828b | 174 | /* Clear pending flags */ |
<> | 156:95d6b41a828b | 175 | #if defined(RCC_HSI48_SUPPORT) |
<> | 156:95d6b41a828b | 176 | vl_mask = (LL_RCC_CIR_LSIRDYC | LL_RCC_CIR_LSERDYC | LL_RCC_CIR_HSIRDYC | LL_RCC_CIR_HSERDYC | LL_RCC_CIR_PLLRDYC | LL_RCC_CIR_HSI14RDYC | LL_RCC_CIR_HSI48RDYC | LL_RCC_CIR_CSSC); |
<> | 156:95d6b41a828b | 177 | #else |
<> | 156:95d6b41a828b | 178 | vl_mask = (LL_RCC_CIR_LSIRDYC | LL_RCC_CIR_LSERDYC | LL_RCC_CIR_HSIRDYC | LL_RCC_CIR_HSERDYC | LL_RCC_CIR_PLLRDYC | LL_RCC_CIR_HSI14RDYC | LL_RCC_CIR_CSSC); |
<> | 156:95d6b41a828b | 179 | #endif /* RCC_HSI48_SUPPORT */ |
<> | 156:95d6b41a828b | 180 | SET_BIT(RCC->CIR, vl_mask); |
<> | 156:95d6b41a828b | 181 | |
<> | 156:95d6b41a828b | 182 | /* Disable all interrupts */ |
<> | 156:95d6b41a828b | 183 | LL_RCC_WriteReg(CIR, 0x00000000U); |
<> | 156:95d6b41a828b | 184 | |
<> | 156:95d6b41a828b | 185 | return SUCCESS; |
<> | 156:95d6b41a828b | 186 | } |
<> | 156:95d6b41a828b | 187 | |
<> | 156:95d6b41a828b | 188 | /** |
<> | 156:95d6b41a828b | 189 | * @} |
<> | 156:95d6b41a828b | 190 | */ |
<> | 156:95d6b41a828b | 191 | |
<> | 156:95d6b41a828b | 192 | /** @addtogroup RCC_LL_EF_Get_Freq |
<> | 156:95d6b41a828b | 193 | * @brief Return the frequencies of different on chip clocks; System, AHB and APB1 buses clocks |
<> | 156:95d6b41a828b | 194 | * and different peripheral clocks available on the device. |
<> | 156:95d6b41a828b | 195 | * @note If SYSCLK source is HSI, function returns values based on HSI_VALUE(**) |
<> | 156:95d6b41a828b | 196 | * @note If SYSCLK source is HSE, function returns values based on HSE_VALUE(***) |
<> | 156:95d6b41a828b | 197 | * @note If SYSCLK source is PLL, function returns values based on |
<> | 156:95d6b41a828b | 198 | * HSI_VALUE(**) or HSE_VALUE(***) multiplied/divided by the PLL factors. |
<> | 156:95d6b41a828b | 199 | * @note (**) HSI_VALUE is a defined constant but the real value may vary |
<> | 156:95d6b41a828b | 200 | * depending on the variations in voltage and temperature. |
<> | 156:95d6b41a828b | 201 | * @note (***) HSE_VALUE is a defined constant, user has to ensure that |
<> | 156:95d6b41a828b | 202 | * HSE_VALUE is same as the real frequency of the crystal used. |
<> | 156:95d6b41a828b | 203 | * Otherwise, this function may have wrong result. |
<> | 156:95d6b41a828b | 204 | * @note The result of this function could be incorrect when using fractional |
<> | 156:95d6b41a828b | 205 | * value for HSE crystal. |
<> | 156:95d6b41a828b | 206 | * @note This function can be used by the user application to compute the |
<> | 156:95d6b41a828b | 207 | * baud-rate for the communication peripherals or configure other parameters. |
<> | 156:95d6b41a828b | 208 | * @{ |
<> | 156:95d6b41a828b | 209 | */ |
<> | 156:95d6b41a828b | 210 | |
<> | 156:95d6b41a828b | 211 | /** |
<> | 156:95d6b41a828b | 212 | * @brief Return the frequencies of different on chip clocks; System, AHB and APB1 buses clocks |
<> | 156:95d6b41a828b | 213 | * @note Each time SYSCLK, HCLK and/or PCLK1 clock changes, this function |
<> | 156:95d6b41a828b | 214 | * must be called to update structure fields. Otherwise, any |
<> | 156:95d6b41a828b | 215 | * configuration based on this function will be incorrect. |
<> | 156:95d6b41a828b | 216 | * @param RCC_Clocks pointer to a @ref LL_RCC_ClocksTypeDef structure which will hold the clocks frequencies |
<> | 156:95d6b41a828b | 217 | * @retval None |
<> | 156:95d6b41a828b | 218 | */ |
<> | 156:95d6b41a828b | 219 | void LL_RCC_GetSystemClocksFreq(LL_RCC_ClocksTypeDef *RCC_Clocks) |
<> | 156:95d6b41a828b | 220 | { |
<> | 156:95d6b41a828b | 221 | /* Get SYSCLK frequency */ |
<> | 156:95d6b41a828b | 222 | RCC_Clocks->SYSCLK_Frequency = RCC_GetSystemClockFreq(); |
<> | 156:95d6b41a828b | 223 | |
<> | 156:95d6b41a828b | 224 | /* HCLK clock frequency */ |
<> | 156:95d6b41a828b | 225 | RCC_Clocks->HCLK_Frequency = RCC_GetHCLKClockFreq(RCC_Clocks->SYSCLK_Frequency); |
<> | 156:95d6b41a828b | 226 | |
<> | 156:95d6b41a828b | 227 | /* PCLK1 clock frequency */ |
<> | 156:95d6b41a828b | 228 | RCC_Clocks->PCLK1_Frequency = RCC_GetPCLK1ClockFreq(RCC_Clocks->HCLK_Frequency); |
<> | 156:95d6b41a828b | 229 | } |
<> | 156:95d6b41a828b | 230 | |
<> | 156:95d6b41a828b | 231 | /** |
<> | 156:95d6b41a828b | 232 | * @brief Return USARTx clock frequency |
<> | 156:95d6b41a828b | 233 | * @param USARTxSource This parameter can be one of the following values: |
<> | 156:95d6b41a828b | 234 | * @arg @ref LL_RCC_USART1_CLKSOURCE |
<> | 156:95d6b41a828b | 235 | * @arg @ref LL_RCC_USART2_CLKSOURCE (*) |
<> | 156:95d6b41a828b | 236 | * @arg @ref LL_RCC_USART3_CLKSOURCE (*) |
<> | 156:95d6b41a828b | 237 | * |
<> | 156:95d6b41a828b | 238 | * (*) value not defined in all devices. |
<> | 156:95d6b41a828b | 239 | * @retval USART clock frequency (in Hz) |
<> | 156:95d6b41a828b | 240 | * @arg @ref LL_RCC_PERIPH_FREQUENCY_NO indicates that oscillator (HSI or LSE) is not ready |
<> | 156:95d6b41a828b | 241 | */ |
<> | 156:95d6b41a828b | 242 | uint32_t LL_RCC_GetUSARTClockFreq(uint32_t USARTxSource) |
<> | 156:95d6b41a828b | 243 | { |
<> | 156:95d6b41a828b | 244 | uint32_t usart_frequency = LL_RCC_PERIPH_FREQUENCY_NO; |
<> | 156:95d6b41a828b | 245 | |
<> | 156:95d6b41a828b | 246 | /* Check parameter */ |
<> | 156:95d6b41a828b | 247 | assert_param(IS_LL_RCC_USART_CLKSOURCE(USARTxSource)); |
<> | 156:95d6b41a828b | 248 | #if defined(RCC_CFGR3_USART1SW) |
<> | 156:95d6b41a828b | 249 | if (USARTxSource == LL_RCC_USART1_CLKSOURCE) |
<> | 156:95d6b41a828b | 250 | { |
<> | 156:95d6b41a828b | 251 | /* USART1CLK clock frequency */ |
<> | 156:95d6b41a828b | 252 | switch (LL_RCC_GetUSARTClockSource(USARTxSource)) |
<> | 156:95d6b41a828b | 253 | { |
<> | 156:95d6b41a828b | 254 | case LL_RCC_USART1_CLKSOURCE_SYSCLK: /* USART1 Clock is System Clock */ |
<> | 156:95d6b41a828b | 255 | usart_frequency = RCC_GetSystemClockFreq(); |
<> | 156:95d6b41a828b | 256 | break; |
<> | 156:95d6b41a828b | 257 | |
<> | 156:95d6b41a828b | 258 | case LL_RCC_USART1_CLKSOURCE_HSI: /* USART1 Clock is HSI Osc. */ |
<> | 156:95d6b41a828b | 259 | if (LL_RCC_HSI_IsReady()) |
<> | 156:95d6b41a828b | 260 | { |
<> | 156:95d6b41a828b | 261 | usart_frequency = HSI_VALUE; |
<> | 156:95d6b41a828b | 262 | } |
<> | 156:95d6b41a828b | 263 | break; |
<> | 156:95d6b41a828b | 264 | |
<> | 156:95d6b41a828b | 265 | case LL_RCC_USART1_CLKSOURCE_LSE: /* USART1 Clock is LSE Osc. */ |
<> | 156:95d6b41a828b | 266 | if (LL_RCC_LSE_IsReady()) |
<> | 156:95d6b41a828b | 267 | { |
<> | 156:95d6b41a828b | 268 | usart_frequency = LSE_VALUE; |
<> | 156:95d6b41a828b | 269 | } |
<> | 156:95d6b41a828b | 270 | break; |
<> | 156:95d6b41a828b | 271 | |
<> | 156:95d6b41a828b | 272 | case LL_RCC_USART1_CLKSOURCE_PCLK1: /* USART1 Clock is PCLK1 */ |
<> | 156:95d6b41a828b | 273 | default: |
<> | 156:95d6b41a828b | 274 | usart_frequency = RCC_GetPCLK1ClockFreq(RCC_GetHCLKClockFreq(RCC_GetSystemClockFreq())); |
<> | 156:95d6b41a828b | 275 | break; |
<> | 156:95d6b41a828b | 276 | } |
<> | 156:95d6b41a828b | 277 | } |
<> | 156:95d6b41a828b | 278 | #endif /* RCC_CFGR3_USART1SW */ |
<> | 156:95d6b41a828b | 279 | |
<> | 156:95d6b41a828b | 280 | #if defined(RCC_CFGR3_USART2SW) |
<> | 156:95d6b41a828b | 281 | if (USARTxSource == LL_RCC_USART2_CLKSOURCE) |
<> | 156:95d6b41a828b | 282 | { |
<> | 156:95d6b41a828b | 283 | /* USART2CLK clock frequency */ |
<> | 156:95d6b41a828b | 284 | switch (LL_RCC_GetUSARTClockSource(USARTxSource)) |
<> | 156:95d6b41a828b | 285 | { |
<> | 156:95d6b41a828b | 286 | case LL_RCC_USART2_CLKSOURCE_SYSCLK: /* USART2 Clock is System Clock */ |
<> | 156:95d6b41a828b | 287 | usart_frequency = RCC_GetSystemClockFreq(); |
<> | 156:95d6b41a828b | 288 | break; |
<> | 156:95d6b41a828b | 289 | |
<> | 156:95d6b41a828b | 290 | case LL_RCC_USART2_CLKSOURCE_HSI: /* USART2 Clock is HSI Osc. */ |
<> | 156:95d6b41a828b | 291 | if (LL_RCC_HSI_IsReady()) |
<> | 156:95d6b41a828b | 292 | { |
<> | 156:95d6b41a828b | 293 | usart_frequency = HSI_VALUE; |
<> | 156:95d6b41a828b | 294 | } |
<> | 156:95d6b41a828b | 295 | break; |
<> | 156:95d6b41a828b | 296 | |
<> | 156:95d6b41a828b | 297 | case LL_RCC_USART2_CLKSOURCE_LSE: /* USART2 Clock is LSE Osc. */ |
<> | 156:95d6b41a828b | 298 | if (LL_RCC_LSE_IsReady()) |
<> | 156:95d6b41a828b | 299 | { |
<> | 156:95d6b41a828b | 300 | usart_frequency = LSE_VALUE; |
<> | 156:95d6b41a828b | 301 | } |
<> | 156:95d6b41a828b | 302 | break; |
<> | 156:95d6b41a828b | 303 | |
<> | 156:95d6b41a828b | 304 | case LL_RCC_USART2_CLKSOURCE_PCLK1: /* USART2 Clock is PCLK1 */ |
<> | 156:95d6b41a828b | 305 | default: |
<> | 156:95d6b41a828b | 306 | usart_frequency = RCC_GetPCLK1ClockFreq(RCC_GetHCLKClockFreq(RCC_GetSystemClockFreq())); |
<> | 156:95d6b41a828b | 307 | break; |
<> | 156:95d6b41a828b | 308 | } |
<> | 156:95d6b41a828b | 309 | } |
<> | 156:95d6b41a828b | 310 | #endif /* RCC_CFGR3_USART2SW */ |
<> | 156:95d6b41a828b | 311 | |
<> | 156:95d6b41a828b | 312 | #if defined(RCC_CFGR3_USART3SW) |
<> | 156:95d6b41a828b | 313 | if (USARTxSource == LL_RCC_USART3_CLKSOURCE) |
<> | 156:95d6b41a828b | 314 | { |
<> | 156:95d6b41a828b | 315 | /* USART3CLK clock frequency */ |
<> | 156:95d6b41a828b | 316 | switch (LL_RCC_GetUSARTClockSource(USARTxSource)) |
<> | 156:95d6b41a828b | 317 | { |
<> | 156:95d6b41a828b | 318 | case LL_RCC_USART3_CLKSOURCE_SYSCLK: /* USART3 Clock is System Clock */ |
<> | 156:95d6b41a828b | 319 | usart_frequency = RCC_GetSystemClockFreq(); |
<> | 156:95d6b41a828b | 320 | break; |
<> | 156:95d6b41a828b | 321 | |
<> | 156:95d6b41a828b | 322 | case LL_RCC_USART3_CLKSOURCE_HSI: /* USART3 Clock is HSI Osc. */ |
<> | 156:95d6b41a828b | 323 | if (LL_RCC_HSI_IsReady()) |
<> | 156:95d6b41a828b | 324 | { |
<> | 156:95d6b41a828b | 325 | usart_frequency = HSI_VALUE; |
<> | 156:95d6b41a828b | 326 | } |
<> | 156:95d6b41a828b | 327 | break; |
<> | 156:95d6b41a828b | 328 | |
<> | 156:95d6b41a828b | 329 | case LL_RCC_USART3_CLKSOURCE_LSE: /* USART3 Clock is LSE Osc. */ |
<> | 156:95d6b41a828b | 330 | if (LL_RCC_LSE_IsReady()) |
<> | 156:95d6b41a828b | 331 | { |
<> | 156:95d6b41a828b | 332 | usart_frequency = LSE_VALUE; |
<> | 156:95d6b41a828b | 333 | } |
<> | 156:95d6b41a828b | 334 | break; |
<> | 156:95d6b41a828b | 335 | |
<> | 156:95d6b41a828b | 336 | case LL_RCC_USART3_CLKSOURCE_PCLK1: /* USART3 Clock is PCLK1 */ |
<> | 156:95d6b41a828b | 337 | default: |
<> | 156:95d6b41a828b | 338 | usart_frequency = RCC_GetPCLK1ClockFreq(RCC_GetHCLKClockFreq(RCC_GetSystemClockFreq())); |
<> | 156:95d6b41a828b | 339 | break; |
<> | 156:95d6b41a828b | 340 | } |
<> | 156:95d6b41a828b | 341 | } |
<> | 156:95d6b41a828b | 342 | |
<> | 156:95d6b41a828b | 343 | #endif /* RCC_CFGR3_USART3SW */ |
<> | 156:95d6b41a828b | 344 | return usart_frequency; |
<> | 156:95d6b41a828b | 345 | } |
<> | 156:95d6b41a828b | 346 | |
<> | 156:95d6b41a828b | 347 | /** |
<> | 156:95d6b41a828b | 348 | * @brief Return I2Cx clock frequency |
<> | 156:95d6b41a828b | 349 | * @param I2CxSource This parameter can be one of the following values: |
<> | 156:95d6b41a828b | 350 | * @arg @ref LL_RCC_I2C1_CLKSOURCE |
<> | 156:95d6b41a828b | 351 | * @retval I2C clock frequency (in Hz) |
<> | 156:95d6b41a828b | 352 | * @arg @ref LL_RCC_PERIPH_FREQUENCY_NO indicates that HSI oscillator is not ready |
<> | 156:95d6b41a828b | 353 | */ |
<> | 156:95d6b41a828b | 354 | uint32_t LL_RCC_GetI2CClockFreq(uint32_t I2CxSource) |
<> | 156:95d6b41a828b | 355 | { |
<> | 156:95d6b41a828b | 356 | uint32_t i2c_frequency = LL_RCC_PERIPH_FREQUENCY_NO; |
<> | 156:95d6b41a828b | 357 | |
<> | 156:95d6b41a828b | 358 | /* Check parameter */ |
<> | 156:95d6b41a828b | 359 | assert_param(IS_LL_RCC_I2C_CLKSOURCE(I2CxSource)); |
<> | 156:95d6b41a828b | 360 | |
<> | 156:95d6b41a828b | 361 | /* I2C1 CLK clock frequency */ |
<> | 156:95d6b41a828b | 362 | if (I2CxSource == LL_RCC_I2C1_CLKSOURCE) |
<> | 156:95d6b41a828b | 363 | { |
<> | 156:95d6b41a828b | 364 | switch (LL_RCC_GetI2CClockSource(I2CxSource)) |
<> | 156:95d6b41a828b | 365 | { |
<> | 156:95d6b41a828b | 366 | case LL_RCC_I2C1_CLKSOURCE_SYSCLK: /* I2C1 Clock is System Clock */ |
<> | 156:95d6b41a828b | 367 | i2c_frequency = RCC_GetSystemClockFreq(); |
<> | 156:95d6b41a828b | 368 | break; |
<> | 156:95d6b41a828b | 369 | |
<> | 156:95d6b41a828b | 370 | case LL_RCC_I2C1_CLKSOURCE_HSI: /* I2C1 Clock is HSI Osc. */ |
<> | 156:95d6b41a828b | 371 | default: |
<> | 156:95d6b41a828b | 372 | if (LL_RCC_HSI_IsReady()) |
<> | 156:95d6b41a828b | 373 | { |
<> | 156:95d6b41a828b | 374 | i2c_frequency = HSI_VALUE; |
<> | 156:95d6b41a828b | 375 | } |
<> | 156:95d6b41a828b | 376 | break; |
<> | 156:95d6b41a828b | 377 | } |
<> | 156:95d6b41a828b | 378 | } |
<> | 156:95d6b41a828b | 379 | |
<> | 156:95d6b41a828b | 380 | return i2c_frequency; |
<> | 156:95d6b41a828b | 381 | } |
<> | 156:95d6b41a828b | 382 | |
<> | 156:95d6b41a828b | 383 | #if defined(USB) |
<> | 156:95d6b41a828b | 384 | /** |
<> | 156:95d6b41a828b | 385 | * @brief Return USBx clock frequency |
<> | 156:95d6b41a828b | 386 | * @param USBxSource This parameter can be one of the following values: |
<> | 156:95d6b41a828b | 387 | * @arg @ref LL_RCC_USB_CLKSOURCE |
<> | 156:95d6b41a828b | 388 | * @retval USB clock frequency (in Hz) |
<> | 156:95d6b41a828b | 389 | * @arg @ref LL_RCC_PERIPH_FREQUENCY_NO indicates that oscillator (HSI48) or PLL is not ready |
<> | 156:95d6b41a828b | 390 | * @arg @ref LL_RCC_PERIPH_FREQUENCY_NA indicates that no clock source selected |
<> | 156:95d6b41a828b | 391 | */ |
<> | 156:95d6b41a828b | 392 | uint32_t LL_RCC_GetUSBClockFreq(uint32_t USBxSource) |
<> | 156:95d6b41a828b | 393 | { |
<> | 156:95d6b41a828b | 394 | uint32_t usb_frequency = LL_RCC_PERIPH_FREQUENCY_NO; |
<> | 156:95d6b41a828b | 395 | |
<> | 156:95d6b41a828b | 396 | /* Check parameter */ |
<> | 156:95d6b41a828b | 397 | assert_param(IS_LL_RCC_USB_CLKSOURCE(USBxSource)); |
<> | 156:95d6b41a828b | 398 | |
<> | 156:95d6b41a828b | 399 | /* USBCLK clock frequency */ |
<> | 156:95d6b41a828b | 400 | switch (LL_RCC_GetUSBClockSource(USBxSource)) |
<> | 156:95d6b41a828b | 401 | { |
<> | 156:95d6b41a828b | 402 | case LL_RCC_USB_CLKSOURCE_PLL: /* PLL clock used as USB clock source */ |
<> | 156:95d6b41a828b | 403 | if (LL_RCC_PLL_IsReady()) |
<> | 156:95d6b41a828b | 404 | { |
<> | 156:95d6b41a828b | 405 | usb_frequency = RCC_PLL_GetFreqDomain_SYS(); |
<> | 156:95d6b41a828b | 406 | } |
<> | 156:95d6b41a828b | 407 | break; |
<> | 156:95d6b41a828b | 408 | |
<> | 156:95d6b41a828b | 409 | #if defined(RCC_CFGR3_USBSW_HSI48) |
<> | 156:95d6b41a828b | 410 | case LL_RCC_USB_CLKSOURCE_HSI48: /* HSI48 clock used as USB clock source */ |
<> | 156:95d6b41a828b | 411 | default: |
<> | 156:95d6b41a828b | 412 | if (LL_RCC_HSI48_IsReady()) |
<> | 156:95d6b41a828b | 413 | { |
<> | 156:95d6b41a828b | 414 | usb_frequency = HSI48_VALUE; |
<> | 156:95d6b41a828b | 415 | } |
<> | 156:95d6b41a828b | 416 | break; |
<> | 156:95d6b41a828b | 417 | #else |
<> | 156:95d6b41a828b | 418 | case LL_RCC_USB_CLKSOURCE_NONE: /* No clock used as USB clock source */ |
<> | 156:95d6b41a828b | 419 | default: |
<> | 156:95d6b41a828b | 420 | usb_frequency = LL_RCC_PERIPH_FREQUENCY_NA; |
<> | 156:95d6b41a828b | 421 | break; |
<> | 156:95d6b41a828b | 422 | #endif /* RCC_CFGR3_USBSW_HSI48 */ |
<> | 156:95d6b41a828b | 423 | } |
<> | 156:95d6b41a828b | 424 | |
<> | 156:95d6b41a828b | 425 | return usb_frequency; |
<> | 156:95d6b41a828b | 426 | } |
<> | 156:95d6b41a828b | 427 | #endif /* USB */ |
<> | 156:95d6b41a828b | 428 | |
<> | 156:95d6b41a828b | 429 | #if defined(CEC) |
<> | 156:95d6b41a828b | 430 | /** |
<> | 156:95d6b41a828b | 431 | * @brief Return CECx clock frequency |
<> | 156:95d6b41a828b | 432 | * @param CECxSource This parameter can be one of the following values: |
<> | 156:95d6b41a828b | 433 | * @arg @ref LL_RCC_CEC_CLKSOURCE |
<> | 156:95d6b41a828b | 434 | * @retval CEC clock frequency (in Hz) |
<> | 156:95d6b41a828b | 435 | * @arg @ref LL_RCC_PERIPH_FREQUENCY_NO indicates that oscillators (HSI or LSE) are not ready |
<> | 156:95d6b41a828b | 436 | */ |
<> | 156:95d6b41a828b | 437 | uint32_t LL_RCC_GetCECClockFreq(uint32_t CECxSource) |
<> | 156:95d6b41a828b | 438 | { |
<> | 156:95d6b41a828b | 439 | uint32_t cec_frequency = LL_RCC_PERIPH_FREQUENCY_NO; |
<> | 156:95d6b41a828b | 440 | |
<> | 156:95d6b41a828b | 441 | /* Check parameter */ |
<> | 156:95d6b41a828b | 442 | assert_param(IS_LL_RCC_CEC_CLKSOURCE(CECxSource)); |
<> | 156:95d6b41a828b | 443 | |
<> | 156:95d6b41a828b | 444 | /* CECCLK clock frequency */ |
<> | 156:95d6b41a828b | 445 | switch (LL_RCC_GetCECClockSource(CECxSource)) |
<> | 156:95d6b41a828b | 446 | { |
<> | 156:95d6b41a828b | 447 | case LL_RCC_CEC_CLKSOURCE_HSI_DIV244: /* HSI / 244 clock used as CEC clock source */ |
<> | 156:95d6b41a828b | 448 | if (LL_RCC_HSI_IsReady()) |
<> | 156:95d6b41a828b | 449 | { |
<> | 156:95d6b41a828b | 450 | cec_frequency = HSI_VALUE / 244U; |
<> | 156:95d6b41a828b | 451 | } |
<> | 156:95d6b41a828b | 452 | break; |
<> | 156:95d6b41a828b | 453 | |
<> | 156:95d6b41a828b | 454 | case LL_RCC_CEC_CLKSOURCE_LSE: /* LSE clock used as CEC clock source */ |
<> | 156:95d6b41a828b | 455 | default: |
<> | 156:95d6b41a828b | 456 | if (LL_RCC_LSE_IsReady()) |
<> | 156:95d6b41a828b | 457 | { |
<> | 156:95d6b41a828b | 458 | cec_frequency = LSE_VALUE; |
<> | 156:95d6b41a828b | 459 | } |
<> | 156:95d6b41a828b | 460 | break; |
<> | 156:95d6b41a828b | 461 | } |
<> | 156:95d6b41a828b | 462 | |
<> | 156:95d6b41a828b | 463 | return cec_frequency; |
<> | 156:95d6b41a828b | 464 | } |
<> | 156:95d6b41a828b | 465 | #endif /* CEC */ |
<> | 156:95d6b41a828b | 466 | |
<> | 156:95d6b41a828b | 467 | /** |
<> | 156:95d6b41a828b | 468 | * @} |
<> | 156:95d6b41a828b | 469 | */ |
<> | 156:95d6b41a828b | 470 | |
<> | 156:95d6b41a828b | 471 | /** |
<> | 156:95d6b41a828b | 472 | * @} |
<> | 156:95d6b41a828b | 473 | */ |
<> | 156:95d6b41a828b | 474 | |
<> | 156:95d6b41a828b | 475 | /** @addtogroup RCC_LL_Private_Functions |
<> | 156:95d6b41a828b | 476 | * @{ |
<> | 156:95d6b41a828b | 477 | */ |
<> | 156:95d6b41a828b | 478 | |
<> | 156:95d6b41a828b | 479 | /** |
<> | 156:95d6b41a828b | 480 | * @brief Return SYSTEM clock frequency |
<> | 156:95d6b41a828b | 481 | * @retval SYSTEM clock frequency (in Hz) |
<> | 156:95d6b41a828b | 482 | */ |
<> | 156:95d6b41a828b | 483 | uint32_t RCC_GetSystemClockFreq(void) |
<> | 156:95d6b41a828b | 484 | { |
<> | 156:95d6b41a828b | 485 | uint32_t frequency = 0U; |
<> | 156:95d6b41a828b | 486 | |
<> | 156:95d6b41a828b | 487 | /* Get SYSCLK source -------------------------------------------------------*/ |
<> | 156:95d6b41a828b | 488 | switch (LL_RCC_GetSysClkSource()) |
<> | 156:95d6b41a828b | 489 | { |
<> | 156:95d6b41a828b | 490 | case LL_RCC_SYS_CLKSOURCE_STATUS_HSI: /* HSI used as system clock source */ |
<> | 156:95d6b41a828b | 491 | frequency = HSI_VALUE; |
<> | 156:95d6b41a828b | 492 | break; |
<> | 156:95d6b41a828b | 493 | |
<> | 156:95d6b41a828b | 494 | case LL_RCC_SYS_CLKSOURCE_STATUS_HSE: /* HSE used as system clock source */ |
<> | 156:95d6b41a828b | 495 | frequency = HSE_VALUE; |
<> | 156:95d6b41a828b | 496 | break; |
<> | 156:95d6b41a828b | 497 | |
<> | 156:95d6b41a828b | 498 | case LL_RCC_SYS_CLKSOURCE_STATUS_PLL: /* PLL used as system clock source */ |
<> | 156:95d6b41a828b | 499 | frequency = RCC_PLL_GetFreqDomain_SYS(); |
<> | 156:95d6b41a828b | 500 | break; |
<> | 156:95d6b41a828b | 501 | |
<> | 156:95d6b41a828b | 502 | default: |
<> | 156:95d6b41a828b | 503 | frequency = HSI_VALUE; |
<> | 156:95d6b41a828b | 504 | break; |
<> | 156:95d6b41a828b | 505 | } |
<> | 156:95d6b41a828b | 506 | |
<> | 156:95d6b41a828b | 507 | return frequency; |
<> | 156:95d6b41a828b | 508 | } |
<> | 156:95d6b41a828b | 509 | |
<> | 156:95d6b41a828b | 510 | /** |
<> | 156:95d6b41a828b | 511 | * @brief Return HCLK clock frequency |
<> | 156:95d6b41a828b | 512 | * @param SYSCLK_Frequency SYSCLK clock frequency |
<> | 156:95d6b41a828b | 513 | * @retval HCLK clock frequency (in Hz) |
<> | 156:95d6b41a828b | 514 | */ |
<> | 156:95d6b41a828b | 515 | uint32_t RCC_GetHCLKClockFreq(uint32_t SYSCLK_Frequency) |
<> | 156:95d6b41a828b | 516 | { |
<> | 156:95d6b41a828b | 517 | /* HCLK clock frequency */ |
<> | 156:95d6b41a828b | 518 | return __LL_RCC_CALC_HCLK_FREQ(SYSCLK_Frequency, LL_RCC_GetAHBPrescaler()); |
<> | 156:95d6b41a828b | 519 | } |
<> | 156:95d6b41a828b | 520 | |
<> | 156:95d6b41a828b | 521 | /** |
<> | 156:95d6b41a828b | 522 | * @brief Return PCLK1 clock frequency |
<> | 156:95d6b41a828b | 523 | * @param HCLK_Frequency HCLK clock frequency |
<> | 156:95d6b41a828b | 524 | * @retval PCLK1 clock frequency (in Hz) |
<> | 156:95d6b41a828b | 525 | */ |
<> | 156:95d6b41a828b | 526 | uint32_t RCC_GetPCLK1ClockFreq(uint32_t HCLK_Frequency) |
<> | 156:95d6b41a828b | 527 | { |
<> | 156:95d6b41a828b | 528 | /* PCLK1 clock frequency */ |
<> | 156:95d6b41a828b | 529 | return __LL_RCC_CALC_PCLK1_FREQ(HCLK_Frequency, LL_RCC_GetAPB1Prescaler()); |
<> | 156:95d6b41a828b | 530 | } |
<> | 156:95d6b41a828b | 531 | /** |
<> | 156:95d6b41a828b | 532 | * @brief Return PLL clock frequency used for system domain |
<> | 156:95d6b41a828b | 533 | * @retval PLL clock frequency (in Hz) |
<> | 156:95d6b41a828b | 534 | */ |
<> | 156:95d6b41a828b | 535 | uint32_t RCC_PLL_GetFreqDomain_SYS(void) |
<> | 156:95d6b41a828b | 536 | { |
<> | 156:95d6b41a828b | 537 | uint32_t pllinputfreq = 0U, pllsource = 0U; |
<> | 156:95d6b41a828b | 538 | |
<> | 156:95d6b41a828b | 539 | /* PLL_VCO = (HSE_VALUE or HSI_VALUE / PLL divider) * PLL Multiplicator */ |
<> | 156:95d6b41a828b | 540 | |
<> | 156:95d6b41a828b | 541 | /* Get PLL source */ |
<> | 156:95d6b41a828b | 542 | pllsource = LL_RCC_PLL_GetMainSource(); |
<> | 156:95d6b41a828b | 543 | |
<> | 156:95d6b41a828b | 544 | switch (pllsource) |
<> | 156:95d6b41a828b | 545 | { |
<> | 156:95d6b41a828b | 546 | #if defined(RCC_PLLSRC_PREDIV1_SUPPORT) |
<> | 156:95d6b41a828b | 547 | case LL_RCC_PLLSOURCE_HSI: /* HSI used as PLL clock source */ |
<> | 156:95d6b41a828b | 548 | pllinputfreq = HSI_VALUE; |
<> | 156:95d6b41a828b | 549 | #else |
<> | 156:95d6b41a828b | 550 | case LL_RCC_PLLSOURCE_HSI_DIV_2: /* HSI used as PLL clock source */ |
<> | 156:95d6b41a828b | 551 | pllinputfreq = HSI_VALUE / 2; |
<> | 156:95d6b41a828b | 552 | #endif /* RCC_PLLSRC_PREDIV1_SUPPORT */ |
<> | 156:95d6b41a828b | 553 | break; |
<> | 156:95d6b41a828b | 554 | |
<> | 156:95d6b41a828b | 555 | #if defined(RCC_CFGR_SW_HSI48) |
<> | 156:95d6b41a828b | 556 | case LL_RCC_PLLSOURCE_HSI48: /* HSI48 used as PLL clock source */ |
<> | 156:95d6b41a828b | 557 | pllinputfreq = HSI48_VALUE; |
<> | 156:95d6b41a828b | 558 | break; |
<> | 156:95d6b41a828b | 559 | #endif /* RCC_CFGR_SW_HSI48 */ |
<> | 156:95d6b41a828b | 560 | |
<> | 156:95d6b41a828b | 561 | case LL_RCC_PLLSOURCE_HSE: /* HSE used as PLL clock source */ |
<> | 156:95d6b41a828b | 562 | pllinputfreq = HSE_VALUE; |
<> | 156:95d6b41a828b | 563 | break; |
<> | 156:95d6b41a828b | 564 | |
<> | 156:95d6b41a828b | 565 | default: |
<> | 156:95d6b41a828b | 566 | #if defined(RCC_PLLSRC_PREDIV1_SUPPORT) |
<> | 156:95d6b41a828b | 567 | pllinputfreq = HSI_VALUE; |
<> | 156:95d6b41a828b | 568 | #else |
<> | 156:95d6b41a828b | 569 | pllinputfreq = HSI_VALUE / 2; |
<> | 156:95d6b41a828b | 570 | #endif /* RCC_PLLSRC_PREDIV1_SUPPORT */ |
<> | 156:95d6b41a828b | 571 | break; |
<> | 156:95d6b41a828b | 572 | } |
<> | 156:95d6b41a828b | 573 | #if defined(RCC_PLLSRC_PREDIV1_SUPPORT) |
<> | 156:95d6b41a828b | 574 | return __LL_RCC_CALC_PLLCLK_FREQ(pllinputfreq, LL_RCC_PLL_GetMultiplicator(), LL_RCC_PLL_GetPrediv()); |
<> | 156:95d6b41a828b | 575 | #else |
<> | 156:95d6b41a828b | 576 | return __LL_RCC_CALC_PLLCLK_FREQ((pllinputfreq / (LL_RCC_PLL_GetPrediv() + 1U)), LL_RCC_PLL_GetMultiplicator()); |
<> | 156:95d6b41a828b | 577 | #endif /* RCC_PLLSRC_PREDIV1_SUPPORT */ |
<> | 156:95d6b41a828b | 578 | } |
<> | 156:95d6b41a828b | 579 | /** |
<> | 156:95d6b41a828b | 580 | * @} |
<> | 156:95d6b41a828b | 581 | */ |
<> | 156:95d6b41a828b | 582 | |
<> | 156:95d6b41a828b | 583 | /** |
<> | 156:95d6b41a828b | 584 | * @} |
<> | 156:95d6b41a828b | 585 | */ |
<> | 156:95d6b41a828b | 586 | |
<> | 156:95d6b41a828b | 587 | #endif /* defined(RCC) */ |
<> | 156:95d6b41a828b | 588 | |
<> | 156:95d6b41a828b | 589 | /** |
<> | 156:95d6b41a828b | 590 | * @} |
<> | 156:95d6b41a828b | 591 | */ |
<> | 156:95d6b41a828b | 592 | |
<> | 156:95d6b41a828b | 593 | #endif /* USE_FULL_LL_DRIVER */ |
<> | 156:95d6b41a828b | 594 | |
<> | 156:95d6b41a828b | 595 | /************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ |