mbed library sources

Dependents:   Encrypted my_mbed lklk CyaSSL_DTLS_Cellular ... more

Superseded

This library was superseded by mbed-dev - https://os.mbed.com/users/mbed_official/code/mbed-dev/.

Development branch of the mbed library sources. This library is kept in synch with the latest changes from the mbed SDK and it is not guaranteed to work.

If you are looking for a stable and tested release, please import one of the official mbed library releases:

Import librarymbed

The official Mbed 2 C/C++ SDK provides the software platform and libraries to build your applications.

Committer:
mbed_official
Date:
Mon Sep 28 10:45:10 2015 +0100
Revision:
630:825f75ca301e
Parent:
441:d2c15dda23c1
Synchronized with git revision 54fbe4144faf309c37205a5d39fa665daa919f10

Full URL: https://github.com/mbedmicro/mbed/commit/54fbe4144faf309c37205a5d39fa665daa919f10/

NUCLEO_F031K6 : Add new target

Who changed what in which revision?

UserRevisionLine numberNew contents of line
mbed_official 340:28d1f895c6fe 1 /**
mbed_official 340:28d1f895c6fe 2 ******************************************************************************
mbed_official 340:28d1f895c6fe 3 * @file stm32f0xx_hal_rcc_ex.c
mbed_official 340:28d1f895c6fe 4 * @author MCD Application Team
mbed_official 630:825f75ca301e 5 * @version V1.3.0
mbed_official 630:825f75ca301e 6 * @date 26-June-2015
mbed_official 340:28d1f895c6fe 7 * @brief Extended RCC HAL module driver
mbed_official 340:28d1f895c6fe 8 * This file provides firmware functions to manage the following
mbed_official 340:28d1f895c6fe 9 * functionalities RCC extension peripheral:
mbed_official 340:28d1f895c6fe 10 * + Extended Clock Source configuration functions
mbed_official 340:28d1f895c6fe 11 *
mbed_official 340:28d1f895c6fe 12 @verbatim
mbed_official 340:28d1f895c6fe 13 ==============================================================================
mbed_official 340:28d1f895c6fe 14 ##### How to use this driver #####
mbed_official 340:28d1f895c6fe 15 ==============================================================================
mbed_official 340:28d1f895c6fe 16
mbed_official 340:28d1f895c6fe 17 For CRS, RCC Extention HAL driver can be used as follows:
mbed_official 340:28d1f895c6fe 18
mbed_official 340:28d1f895c6fe 19 (#) In System clock config, HSI48 need to be enabled
mbed_official 340:28d1f895c6fe 20
mbed_official 340:28d1f895c6fe 21 (#] Enable CRS clock in IP MSP init which will use CRS functions
mbed_official 340:28d1f895c6fe 22
mbed_official 340:28d1f895c6fe 23 (#) Call CRS functions like this
mbed_official 340:28d1f895c6fe 24 (##) Prepare synchronization configuration necessary for HSI48 calibration
mbed_official 340:28d1f895c6fe 25 (+++) Default values can be set for frequency Error Measurement (reload and error limit)
mbed_official 340:28d1f895c6fe 26 and also HSI48 oscillator smooth trimming.
mbed_official 340:28d1f895c6fe 27 (+++) Macro __HAL_RCC_CRS_CALCULATE_RELOADVALUE can be also used to calculate
mbed_official 340:28d1f895c6fe 28 directly reload value with target and sychronization frequencies values
mbed_official 340:28d1f895c6fe 29 (##) Call function HAL_RCCEx_CRSConfig which
mbed_official 340:28d1f895c6fe 30 (+++) Reset CRS registers to their default values.
mbed_official 340:28d1f895c6fe 31 (+++) Configure CRS registers with synchronization configuration
mbed_official 340:28d1f895c6fe 32 (+++) Enable automatic calibration and frequency error counter feature
mbed_official 340:28d1f895c6fe 33
mbed_official 340:28d1f895c6fe 34 (##) A polling function is provided to wait for complete Synchronization
mbed_official 340:28d1f895c6fe 35 (+++) Call function HAL_RCCEx_CRSWaitSynchronization()
mbed_official 340:28d1f895c6fe 36 (+++) According to CRS status, user can decide to adjust again the calibration or continue
mbed_official 340:28d1f895c6fe 37 application if synchronization is OK
mbed_official 340:28d1f895c6fe 38
mbed_official 340:28d1f895c6fe 39 (#) User can retrieve information related to synchronization in calling function
mbed_official 340:28d1f895c6fe 40 HAL_RCCEx_CRSGetSynchronizationInfo()
mbed_official 340:28d1f895c6fe 41
mbed_official 340:28d1f895c6fe 42 (#) Regarding synchronization status and synchronization information, user can try a new calibration
mbed_official 340:28d1f895c6fe 43 in changing synchronization configuration and call again HAL_RCCEx_CRSConfig.
mbed_official 340:28d1f895c6fe 44 Note: When the SYNC event is detected during the downcounting phase (before reaching the zero value),
mbed_official 340:28d1f895c6fe 45 it means that the actual frequency is lower than the target (and so, that the TRIM value should be
mbed_official 340:28d1f895c6fe 46 incremented), while when it is detected during the upcounting phase it means that the actual frequency
mbed_official 340:28d1f895c6fe 47 is higher (and that the TRIM value should be decremented).
mbed_official 340:28d1f895c6fe 48
mbed_official 340:28d1f895c6fe 49 (#) To use IT mode, user needs to handle it in calling different macros available to do it
mbed_official 340:28d1f895c6fe 50 (__HAL_RCC_CRS_XXX_IT). Interuptions will go through RCC Handler (RCC_IRQn/RCC_CRS_IRQHandler)
mbed_official 340:28d1f895c6fe 51 (++) Call function HAL_RCCEx_CRSConfig()
mbed_official 340:28d1f895c6fe 52 (++) Enable RCC_IRQn (thnaks to NVIC functions)
mbed_official 340:28d1f895c6fe 53 (++) Enable CRS IT (__HAL_RCC_CRS_ENABLE_IT)
mbed_official 340:28d1f895c6fe 54 (++) Implement CRS status management in RCC_CRS_IRQHandler
mbed_official 340:28d1f895c6fe 55
mbed_official 340:28d1f895c6fe 56 (#) To force a SYNC EVENT, user can use function HAL_RCCEx_CRSSoftwareSynchronizationGenerate(). Function can be
mbed_official 340:28d1f895c6fe 57 called before calling HAL_RCCEx_CRSConfig (for instance in Systick handler)
mbed_official 340:28d1f895c6fe 58
mbed_official 340:28d1f895c6fe 59 @endverbatim
mbed_official 340:28d1f895c6fe 60 ******************************************************************************
mbed_official 340:28d1f895c6fe 61 * @attention
mbed_official 340:28d1f895c6fe 62 *
mbed_official 630:825f75ca301e 63 * <h2><center>&copy; COPYRIGHT(c) 2015 STMicroelectronics</center></h2>
mbed_official 340:28d1f895c6fe 64 *
mbed_official 340:28d1f895c6fe 65 * Redistribution and use in source and binary forms, with or without modification,
mbed_official 340:28d1f895c6fe 66 * are permitted provided that the following conditions are met:
mbed_official 340:28d1f895c6fe 67 * 1. Redistributions of source code must retain the above copyright notice,
mbed_official 340:28d1f895c6fe 68 * this list of conditions and the following disclaimer.
mbed_official 340:28d1f895c6fe 69 * 2. Redistributions in binary form must reproduce the above copyright notice,
mbed_official 340:28d1f895c6fe 70 * this list of conditions and the following disclaimer in the documentation
mbed_official 340:28d1f895c6fe 71 * and/or other materials provided with the distribution.
mbed_official 340:28d1f895c6fe 72 * 3. Neither the name of STMicroelectronics nor the names of its contributors
mbed_official 340:28d1f895c6fe 73 * may be used to endorse or promote products derived from this software
mbed_official 340:28d1f895c6fe 74 * without specific prior written permission.
mbed_official 340:28d1f895c6fe 75 *
mbed_official 340:28d1f895c6fe 76 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
mbed_official 340:28d1f895c6fe 77 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
mbed_official 340:28d1f895c6fe 78 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
mbed_official 340:28d1f895c6fe 79 * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
mbed_official 340:28d1f895c6fe 80 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
mbed_official 340:28d1f895c6fe 81 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
mbed_official 340:28d1f895c6fe 82 * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
mbed_official 340:28d1f895c6fe 83 * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
mbed_official 340:28d1f895c6fe 84 * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
mbed_official 340:28d1f895c6fe 85 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
mbed_official 340:28d1f895c6fe 86 *
mbed_official 340:28d1f895c6fe 87 ******************************************************************************
mbed_official 340:28d1f895c6fe 88 */
mbed_official 340:28d1f895c6fe 89
mbed_official 340:28d1f895c6fe 90 /* Includes ------------------------------------------------------------------*/
mbed_official 340:28d1f895c6fe 91 #include "stm32f0xx_hal.h"
mbed_official 340:28d1f895c6fe 92
mbed_official 340:28d1f895c6fe 93 /** @addtogroup STM32F0xx_HAL_Driver
mbed_official 340:28d1f895c6fe 94 * @{
mbed_official 340:28d1f895c6fe 95 */
mbed_official 340:28d1f895c6fe 96
mbed_official 630:825f75ca301e 97 #ifdef HAL_RCC_MODULE_ENABLED
mbed_official 630:825f75ca301e 98
mbed_official 630:825f75ca301e 99 /** @defgroup RCCEx RCCEx
mbed_official 340:28d1f895c6fe 100 * @brief RCC Extension HAL module driver.
mbed_official 340:28d1f895c6fe 101 * @{
mbed_official 340:28d1f895c6fe 102 */
mbed_official 340:28d1f895c6fe 103
mbed_official 340:28d1f895c6fe 104 /* Private typedef -----------------------------------------------------------*/
mbed_official 340:28d1f895c6fe 105 /* Private define ------------------------------------------------------------*/
mbed_official 630:825f75ca301e 106 /** @defgroup RCCEx_Private_Constants RCCEx Private Constants
mbed_official 340:28d1f895c6fe 107 * @{
mbed_official 340:28d1f895c6fe 108 */
mbed_official 340:28d1f895c6fe 109 /* Bit position in register */
mbed_official 340:28d1f895c6fe 110 #define CRS_CFGR_FELIM_BITNUMBER 16
mbed_official 340:28d1f895c6fe 111 #define CRS_CR_TRIM_BITNUMBER 8
mbed_official 340:28d1f895c6fe 112 #define CRS_ISR_FECAP_BITNUMBER 16
mbed_official 340:28d1f895c6fe 113 /**
mbed_official 340:28d1f895c6fe 114 * @}
mbed_official 340:28d1f895c6fe 115 */
mbed_official 340:28d1f895c6fe 116
mbed_official 340:28d1f895c6fe 117 /* Private macro -------------------------------------------------------------*/
mbed_official 630:825f75ca301e 118 /** @defgroup RCCEx_Private_Macros RCCEx Private Macros
mbed_official 340:28d1f895c6fe 119 * @{
mbed_official 340:28d1f895c6fe 120 */
mbed_official 340:28d1f895c6fe 121 /**
mbed_official 340:28d1f895c6fe 122 * @}
mbed_official 340:28d1f895c6fe 123 */
mbed_official 630:825f75ca301e 124 /* Private variables ---------------------------------------------------------*/
mbed_official 340:28d1f895c6fe 125 /* Private function prototypes -----------------------------------------------*/
mbed_official 340:28d1f895c6fe 126 /* Exported functions ---------------------------------------------------------*/
mbed_official 340:28d1f895c6fe 127
mbed_official 340:28d1f895c6fe 128 /** @defgroup RCCEx_Exported_Functions RCCEx Exported Functions
mbed_official 340:28d1f895c6fe 129 * @{
mbed_official 340:28d1f895c6fe 130 */
mbed_official 340:28d1f895c6fe 131
mbed_official 340:28d1f895c6fe 132 /** @defgroup RCCEx_Exported_Functions_Group1 Extended Peripheral Control functions
mbed_official 340:28d1f895c6fe 133 * @brief Extended RCC clocks control functions
mbed_official 340:28d1f895c6fe 134 *
mbed_official 340:28d1f895c6fe 135 @verbatim
mbed_official 340:28d1f895c6fe 136 ===============================================================================
mbed_official 340:28d1f895c6fe 137 ##### Extended Peripheral Control functions #####
mbed_official 340:28d1f895c6fe 138 ===============================================================================
mbed_official 340:28d1f895c6fe 139 [..]
mbed_official 340:28d1f895c6fe 140 This subsection provides a set of functions allowing to control the RCC Clocks
mbed_official 340:28d1f895c6fe 141 frequencies.
mbed_official 340:28d1f895c6fe 142 [..]
mbed_official 340:28d1f895c6fe 143 (@) Important note: Care must be taken when HAL_RCCEx_PeriphCLKConfig() is used to
mbed_official 340:28d1f895c6fe 144 select the RTC clock source; in this case the Backup domain will be reset in
mbed_official 340:28d1f895c6fe 145 order to modify the RTC Clock source, as consequence RTC registers (including
mbed_official 340:28d1f895c6fe 146 the backup registers) and RCC_BDCR register are set to their reset values.
mbed_official 340:28d1f895c6fe 147
mbed_official 340:28d1f895c6fe 148 @endverbatim
mbed_official 340:28d1f895c6fe 149 * @{
mbed_official 340:28d1f895c6fe 150 */
mbed_official 340:28d1f895c6fe 151
mbed_official 340:28d1f895c6fe 152 /**
mbed_official 340:28d1f895c6fe 153 * @brief Initializes the RCC extended peripherals clocks according to the specified
mbed_official 340:28d1f895c6fe 154 * parameters in the RCC_PeriphCLKInitTypeDef.
mbed_official 340:28d1f895c6fe 155 * @param PeriphClkInit: pointer to an RCC_PeriphCLKInitTypeDef structure that
mbed_official 340:28d1f895c6fe 156 * contains the configuration information for the Extended Peripherals clocks
mbed_official 340:28d1f895c6fe 157 * (USART, RTC, I2C, CEC and USB).
mbed_official 340:28d1f895c6fe 158 *
mbed_official 340:28d1f895c6fe 159 * @note Care must be taken when HAL_RCCEx_PeriphCLKConfig() is used to select
mbed_official 340:28d1f895c6fe 160 * the RTC clock source; in this case the Backup domain will be reset in
mbed_official 340:28d1f895c6fe 161 * order to modify the RTC Clock source, as consequence RTC registers (including
mbed_official 340:28d1f895c6fe 162 * the backup registers) and RCC_BDCR register are set to their reset values.
mbed_official 340:28d1f895c6fe 163 *
mbed_official 340:28d1f895c6fe 164 * @retval None
mbed_official 340:28d1f895c6fe 165 */
mbed_official 340:28d1f895c6fe 166 HAL_StatusTypeDef HAL_RCCEx_PeriphCLKConfig(RCC_PeriphCLKInitTypeDef *PeriphClkInit)
mbed_official 340:28d1f895c6fe 167 {
mbed_official 340:28d1f895c6fe 168 uint32_t tickstart = 0;
mbed_official 630:825f75ca301e 169 uint32_t temp_reg = 0;
mbed_official 340:28d1f895c6fe 170
mbed_official 340:28d1f895c6fe 171 /* Check the parameters */
mbed_official 340:28d1f895c6fe 172 assert_param(IS_RCC_PERIPHCLK(PeriphClkInit->PeriphClockSelection));
mbed_official 340:28d1f895c6fe 173
mbed_official 340:28d1f895c6fe 174 /*---------------------------- RTC configuration -------------------------------*/
mbed_official 340:28d1f895c6fe 175 if(((PeriphClkInit->PeriphClockSelection) & RCC_PERIPHCLK_RTC) == (RCC_PERIPHCLK_RTC))
mbed_official 340:28d1f895c6fe 176 {
mbed_official 340:28d1f895c6fe 177 /* Reset the Backup domain only if the RTC Clock source selction is modified */
mbed_official 340:28d1f895c6fe 178 if((RCC->BDCR & RCC_BDCR_RTCSEL) != (PeriphClkInit->RTCClockSelection & RCC_BDCR_RTCSEL))
mbed_official 340:28d1f895c6fe 179 {
mbed_official 630:825f75ca301e 180 /* Enable Power Clock*/
mbed_official 630:825f75ca301e 181 __HAL_RCC_PWR_CLK_ENABLE();
mbed_official 630:825f75ca301e 182
mbed_official 630:825f75ca301e 183 /* Enable write access to Backup domain */
mbed_official 630:825f75ca301e 184 SET_BIT(PWR->CR, PWR_CR_DBP);
mbed_official 630:825f75ca301e 185
mbed_official 630:825f75ca301e 186 /* Wait for Backup domain Write protection disable */
mbed_official 630:825f75ca301e 187 tickstart = HAL_GetTick();
mbed_official 630:825f75ca301e 188
mbed_official 630:825f75ca301e 189 while((PWR->CR & PWR_CR_DBP) == RESET)
mbed_official 630:825f75ca301e 190 {
mbed_official 630:825f75ca301e 191 if((HAL_GetTick() - tickstart) > RCC_DBP_TIMEOUT_VALUE)
mbed_official 630:825f75ca301e 192 {
mbed_official 630:825f75ca301e 193 return HAL_TIMEOUT;
mbed_official 630:825f75ca301e 194 }
mbed_official 630:825f75ca301e 195 }
mbed_official 630:825f75ca301e 196
mbed_official 340:28d1f895c6fe 197 /* Store the content of BDCR register before the reset of Backup Domain */
mbed_official 630:825f75ca301e 198 temp_reg = (RCC->BDCR & ~(RCC_BDCR_RTCSEL));
mbed_official 340:28d1f895c6fe 199 /* RTC Clock selection can be changed only if the Backup Domain is reset */
mbed_official 340:28d1f895c6fe 200 __HAL_RCC_BACKUPRESET_FORCE();
mbed_official 340:28d1f895c6fe 201 __HAL_RCC_BACKUPRESET_RELEASE();
mbed_official 340:28d1f895c6fe 202 /* Restore the Content of BDCR register */
mbed_official 630:825f75ca301e 203 RCC->BDCR = temp_reg;
mbed_official 630:825f75ca301e 204
mbed_official 630:825f75ca301e 205 /* Wait for LSERDY if LSE was enabled */
mbed_official 630:825f75ca301e 206 if (HAL_IS_BIT_SET(temp_reg, RCC_BDCR_LSERDY))
mbed_official 630:825f75ca301e 207 {
mbed_official 630:825f75ca301e 208 /* Get timeout */
mbed_official 630:825f75ca301e 209 tickstart = HAL_GetTick();
mbed_official 340:28d1f895c6fe 210
mbed_official 630:825f75ca301e 211 /* Wait till LSE is ready */
mbed_official 630:825f75ca301e 212 while(__HAL_RCC_GET_FLAG(RCC_FLAG_LSERDY) == RESET)
mbed_official 340:28d1f895c6fe 213 {
mbed_official 630:825f75ca301e 214 if((HAL_GetTick() - tickstart) > RCC_LSE_TIMEOUT_VALUE)
mbed_official 630:825f75ca301e 215 {
mbed_official 630:825f75ca301e 216 return HAL_TIMEOUT;
mbed_official 630:825f75ca301e 217 }
mbed_official 630:825f75ca301e 218 }
mbed_official 630:825f75ca301e 219 }
mbed_official 630:825f75ca301e 220 __HAL_RCC_RTC_CONFIG(PeriphClkInit->RTCClockSelection);
mbed_official 340:28d1f895c6fe 221 }
mbed_official 340:28d1f895c6fe 222 }
mbed_official 340:28d1f895c6fe 223
mbed_official 340:28d1f895c6fe 224 /*------------------------------- USART1 Configuration ------------------------*/
mbed_official 340:28d1f895c6fe 225 if(((PeriphClkInit->PeriphClockSelection) & RCC_PERIPHCLK_USART1) == RCC_PERIPHCLK_USART1)
mbed_official 340:28d1f895c6fe 226 {
mbed_official 340:28d1f895c6fe 227 /* Check the parameters */
mbed_official 340:28d1f895c6fe 228 assert_param(IS_RCC_USART1CLKSOURCE(PeriphClkInit->Usart1ClockSelection));
mbed_official 340:28d1f895c6fe 229
mbed_official 340:28d1f895c6fe 230 /* Configure the USART1 clock source */
mbed_official 340:28d1f895c6fe 231 __HAL_RCC_USART1_CONFIG(PeriphClkInit->Usart1ClockSelection);
mbed_official 340:28d1f895c6fe 232 }
mbed_official 340:28d1f895c6fe 233
mbed_official 630:825f75ca301e 234 #if defined(STM32F071xB) || defined(STM32F072xB) || defined(STM32F078xx)\
mbed_official 630:825f75ca301e 235 || defined(STM32F091xC) || defined(STM32F098xx)
mbed_official 340:28d1f895c6fe 236 /*----------------------------- USART2 Configuration --------------------------*/
mbed_official 340:28d1f895c6fe 237 if(((PeriphClkInit->PeriphClockSelection) & RCC_PERIPHCLK_USART2) == RCC_PERIPHCLK_USART2)
mbed_official 340:28d1f895c6fe 238 {
mbed_official 340:28d1f895c6fe 239 /* Check the parameters */
mbed_official 340:28d1f895c6fe 240 assert_param(IS_RCC_USART2CLKSOURCE(PeriphClkInit->Usart2ClockSelection));
mbed_official 340:28d1f895c6fe 241
mbed_official 340:28d1f895c6fe 242 /* Configure the USART2 clock source */
mbed_official 340:28d1f895c6fe 243 __HAL_RCC_USART2_CONFIG(PeriphClkInit->Usart2ClockSelection);
mbed_official 340:28d1f895c6fe 244 }
mbed_official 340:28d1f895c6fe 245 #endif /* STM32F071xB || STM32F072xB || STM32F078xx || */
mbed_official 340:28d1f895c6fe 246 /* STM32F091xC || STM32F098xx */
mbed_official 340:28d1f895c6fe 247
mbed_official 340:28d1f895c6fe 248 #if defined(STM32F091xC) || defined(STM32F098xx)
mbed_official 340:28d1f895c6fe 249 /*----------------------------- USART3 Configuration --------------------------*/
mbed_official 340:28d1f895c6fe 250 if(((PeriphClkInit->PeriphClockSelection) & RCC_PERIPHCLK_USART3) == RCC_PERIPHCLK_USART3)
mbed_official 340:28d1f895c6fe 251 {
mbed_official 340:28d1f895c6fe 252 /* Check the parameters */
mbed_official 340:28d1f895c6fe 253 assert_param(IS_RCC_USART3CLKSOURCE(PeriphClkInit->Usart3ClockSelection));
mbed_official 340:28d1f895c6fe 254
mbed_official 340:28d1f895c6fe 255 /* Configure the USART3 clock source */
mbed_official 340:28d1f895c6fe 256 __HAL_RCC_USART3_CONFIG(PeriphClkInit->Usart3ClockSelection);
mbed_official 340:28d1f895c6fe 257 }
mbed_official 340:28d1f895c6fe 258 #endif /* STM32F091xC || STM32F098xx */
mbed_official 340:28d1f895c6fe 259
mbed_official 340:28d1f895c6fe 260 /*------------------------------ I2C1 Configuration ------------------------*/
mbed_official 340:28d1f895c6fe 261 if(((PeriphClkInit->PeriphClockSelection) & RCC_PERIPHCLK_I2C1) == RCC_PERIPHCLK_I2C1)
mbed_official 340:28d1f895c6fe 262 {
mbed_official 340:28d1f895c6fe 263 /* Check the parameters */
mbed_official 340:28d1f895c6fe 264 assert_param(IS_RCC_I2C1CLKSOURCE(PeriphClkInit->I2c1ClockSelection));
mbed_official 340:28d1f895c6fe 265
mbed_official 340:28d1f895c6fe 266 /* Configure the I2C1 clock source */
mbed_official 340:28d1f895c6fe 267 __HAL_RCC_I2C1_CONFIG(PeriphClkInit->I2c1ClockSelection);
mbed_official 340:28d1f895c6fe 268 }
mbed_official 340:28d1f895c6fe 269
mbed_official 441:d2c15dda23c1 270 #if defined(STM32F042x6) || defined(STM32F048xx) || defined(STM32F072xB) || defined(STM32F078xx) || defined(STM32F070xB) || defined(STM32F070x6)
mbed_official 340:28d1f895c6fe 271 /*------------------------------ USB Configuration ------------------------*/
mbed_official 340:28d1f895c6fe 272 if(((PeriphClkInit->PeriphClockSelection) & RCC_PERIPHCLK_USB) == RCC_PERIPHCLK_USB)
mbed_official 340:28d1f895c6fe 273 {
mbed_official 340:28d1f895c6fe 274 /* Check the parameters */
mbed_official 340:28d1f895c6fe 275 assert_param(IS_RCC_USBCLKSOURCE(PeriphClkInit->UsbClockSelection));
mbed_official 340:28d1f895c6fe 276
mbed_official 340:28d1f895c6fe 277 /* Configure the USB clock source */
mbed_official 340:28d1f895c6fe 278 __HAL_RCC_USB_CONFIG(PeriphClkInit->UsbClockSelection);
mbed_official 340:28d1f895c6fe 279 }
mbed_official 441:d2c15dda23c1 280 #endif /* STM32F042x6 || STM32F048xx || STM32F072xB || STM32F078xx || STM32F070xB || STM32F070x6 */
mbed_official 340:28d1f895c6fe 281
mbed_official 630:825f75ca301e 282 #if defined(STM32F042x6) || defined(STM32F048xx)\
mbed_official 630:825f75ca301e 283 || defined(STM32F051x8) || defined(STM32F058xx)\
mbed_official 630:825f75ca301e 284 || defined(STM32F071xB) || defined(STM32F072xB) || defined(STM32F078xx)\
mbed_official 630:825f75ca301e 285 || defined(STM32F091xC) || defined(STM32F098xx)
mbed_official 340:28d1f895c6fe 286 /*------------------------------ CEC clock Configuration -------------------*/
mbed_official 340:28d1f895c6fe 287 if(((PeriphClkInit->PeriphClockSelection) & RCC_PERIPHCLK_CEC) == RCC_PERIPHCLK_CEC)
mbed_official 340:28d1f895c6fe 288 {
mbed_official 340:28d1f895c6fe 289 /* Check the parameters */
mbed_official 340:28d1f895c6fe 290 assert_param(IS_RCC_CECCLKSOURCE(PeriphClkInit->CecClockSelection));
mbed_official 340:28d1f895c6fe 291
mbed_official 340:28d1f895c6fe 292 /* Configure the CEC clock source */
mbed_official 340:28d1f895c6fe 293 __HAL_RCC_CEC_CONFIG(PeriphClkInit->CecClockSelection);
mbed_official 340:28d1f895c6fe 294 }
mbed_official 340:28d1f895c6fe 295 #endif /* STM32F042x6 || STM32F048xx || */
mbed_official 340:28d1f895c6fe 296 /* STM32F051x8 || STM32F058xx || */
mbed_official 340:28d1f895c6fe 297 /* STM32F071xB || STM32F072xB || STM32F078xx || */
mbed_official 340:28d1f895c6fe 298 /* STM32F091xC || STM32F098xx */
mbed_official 340:28d1f895c6fe 299
mbed_official 340:28d1f895c6fe 300 return HAL_OK;
mbed_official 340:28d1f895c6fe 301 }
mbed_official 340:28d1f895c6fe 302
mbed_official 340:28d1f895c6fe 303 /**
mbed_official 340:28d1f895c6fe 304 * @brief Get the RCC_ClkInitStruct according to the internal
mbed_official 340:28d1f895c6fe 305 * RCC configuration registers.
mbed_official 340:28d1f895c6fe 306 * @param PeriphClkInit: pointer to an RCC_PeriphCLKInitTypeDef structure that
mbed_official 340:28d1f895c6fe 307 * returns the configuration information for the Extended Peripherals clocks
mbed_official 340:28d1f895c6fe 308 * (USART, RTC, I2C, CEC and USB).
mbed_official 340:28d1f895c6fe 309 * @retval None
mbed_official 340:28d1f895c6fe 310 */
mbed_official 340:28d1f895c6fe 311 void HAL_RCCEx_GetPeriphCLKConfig(RCC_PeriphCLKInitTypeDef *PeriphClkInit)
mbed_official 340:28d1f895c6fe 312 {
mbed_official 340:28d1f895c6fe 313 /* Set all possible values for the extended clock type parameter------------*/
mbed_official 340:28d1f895c6fe 314 /* Common part first */
mbed_official 340:28d1f895c6fe 315 PeriphClkInit->PeriphClockSelection = RCC_PERIPHCLK_USART1 | RCC_PERIPHCLK_I2C1 | RCC_PERIPHCLK_RTC;
mbed_official 340:28d1f895c6fe 316 /* Get the RTC configuration --------------------------------------------*/
mbed_official 340:28d1f895c6fe 317 PeriphClkInit->RTCClockSelection = __HAL_RCC_GET_RTC_SOURCE();
mbed_official 340:28d1f895c6fe 318 /* Get the USART1 configuration --------------------------------------------*/
mbed_official 340:28d1f895c6fe 319 PeriphClkInit->Usart1ClockSelection = __HAL_RCC_GET_USART1_SOURCE();
mbed_official 340:28d1f895c6fe 320 /* Get the I2C1 clock source -----------------------------------------------*/
mbed_official 340:28d1f895c6fe 321 PeriphClkInit->I2c1ClockSelection = __HAL_RCC_GET_I2C1_SOURCE();
mbed_official 340:28d1f895c6fe 322
mbed_official 630:825f75ca301e 323 #if defined(STM32F071xB) || defined(STM32F072xB) || defined(STM32F078xx)\
mbed_official 630:825f75ca301e 324 || defined(STM32F091xC) || defined(STM32F098xx)
mbed_official 340:28d1f895c6fe 325 PeriphClkInit->PeriphClockSelection |= RCC_PERIPHCLK_USART2;
mbed_official 340:28d1f895c6fe 326 /* Get the USART2 clock source ---------------------------------------------*/
mbed_official 340:28d1f895c6fe 327 PeriphClkInit->Usart2ClockSelection = __HAL_RCC_GET_USART2_SOURCE();
mbed_official 340:28d1f895c6fe 328 #endif /* STM32F071xB || STM32F072xB || STM32F078xx || */
mbed_official 340:28d1f895c6fe 329 /* STM32F091xC || STM32F098xx */
mbed_official 340:28d1f895c6fe 330
mbed_official 340:28d1f895c6fe 331 #if defined(STM32F091xC) || defined(STM32F098xx)
mbed_official 340:28d1f895c6fe 332 PeriphClkInit->PeriphClockSelection |= RCC_PERIPHCLK_USART3;
mbed_official 340:28d1f895c6fe 333 /* Get the USART3 clock source ---------------------------------------------*/
mbed_official 340:28d1f895c6fe 334 PeriphClkInit->Usart3ClockSelection = __HAL_RCC_GET_USART3_SOURCE();
mbed_official 340:28d1f895c6fe 335 #endif /* STM32F091xC || STM32F098xx */
mbed_official 340:28d1f895c6fe 336
mbed_official 441:d2c15dda23c1 337 #if defined(STM32F042x6) || defined(STM32F048xx) || defined(STM32F072xB) || defined(STM32F078xx) || defined(STM32F070xB) || defined(STM32F070x6)
mbed_official 340:28d1f895c6fe 338 PeriphClkInit->PeriphClockSelection |= RCC_PERIPHCLK_USB;
mbed_official 340:28d1f895c6fe 339 /* Get the USB clock source ---------------------------------------------*/
mbed_official 340:28d1f895c6fe 340 PeriphClkInit->UsbClockSelection = __HAL_RCC_GET_USB_SOURCE();
mbed_official 441:d2c15dda23c1 341 #endif /* STM32F042x6 || STM32F048xx || STM32F072xB || STM32F078xx || STM32F070xB || STM32F070x6 */
mbed_official 340:28d1f895c6fe 342
mbed_official 630:825f75ca301e 343 #if defined(STM32F042x6) || defined(STM32F048xx)\
mbed_official 630:825f75ca301e 344 || defined(STM32F051x8) || defined(STM32F058xx)\
mbed_official 630:825f75ca301e 345 || defined(STM32F071xB) || defined(STM32F072xB) || defined(STM32F078xx)\
mbed_official 630:825f75ca301e 346 || defined(STM32F091xC) || defined(STM32F098xx)
mbed_official 340:28d1f895c6fe 347 PeriphClkInit->PeriphClockSelection |= RCC_PERIPHCLK_CEC;
mbed_official 340:28d1f895c6fe 348 /* Get the CEC clock source ------------------------------------------------*/
mbed_official 340:28d1f895c6fe 349 PeriphClkInit->CecClockSelection = __HAL_RCC_GET_CEC_SOURCE();
mbed_official 340:28d1f895c6fe 350 #endif /* STM32F042x6 || STM32F048xx || */
mbed_official 340:28d1f895c6fe 351 /* STM32F051x8 || STM32F058xx || */
mbed_official 340:28d1f895c6fe 352 /* STM32F071xB || STM32F072xB || STM32F078xx || */
mbed_official 340:28d1f895c6fe 353 /* STM32F091xC || STM32F098xx */
mbed_official 340:28d1f895c6fe 354
mbed_official 340:28d1f895c6fe 355 }
mbed_official 340:28d1f895c6fe 356
mbed_official 630:825f75ca301e 357 /**
mbed_official 630:825f75ca301e 358 * @brief Returns the peripheral clock frequency
mbed_official 630:825f75ca301e 359 * @note Returns 0 if peripheral clock is unknown
mbed_official 630:825f75ca301e 360 * @param PeriphClk: Peripheral clock identifier
mbed_official 630:825f75ca301e 361 * This parameter can be one of the following values:
mbed_official 630:825f75ca301e 362 * @arg RCC_PERIPHCLK_RTC RTC peripheral clock
mbed_official 630:825f75ca301e 363 * @arg RCC_PERIPHCLK_USART1 USART1 peripheral clock
mbed_official 630:825f75ca301e 364 * @arg RCC_PERIPHCLK_USART2 USART2 peripheral clock (*)
mbed_official 630:825f75ca301e 365 * @arg RCC_PERIPHCLK_USART3 USART3 peripheral clock (*)
mbed_official 630:825f75ca301e 366 * @arg RCC_PERIPHCLK_I2C1 I2C1 peripheral clock
mbed_official 630:825f75ca301e 367 * @arg RCC_PERIPHCLK_USB USB peripheral clock (*)
mbed_official 630:825f75ca301e 368 * @arg RCC_PERIPHCLK_CEC CEC peripheral clock (*)
mbed_official 630:825f75ca301e 369 * @note (*) means that this peripheral is not present on all the STM32F0xx devices
mbed_official 630:825f75ca301e 370 * @retval Frequency in Hz (0: means that no available frequency for the peripheral)
mbed_official 630:825f75ca301e 371 */
mbed_official 630:825f75ca301e 372 uint32_t HAL_RCCEx_GetPeriphCLKFreq(uint32_t PeriphClk)
mbed_official 630:825f75ca301e 373 {
mbed_official 630:825f75ca301e 374 uint32_t frequency = 0;
mbed_official 630:825f75ca301e 375 uint32_t srcclk = 0;
mbed_official 630:825f75ca301e 376 #if defined(USB)
mbed_official 630:825f75ca301e 377 uint32_t pllmull = 0, pllsource = 0, predivfactor = 0;
mbed_official 630:825f75ca301e 378 #endif /* USB */
mbed_official 630:825f75ca301e 379
mbed_official 630:825f75ca301e 380 /* Check the parameters */
mbed_official 630:825f75ca301e 381 assert_param(IS_RCC_PERIPHCLK(PeriphClk));
mbed_official 630:825f75ca301e 382
mbed_official 630:825f75ca301e 383 switch (PeriphClk)
mbed_official 630:825f75ca301e 384 {
mbed_official 630:825f75ca301e 385 case RCC_PERIPHCLK_RTC:
mbed_official 630:825f75ca301e 386 {
mbed_official 630:825f75ca301e 387 /* Get the current RTC source */
mbed_official 630:825f75ca301e 388 srcclk = __HAL_RCC_GET_RTC_SOURCE();
mbed_official 630:825f75ca301e 389
mbed_official 630:825f75ca301e 390 /* Check if LSE is ready and if RTC clock selection is LSE */
mbed_official 630:825f75ca301e 391 if ((srcclk == RCC_RTCCLKSOURCE_LSE) && (HAL_IS_BIT_SET(RCC->BDCR, RCC_BDCR_LSERDY)))
mbed_official 630:825f75ca301e 392 {
mbed_official 630:825f75ca301e 393 frequency = LSE_VALUE;
mbed_official 630:825f75ca301e 394 }
mbed_official 630:825f75ca301e 395 /* Check if LSI is ready and if RTC clock selection is LSI */
mbed_official 630:825f75ca301e 396 else if ((srcclk == RCC_RTCCLKSOURCE_LSI) && (HAL_IS_BIT_SET(RCC->CSR, RCC_CSR_LSIRDY)))
mbed_official 630:825f75ca301e 397 {
mbed_official 630:825f75ca301e 398 frequency = LSI_VALUE;
mbed_official 630:825f75ca301e 399 }
mbed_official 630:825f75ca301e 400 /* Check if HSE is ready and if RTC clock selection is HSI_DIV32*/
mbed_official 630:825f75ca301e 401 else if ((srcclk == RCC_RTCCLKSOURCE_HSE_DIV32) && (HAL_IS_BIT_SET(RCC->CR, RCC_CR_HSERDY)))
mbed_official 630:825f75ca301e 402 {
mbed_official 630:825f75ca301e 403 frequency = HSE_VALUE / 32;
mbed_official 630:825f75ca301e 404 }
mbed_official 630:825f75ca301e 405 /* Clock not enabled for RTC*/
mbed_official 630:825f75ca301e 406 else
mbed_official 630:825f75ca301e 407 {
mbed_official 630:825f75ca301e 408 frequency = 0;
mbed_official 630:825f75ca301e 409 }
mbed_official 630:825f75ca301e 410 break;
mbed_official 630:825f75ca301e 411 }
mbed_official 630:825f75ca301e 412 case RCC_PERIPHCLK_USART1:
mbed_official 630:825f75ca301e 413 {
mbed_official 630:825f75ca301e 414 /* Get the current USART1 source */
mbed_official 630:825f75ca301e 415 srcclk = __HAL_RCC_GET_USART1_SOURCE();
mbed_official 630:825f75ca301e 416
mbed_official 630:825f75ca301e 417 /* Check if USART1 clock selection is PCLK1 */
mbed_official 630:825f75ca301e 418 if (srcclk == RCC_USART1CLKSOURCE_PCLK1)
mbed_official 630:825f75ca301e 419 {
mbed_official 630:825f75ca301e 420 frequency = HAL_RCC_GetPCLK1Freq();
mbed_official 630:825f75ca301e 421 }
mbed_official 630:825f75ca301e 422 /* Check if HSI is ready and if USART1 clock selection is HSI */
mbed_official 630:825f75ca301e 423 else if ((srcclk == RCC_USART1CLKSOURCE_HSI) && (HAL_IS_BIT_SET(RCC->CR, RCC_CR_HSIRDY)))
mbed_official 630:825f75ca301e 424 {
mbed_official 630:825f75ca301e 425 frequency = HSI_VALUE;
mbed_official 630:825f75ca301e 426 }
mbed_official 630:825f75ca301e 427 /* Check if USART1 clock selection is SYSCLK */
mbed_official 630:825f75ca301e 428 else if (srcclk == RCC_USART1CLKSOURCE_SYSCLK)
mbed_official 630:825f75ca301e 429 {
mbed_official 630:825f75ca301e 430 frequency = HAL_RCC_GetSysClockFreq();
mbed_official 630:825f75ca301e 431 }
mbed_official 630:825f75ca301e 432 /* Check if LSE is ready and if USART1 clock selection is LSE */
mbed_official 630:825f75ca301e 433 else if ((srcclk == RCC_USART1CLKSOURCE_LSE) && (HAL_IS_BIT_SET(RCC->BDCR, RCC_BDCR_LSERDY)))
mbed_official 630:825f75ca301e 434 {
mbed_official 630:825f75ca301e 435 frequency = LSE_VALUE;
mbed_official 630:825f75ca301e 436 }
mbed_official 630:825f75ca301e 437 /* Clock not enabled for USART1*/
mbed_official 630:825f75ca301e 438 else
mbed_official 630:825f75ca301e 439 {
mbed_official 630:825f75ca301e 440 frequency = 0;
mbed_official 630:825f75ca301e 441 }
mbed_official 630:825f75ca301e 442 break;
mbed_official 630:825f75ca301e 443 }
mbed_official 630:825f75ca301e 444 #if defined(RCC_CFGR3_USART2SW)
mbed_official 630:825f75ca301e 445 case RCC_PERIPHCLK_USART2:
mbed_official 630:825f75ca301e 446 {
mbed_official 630:825f75ca301e 447 /* Get the current USART2 source */
mbed_official 630:825f75ca301e 448 srcclk = __HAL_RCC_GET_USART2_SOURCE();
mbed_official 630:825f75ca301e 449
mbed_official 630:825f75ca301e 450 /* Check if USART2 clock selection is PCLK1 */
mbed_official 630:825f75ca301e 451 if (srcclk == RCC_USART2CLKSOURCE_PCLK1)
mbed_official 630:825f75ca301e 452 {
mbed_official 630:825f75ca301e 453 frequency = HAL_RCC_GetPCLK1Freq();
mbed_official 630:825f75ca301e 454 }
mbed_official 630:825f75ca301e 455 /* Check if HSI is ready and if USART2 clock selection is HSI */
mbed_official 630:825f75ca301e 456 else if ((srcclk == RCC_USART2CLKSOURCE_HSI) && (HAL_IS_BIT_SET(RCC->CR, RCC_CR_HSIRDY)))
mbed_official 630:825f75ca301e 457 {
mbed_official 630:825f75ca301e 458 frequency = HSI_VALUE;
mbed_official 630:825f75ca301e 459 }
mbed_official 630:825f75ca301e 460 /* Check if USART2 clock selection is SYSCLK */
mbed_official 630:825f75ca301e 461 else if (srcclk == RCC_USART2CLKSOURCE_SYSCLK)
mbed_official 630:825f75ca301e 462 {
mbed_official 630:825f75ca301e 463 frequency = HAL_RCC_GetSysClockFreq();
mbed_official 630:825f75ca301e 464 }
mbed_official 630:825f75ca301e 465 /* Check if LSE is ready and if USART2 clock selection is LSE */
mbed_official 630:825f75ca301e 466 else if ((srcclk == RCC_USART2CLKSOURCE_LSE) && (HAL_IS_BIT_SET(RCC->BDCR, RCC_BDCR_LSERDY)))
mbed_official 630:825f75ca301e 467 {
mbed_official 630:825f75ca301e 468 frequency = LSE_VALUE;
mbed_official 630:825f75ca301e 469 }
mbed_official 630:825f75ca301e 470 /* Clock not enabled for USART2*/
mbed_official 630:825f75ca301e 471 else
mbed_official 630:825f75ca301e 472 {
mbed_official 630:825f75ca301e 473 frequency = 0;
mbed_official 630:825f75ca301e 474 }
mbed_official 630:825f75ca301e 475 break;
mbed_official 630:825f75ca301e 476 }
mbed_official 630:825f75ca301e 477 #endif /* RCC_CFGR3_USART2SW */
mbed_official 630:825f75ca301e 478 #if defined(RCC_CFGR3_USART3SW)
mbed_official 630:825f75ca301e 479 case RCC_PERIPHCLK_USART3:
mbed_official 630:825f75ca301e 480 {
mbed_official 630:825f75ca301e 481 /* Get the current USART3 source */
mbed_official 630:825f75ca301e 482 srcclk = __HAL_RCC_GET_USART3_SOURCE();
mbed_official 630:825f75ca301e 483
mbed_official 630:825f75ca301e 484 /* Check if USART3 clock selection is PCLK1 */
mbed_official 630:825f75ca301e 485 if (srcclk == RCC_USART3CLKSOURCE_PCLK1)
mbed_official 630:825f75ca301e 486 {
mbed_official 630:825f75ca301e 487 frequency = HAL_RCC_GetPCLK1Freq();
mbed_official 630:825f75ca301e 488 }
mbed_official 630:825f75ca301e 489 /* Check if HSI is ready and if USART3 clock selection is HSI */
mbed_official 630:825f75ca301e 490 else if ((srcclk == RCC_USART3CLKSOURCE_HSI) && (HAL_IS_BIT_SET(RCC->CR, RCC_CR_HSIRDY)))
mbed_official 630:825f75ca301e 491 {
mbed_official 630:825f75ca301e 492 frequency = HSI_VALUE;
mbed_official 630:825f75ca301e 493 }
mbed_official 630:825f75ca301e 494 /* Check if USART3 clock selection is SYSCLK */
mbed_official 630:825f75ca301e 495 else if (srcclk == RCC_USART3CLKSOURCE_SYSCLK)
mbed_official 630:825f75ca301e 496 {
mbed_official 630:825f75ca301e 497 frequency = HAL_RCC_GetSysClockFreq();
mbed_official 630:825f75ca301e 498 }
mbed_official 630:825f75ca301e 499 /* Check if LSE is ready and if USART3 clock selection is LSE */
mbed_official 630:825f75ca301e 500 else if ((srcclk == RCC_USART3CLKSOURCE_LSE) && (HAL_IS_BIT_SET(RCC->BDCR, RCC_BDCR_LSERDY)))
mbed_official 630:825f75ca301e 501 {
mbed_official 630:825f75ca301e 502 frequency = LSE_VALUE;
mbed_official 630:825f75ca301e 503 }
mbed_official 630:825f75ca301e 504 /* Clock not enabled for USART3*/
mbed_official 630:825f75ca301e 505 else
mbed_official 630:825f75ca301e 506 {
mbed_official 630:825f75ca301e 507 frequency = 0;
mbed_official 630:825f75ca301e 508 }
mbed_official 630:825f75ca301e 509 break;
mbed_official 630:825f75ca301e 510 }
mbed_official 630:825f75ca301e 511 #endif /* RCC_CFGR3_USART3SW */
mbed_official 630:825f75ca301e 512 case RCC_PERIPHCLK_I2C1:
mbed_official 630:825f75ca301e 513 {
mbed_official 630:825f75ca301e 514 /* Get the current I2C1 source */
mbed_official 630:825f75ca301e 515 srcclk = __HAL_RCC_GET_I2C1_SOURCE();
mbed_official 630:825f75ca301e 516
mbed_official 630:825f75ca301e 517 /* Check if HSI is ready and if I2C1 clock selection is HSI */
mbed_official 630:825f75ca301e 518 if ((srcclk == RCC_I2C1CLKSOURCE_HSI) && (HAL_IS_BIT_SET(RCC->CR, RCC_CR_HSIRDY)))
mbed_official 630:825f75ca301e 519 {
mbed_official 630:825f75ca301e 520 frequency = HSI_VALUE;
mbed_official 630:825f75ca301e 521 }
mbed_official 630:825f75ca301e 522 /* Check if I2C1 clock selection is SYSCLK */
mbed_official 630:825f75ca301e 523 else if (srcclk == RCC_I2C1CLKSOURCE_SYSCLK)
mbed_official 630:825f75ca301e 524 {
mbed_official 630:825f75ca301e 525 frequency = HAL_RCC_GetSysClockFreq();
mbed_official 630:825f75ca301e 526 }
mbed_official 630:825f75ca301e 527 /* Clock not enabled for I2C1*/
mbed_official 630:825f75ca301e 528 else
mbed_official 630:825f75ca301e 529 {
mbed_official 630:825f75ca301e 530 frequency = 0;
mbed_official 630:825f75ca301e 531 }
mbed_official 630:825f75ca301e 532 break;
mbed_official 630:825f75ca301e 533 }
mbed_official 630:825f75ca301e 534 #if defined(USB)
mbed_official 630:825f75ca301e 535 case RCC_PERIPHCLK_USB:
mbed_official 630:825f75ca301e 536 {
mbed_official 630:825f75ca301e 537 /* Get the current USB source */
mbed_official 630:825f75ca301e 538 srcclk = __HAL_RCC_GET_USB_SOURCE();
mbed_official 630:825f75ca301e 539
mbed_official 630:825f75ca301e 540 /* Check if PLL is ready and if USB clock selection is PLL */
mbed_official 630:825f75ca301e 541 if ((srcclk == RCC_USBCLKSOURCE_PLLCLK) && (HAL_IS_BIT_SET(RCC->CR, RCC_CR_PLLRDY)))
mbed_official 630:825f75ca301e 542 {
mbed_official 630:825f75ca301e 543 /* Get PLL clock source and multiplication factor ----------------------*/
mbed_official 630:825f75ca301e 544 pllmull = RCC->CFGR & RCC_CFGR_PLLMUL;
mbed_official 630:825f75ca301e 545 pllsource = RCC->CFGR & RCC_CFGR_PLLSRC;
mbed_official 630:825f75ca301e 546 pllmull = (pllmull >> RCC_CFGR_PLLMUL_BITNUMBER) + 2;
mbed_official 630:825f75ca301e 547 predivfactor = (RCC->CFGR2 & RCC_CFGR2_PREDIV) + 1;
mbed_official 630:825f75ca301e 548
mbed_official 630:825f75ca301e 549 if (pllsource == RCC_CFGR_PLLSRC_HSE_PREDIV)
mbed_official 630:825f75ca301e 550 {
mbed_official 630:825f75ca301e 551 /* HSE used as PLL clock source : frequency = HSE/PREDIV * PLLMUL */
mbed_official 630:825f75ca301e 552 frequency = (HSE_VALUE/predivfactor) * pllmull;
mbed_official 630:825f75ca301e 553 }
mbed_official 630:825f75ca301e 554 #if defined(RCC_CR2_HSI48ON)
mbed_official 630:825f75ca301e 555 else if (pllsource == RCC_CFGR_PLLSRC_HSI48_PREDIV)
mbed_official 630:825f75ca301e 556 {
mbed_official 630:825f75ca301e 557 /* HSI48 used as PLL clock source : frequency = HSI48/PREDIV * PLLMUL */
mbed_official 630:825f75ca301e 558 frequency = (HSI48_VALUE / predivfactor) * pllmull;
mbed_official 630:825f75ca301e 559 }
mbed_official 630:825f75ca301e 560 #endif /* RCC_CR2_HSI48ON */
mbed_official 630:825f75ca301e 561 else
mbed_official 630:825f75ca301e 562 {
mbed_official 630:825f75ca301e 563 #if defined(STM32F042x6) || defined(STM32F048xx) || defined(STM32F078xx) || defined(STM32F072xB) || defined(STM32F070xB)
mbed_official 630:825f75ca301e 564 /* HSI used as PLL clock source : frequency = HSI/PREDIV * PLLMUL */
mbed_official 630:825f75ca301e 565 frequency = (HSI_VALUE / predivfactor) * pllmull;
mbed_official 630:825f75ca301e 566 #else
mbed_official 630:825f75ca301e 567 /* HSI used as PLL clock source : frequency = HSI/2 * PLLMUL */
mbed_official 630:825f75ca301e 568 frequency = (HSI_VALUE >> 1) * pllmull;
mbed_official 630:825f75ca301e 569 #endif /* STM32F042x6 || STM32F048xx || STM32F072xB || STM32F078xx || STM32F070xB */
mbed_official 630:825f75ca301e 570 }
mbed_official 630:825f75ca301e 571 }
mbed_official 630:825f75ca301e 572 #if defined(RCC_CR2_HSI48ON)
mbed_official 630:825f75ca301e 573 /* Check if HSI48 is ready and if USB clock selection is HSI48 */
mbed_official 630:825f75ca301e 574 else if ((srcclk == RCC_USBCLKSOURCE_HSI48) && (HAL_IS_BIT_SET(RCC->CR2, RCC_CR2_HSI48RDY)))
mbed_official 630:825f75ca301e 575 {
mbed_official 630:825f75ca301e 576 frequency = HSI48_VALUE;
mbed_official 630:825f75ca301e 577 }
mbed_official 630:825f75ca301e 578 #endif /* RCC_CR2_HSI48ON */
mbed_official 630:825f75ca301e 579 /* Clock not enabled for USB*/
mbed_official 630:825f75ca301e 580 else
mbed_official 630:825f75ca301e 581 {
mbed_official 630:825f75ca301e 582 frequency = 0;
mbed_official 630:825f75ca301e 583 }
mbed_official 630:825f75ca301e 584 break;
mbed_official 630:825f75ca301e 585 }
mbed_official 630:825f75ca301e 586 #endif /* USB */
mbed_official 630:825f75ca301e 587 #if defined(CEC)
mbed_official 630:825f75ca301e 588 case RCC_PERIPHCLK_CEC:
mbed_official 630:825f75ca301e 589 {
mbed_official 630:825f75ca301e 590 /* Get the current CEC source */
mbed_official 630:825f75ca301e 591 srcclk = __HAL_RCC_GET_CEC_SOURCE();
mbed_official 630:825f75ca301e 592
mbed_official 630:825f75ca301e 593 /* Check if HSI is ready and if CEC clock selection is HSI */
mbed_official 630:825f75ca301e 594 if ((srcclk == RCC_CECCLKSOURCE_HSI) && (HAL_IS_BIT_SET(RCC->CR, RCC_CR_HSIRDY)))
mbed_official 630:825f75ca301e 595 {
mbed_official 630:825f75ca301e 596 frequency = HSI_VALUE;
mbed_official 630:825f75ca301e 597 }
mbed_official 630:825f75ca301e 598 /* Check if LSE is ready and if CEC clock selection is LSE */
mbed_official 630:825f75ca301e 599 else if ((srcclk == RCC_CECCLKSOURCE_LSE) && (HAL_IS_BIT_SET(RCC->BDCR, RCC_BDCR_LSERDY)))
mbed_official 630:825f75ca301e 600 {
mbed_official 630:825f75ca301e 601 frequency = LSE_VALUE;
mbed_official 630:825f75ca301e 602 }
mbed_official 630:825f75ca301e 603 /* Clock not enabled for CEC */
mbed_official 630:825f75ca301e 604 else
mbed_official 630:825f75ca301e 605 {
mbed_official 630:825f75ca301e 606 frequency = 0;
mbed_official 630:825f75ca301e 607 }
mbed_official 630:825f75ca301e 608 break;
mbed_official 630:825f75ca301e 609 }
mbed_official 630:825f75ca301e 610 #endif /* CEC */
mbed_official 630:825f75ca301e 611 default:
mbed_official 630:825f75ca301e 612 {
mbed_official 630:825f75ca301e 613 break;
mbed_official 630:825f75ca301e 614 }
mbed_official 630:825f75ca301e 615 }
mbed_official 630:825f75ca301e 616 return(frequency);
mbed_official 630:825f75ca301e 617 }
mbed_official 630:825f75ca301e 618
mbed_official 630:825f75ca301e 619 #if defined(STM32F042x6) || defined(STM32F048xx)\
mbed_official 630:825f75ca301e 620 || defined(STM32F071xB) || defined(STM32F072xB) || defined(STM32F078xx)\
mbed_official 630:825f75ca301e 621 || defined(STM32F091xC) || defined(STM32F098xx)
mbed_official 340:28d1f895c6fe 622 /**
mbed_official 340:28d1f895c6fe 623 * @brief Start automatic synchronization using polling mode
mbed_official 340:28d1f895c6fe 624 * @param pInit Pointer on RCC_CRSInitTypeDef structure
mbed_official 340:28d1f895c6fe 625 * @retval None
mbed_official 340:28d1f895c6fe 626 */
mbed_official 340:28d1f895c6fe 627 void HAL_RCCEx_CRSConfig(RCC_CRSInitTypeDef *pInit)
mbed_official 340:28d1f895c6fe 628 {
mbed_official 340:28d1f895c6fe 629 /* Check the parameters */
mbed_official 340:28d1f895c6fe 630 assert_param(IS_RCC_CRS_SYNC_DIV(pInit->Prescaler));
mbed_official 340:28d1f895c6fe 631 assert_param(IS_RCC_CRS_SYNC_SOURCE(pInit->Source));
mbed_official 340:28d1f895c6fe 632 assert_param(IS_RCC_CRS_SYNC_POLARITY(pInit->Polarity));
mbed_official 340:28d1f895c6fe 633 assert_param(IS_RCC_CRS_RELOADVALUE(pInit->ReloadValue));
mbed_official 340:28d1f895c6fe 634 assert_param(IS_RCC_CRS_ERRORLIMIT(pInit->ErrorLimitValue));
mbed_official 340:28d1f895c6fe 635 assert_param(IS_RCC_CRS_HSI48CALIBRATION(pInit->HSI48CalibrationValue));
mbed_official 340:28d1f895c6fe 636
mbed_official 340:28d1f895c6fe 637
mbed_official 340:28d1f895c6fe 638 /* CONFIGURATION */
mbed_official 340:28d1f895c6fe 639
mbed_official 340:28d1f895c6fe 640 /* Before configuration, reset CRS registers to their default values*/
mbed_official 630:825f75ca301e 641 __HAL_RCC_CRS_FORCE_RESET();
mbed_official 630:825f75ca301e 642 __HAL_RCC_CRS_RELEASE_RESET();
mbed_official 340:28d1f895c6fe 643
mbed_official 340:28d1f895c6fe 644 /* Configure Synchronization input */
mbed_official 340:28d1f895c6fe 645 /* Clear SYNCDIV[2:0], SYNCSRC[1:0] & SYNCSPOL bits */
mbed_official 340:28d1f895c6fe 646 CRS->CFGR &= ~(CRS_CFGR_SYNCDIV | CRS_CFGR_SYNCSRC | CRS_CFGR_SYNCPOL);
mbed_official 340:28d1f895c6fe 647
mbed_official 340:28d1f895c6fe 648 /* Set the CRS_CFGR_SYNCDIV[2:0] bits according to Prescaler value */
mbed_official 340:28d1f895c6fe 649 CRS->CFGR |= pInit->Prescaler;
mbed_official 340:28d1f895c6fe 650
mbed_official 340:28d1f895c6fe 651 /* Set the SYNCSRC[1:0] bits according to Source value */
mbed_official 340:28d1f895c6fe 652 CRS->CFGR |= pInit->Source;
mbed_official 340:28d1f895c6fe 653
mbed_official 340:28d1f895c6fe 654 /* Set the SYNCSPOL bits according to Polarity value */
mbed_official 340:28d1f895c6fe 655 CRS->CFGR |= pInit->Polarity;
mbed_official 340:28d1f895c6fe 656
mbed_official 340:28d1f895c6fe 657 /* Configure Frequency Error Measurement */
mbed_official 340:28d1f895c6fe 658 /* Clear RELOAD[15:0] & FELIM[7:0] bits*/
mbed_official 340:28d1f895c6fe 659 CRS->CFGR &= ~(CRS_CFGR_RELOAD | CRS_CFGR_FELIM);
mbed_official 340:28d1f895c6fe 660
mbed_official 340:28d1f895c6fe 661 /* Set the RELOAD[15:0] bits according to ReloadValue value */
mbed_official 340:28d1f895c6fe 662 CRS->CFGR |= pInit->ReloadValue;
mbed_official 340:28d1f895c6fe 663
mbed_official 340:28d1f895c6fe 664 /* Set the FELIM[7:0] bits according to ErrorLimitValue value */
mbed_official 340:28d1f895c6fe 665 CRS->CFGR |= (pInit->ErrorLimitValue << CRS_CFGR_FELIM_BITNUMBER);
mbed_official 340:28d1f895c6fe 666
mbed_official 340:28d1f895c6fe 667 /* Adjust HSI48 oscillator smooth trimming */
mbed_official 340:28d1f895c6fe 668 /* Clear TRIM[5:0] bits */
mbed_official 340:28d1f895c6fe 669 CRS->CR &= ~CRS_CR_TRIM;
mbed_official 340:28d1f895c6fe 670
mbed_official 340:28d1f895c6fe 671 /* Set the TRIM[5:0] bits according to RCC_CRS_HSI48CalibrationValue value */
mbed_official 340:28d1f895c6fe 672 CRS->CR |= (pInit->HSI48CalibrationValue << CRS_CR_TRIM_BITNUMBER);
mbed_official 340:28d1f895c6fe 673
mbed_official 340:28d1f895c6fe 674
mbed_official 340:28d1f895c6fe 675 /* START AUTOMATIC SYNCHRONIZATION*/
mbed_official 340:28d1f895c6fe 676
mbed_official 340:28d1f895c6fe 677 /* Enable Automatic trimming */
mbed_official 340:28d1f895c6fe 678 __HAL_RCC_CRS_ENABLE_AUTOMATIC_CALIB();
mbed_official 340:28d1f895c6fe 679
mbed_official 340:28d1f895c6fe 680 /* Enable Frequency error counter */
mbed_official 340:28d1f895c6fe 681 __HAL_RCC_CRS_ENABLE_FREQ_ERROR_COUNTER();
mbed_official 340:28d1f895c6fe 682
mbed_official 340:28d1f895c6fe 683 }
mbed_official 340:28d1f895c6fe 684
mbed_official 340:28d1f895c6fe 685 /**
mbed_official 340:28d1f895c6fe 686 * @brief Generate the software synchronization event
mbed_official 340:28d1f895c6fe 687 * @retval None
mbed_official 340:28d1f895c6fe 688 */
mbed_official 340:28d1f895c6fe 689 void HAL_RCCEx_CRSSoftwareSynchronizationGenerate(void)
mbed_official 340:28d1f895c6fe 690 {
mbed_official 340:28d1f895c6fe 691 CRS->CR |= CRS_CR_SWSYNC;
mbed_official 340:28d1f895c6fe 692 }
mbed_official 340:28d1f895c6fe 693
mbed_official 340:28d1f895c6fe 694
mbed_official 340:28d1f895c6fe 695 /**
mbed_official 340:28d1f895c6fe 696 * @brief Function to return synchronization info
mbed_official 340:28d1f895c6fe 697 * @param pSynchroInfo Pointer on RCC_CRSSynchroInfoTypeDef structure
mbed_official 340:28d1f895c6fe 698 * @retval None
mbed_official 340:28d1f895c6fe 699 */
mbed_official 340:28d1f895c6fe 700 void HAL_RCCEx_CRSGetSynchronizationInfo(RCC_CRSSynchroInfoTypeDef *pSynchroInfo)
mbed_official 340:28d1f895c6fe 701 {
mbed_official 340:28d1f895c6fe 702 /* Check the parameter */
mbed_official 441:d2c15dda23c1 703 assert_param(pSynchroInfo != NULL);
mbed_official 340:28d1f895c6fe 704
mbed_official 340:28d1f895c6fe 705 /* Get the reload value */
mbed_official 340:28d1f895c6fe 706 pSynchroInfo->ReloadValue = (uint32_t)(CRS->CFGR & CRS_CFGR_RELOAD);
mbed_official 340:28d1f895c6fe 707
mbed_official 340:28d1f895c6fe 708 /* Get HSI48 oscillator smooth trimming */
mbed_official 340:28d1f895c6fe 709 pSynchroInfo->HSI48CalibrationValue = (uint32_t)((CRS->CR & CRS_CR_TRIM) >> CRS_CR_TRIM_BITNUMBER);
mbed_official 340:28d1f895c6fe 710
mbed_official 340:28d1f895c6fe 711 /* Get Frequency error capture */
mbed_official 340:28d1f895c6fe 712 pSynchroInfo->FreqErrorCapture = (uint32_t)((CRS->ISR & CRS_ISR_FECAP) >> CRS_ISR_FECAP_BITNUMBER);
mbed_official 340:28d1f895c6fe 713
mbed_official 340:28d1f895c6fe 714 /* Get FFrequency error direction */
mbed_official 340:28d1f895c6fe 715 pSynchroInfo->FreqErrorDirection = (uint32_t)(CRS->ISR & CRS_ISR_FEDIR);
mbed_official 340:28d1f895c6fe 716
mbed_official 340:28d1f895c6fe 717
mbed_official 340:28d1f895c6fe 718 }
mbed_official 340:28d1f895c6fe 719
mbed_official 340:28d1f895c6fe 720 /**
mbed_official 340:28d1f895c6fe 721 * @brief This function handles CRS Synchronization Timeout.
mbed_official 340:28d1f895c6fe 722 * @param Timeout: Duration of the timeout
mbed_official 340:28d1f895c6fe 723 * @note Timeout is based on the maximum time to receive a SYNC event based on synchronization
mbed_official 340:28d1f895c6fe 724 * frequency.
mbed_official 340:28d1f895c6fe 725 * @note If Timeout set to HAL_MAX_DELAY, HAL_TIMEOUT will be never returned.
mbed_official 340:28d1f895c6fe 726 * @retval Combination of Synchronization status
mbed_official 340:28d1f895c6fe 727 * This parameter can be a combination of the following values:
mbed_official 340:28d1f895c6fe 728 * @arg RCC_CRS_TIMEOUT
mbed_official 340:28d1f895c6fe 729 * @arg RCC_CRS_SYNCOK
mbed_official 340:28d1f895c6fe 730 * @arg RCC_CRS_SYNCWARM
mbed_official 340:28d1f895c6fe 731 * @arg RCC_CRS_SYNCERR
mbed_official 340:28d1f895c6fe 732 * @arg RCC_CRS_SYNCMISS
mbed_official 340:28d1f895c6fe 733 * @arg RCC_CRS_TRIMOV
mbed_official 340:28d1f895c6fe 734 */
mbed_official 441:d2c15dda23c1 735 uint32_t HAL_RCCEx_CRSWaitSynchronization(uint32_t Timeout)
mbed_official 340:28d1f895c6fe 736 {
mbed_official 441:d2c15dda23c1 737 uint32_t crsstatus = RCC_CRS_NONE;
mbed_official 340:28d1f895c6fe 738 uint32_t tickstart = 0;
mbed_official 340:28d1f895c6fe 739
mbed_official 340:28d1f895c6fe 740 /* Get timeout */
mbed_official 340:28d1f895c6fe 741 tickstart = HAL_GetTick();
mbed_official 340:28d1f895c6fe 742
mbed_official 340:28d1f895c6fe 743 /* Check that if one of CRS flags have been set */
mbed_official 340:28d1f895c6fe 744 while(RCC_CRS_NONE == crsstatus)
mbed_official 340:28d1f895c6fe 745 {
mbed_official 340:28d1f895c6fe 746 if(Timeout != HAL_MAX_DELAY)
mbed_official 340:28d1f895c6fe 747 {
mbed_official 340:28d1f895c6fe 748 if((Timeout == 0) || ((HAL_GetTick() - tickstart) > Timeout))
mbed_official 340:28d1f895c6fe 749 {
mbed_official 340:28d1f895c6fe 750 crsstatus = RCC_CRS_TIMEOUT;
mbed_official 340:28d1f895c6fe 751 }
mbed_official 340:28d1f895c6fe 752 }
mbed_official 340:28d1f895c6fe 753 /* Check CRS SYNCOK flag */
mbed_official 340:28d1f895c6fe 754 if(__HAL_RCC_CRS_GET_FLAG(RCC_CRS_FLAG_SYNCOK))
mbed_official 340:28d1f895c6fe 755 {
mbed_official 340:28d1f895c6fe 756 /* CRS SYNC event OK */
mbed_official 340:28d1f895c6fe 757 crsstatus |= RCC_CRS_SYNCOK;
mbed_official 340:28d1f895c6fe 758
mbed_official 340:28d1f895c6fe 759 /* Clear CRS SYNC event OK bit */
mbed_official 340:28d1f895c6fe 760 __HAL_RCC_CRS_CLEAR_FLAG(RCC_CRS_FLAG_SYNCOK);
mbed_official 340:28d1f895c6fe 761 }
mbed_official 340:28d1f895c6fe 762
mbed_official 340:28d1f895c6fe 763 /* Check CRS SYNCWARN flag */
mbed_official 340:28d1f895c6fe 764 if(__HAL_RCC_CRS_GET_FLAG(RCC_CRS_FLAG_SYNCWARN))
mbed_official 340:28d1f895c6fe 765 {
mbed_official 340:28d1f895c6fe 766 /* CRS SYNC warning */
mbed_official 340:28d1f895c6fe 767 crsstatus |= RCC_CRS_SYNCWARM;
mbed_official 340:28d1f895c6fe 768
mbed_official 340:28d1f895c6fe 769 /* Clear CRS SYNCWARN bit */
mbed_official 340:28d1f895c6fe 770 __HAL_RCC_CRS_CLEAR_FLAG(RCC_CRS_FLAG_SYNCWARN);
mbed_official 340:28d1f895c6fe 771 }
mbed_official 340:28d1f895c6fe 772
mbed_official 340:28d1f895c6fe 773 /* Check CRS TRIM overflow flag */
mbed_official 340:28d1f895c6fe 774 if(__HAL_RCC_CRS_GET_FLAG(RCC_CRS_FLAG_TRIMOVF))
mbed_official 340:28d1f895c6fe 775 {
mbed_official 340:28d1f895c6fe 776 /* CRS SYNC Error */
mbed_official 340:28d1f895c6fe 777 crsstatus |= RCC_CRS_TRIMOV;
mbed_official 340:28d1f895c6fe 778
mbed_official 340:28d1f895c6fe 779 /* Clear CRS Error bit */
mbed_official 340:28d1f895c6fe 780 __HAL_RCC_CRS_CLEAR_FLAG(RCC_CRS_FLAG_TRIMOVF);
mbed_official 340:28d1f895c6fe 781 }
mbed_official 340:28d1f895c6fe 782
mbed_official 340:28d1f895c6fe 783 /* Check CRS Error flag */
mbed_official 340:28d1f895c6fe 784 if(__HAL_RCC_CRS_GET_FLAG(RCC_CRS_FLAG_SYNCERR))
mbed_official 340:28d1f895c6fe 785 {
mbed_official 340:28d1f895c6fe 786 /* CRS SYNC Error */
mbed_official 340:28d1f895c6fe 787 crsstatus |= RCC_CRS_SYNCERR;
mbed_official 340:28d1f895c6fe 788
mbed_official 340:28d1f895c6fe 789 /* Clear CRS Error bit */
mbed_official 340:28d1f895c6fe 790 __HAL_RCC_CRS_CLEAR_FLAG(RCC_CRS_FLAG_SYNCERR);
mbed_official 340:28d1f895c6fe 791 }
mbed_official 340:28d1f895c6fe 792
mbed_official 340:28d1f895c6fe 793 /* Check CRS SYNC Missed flag */
mbed_official 340:28d1f895c6fe 794 if(__HAL_RCC_CRS_GET_FLAG(RCC_CRS_FLAG_SYNCMISS))
mbed_official 340:28d1f895c6fe 795 {
mbed_official 340:28d1f895c6fe 796 /* CRS SYNC Missed */
mbed_official 340:28d1f895c6fe 797 crsstatus |= RCC_CRS_SYNCMISS;
mbed_official 340:28d1f895c6fe 798
mbed_official 340:28d1f895c6fe 799 /* Clear CRS SYNC Missed bit */
mbed_official 340:28d1f895c6fe 800 __HAL_RCC_CRS_CLEAR_FLAG(RCC_CRS_FLAG_SYNCMISS);
mbed_official 340:28d1f895c6fe 801 }
mbed_official 340:28d1f895c6fe 802
mbed_official 340:28d1f895c6fe 803 /* Check CRS Expected SYNC flag */
mbed_official 340:28d1f895c6fe 804 if(__HAL_RCC_CRS_GET_FLAG(RCC_CRS_FLAG_ESYNC))
mbed_official 340:28d1f895c6fe 805 {
mbed_official 340:28d1f895c6fe 806 /* frequency error counter reached a zero value */
mbed_official 340:28d1f895c6fe 807 __HAL_RCC_CRS_CLEAR_FLAG(RCC_CRS_FLAG_ESYNC);
mbed_official 340:28d1f895c6fe 808 }
mbed_official 340:28d1f895c6fe 809 }
mbed_official 340:28d1f895c6fe 810
mbed_official 340:28d1f895c6fe 811 return crsstatus;
mbed_official 340:28d1f895c6fe 812 }
mbed_official 340:28d1f895c6fe 813
mbed_official 340:28d1f895c6fe 814 #endif /* STM32F042x6 || STM32F048xx || */
mbed_official 340:28d1f895c6fe 815 /* STM32F071xB || STM32F072xB || STM32F078xx || */
mbed_official 340:28d1f895c6fe 816 /* STM32F091xC || STM32F098xx */
mbed_official 340:28d1f895c6fe 817
mbed_official 340:28d1f895c6fe 818 /**
mbed_official 340:28d1f895c6fe 819 * @}
mbed_official 340:28d1f895c6fe 820 */
mbed_official 340:28d1f895c6fe 821
mbed_official 340:28d1f895c6fe 822 /**
mbed_official 340:28d1f895c6fe 823 * @}
mbed_official 340:28d1f895c6fe 824 */
mbed_official 340:28d1f895c6fe 825
mbed_official 340:28d1f895c6fe 826 /**
mbed_official 340:28d1f895c6fe 827 * @}
mbed_official 340:28d1f895c6fe 828 */
mbed_official 630:825f75ca301e 829
mbed_official 630:825f75ca301e 830 #endif /* HAL_RCC_MODULE_ENABLED */
mbed_official 340:28d1f895c6fe 831
mbed_official 340:28d1f895c6fe 832 /**
mbed_official 340:28d1f895c6fe 833 * @}
mbed_official 340:28d1f895c6fe 834 */
mbed_official 340:28d1f895c6fe 835
mbed_official 340:28d1f895c6fe 836 /************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/