Mbed for VNG board

Fork of mbed-src by mbed official

Committer:
mbed_official
Date:
Wed Nov 05 14:30:08 2014 +0000
Revision:
387:643a59b3dbac
Parent:
382:ee426a420dbb
Synchronized with git revision cfeccf154f8f92c3ea9c0c881c577c154537aecc

Full URL: https://github.com/mbedmicro/mbed/commit/cfeccf154f8f92c3ea9c0c881c577c154537aecc/

Exporters: STM32L053R8 - IAR exporter

Who changed what in which revision?

UserRevisionLine numberNew contents of line
mbed_official 376:cb4d9db17537 1 /**
mbed_official 376:cb4d9db17537 2 ******************************************************************************
mbed_official 376:cb4d9db17537 3 * @file stm32l0xx_hal_rcc_ex.c
mbed_official 376:cb4d9db17537 4 * @author MCD Application Team
mbed_official 376:cb4d9db17537 5 * @version V1.1.0
mbed_official 376:cb4d9db17537 6 * @date 18-June-2014
mbed_official 376:cb4d9db17537 7 * @brief Extended RCC HAL module driver.
mbed_official 376:cb4d9db17537 8 *
mbed_official 376:cb4d9db17537 9 * This file provides firmware functions to manage the following
mbed_official 376:cb4d9db17537 10 * functionalities RCC extension peripheral:
mbed_official 376:cb4d9db17537 11 * + Extended Peripheral Control functions
mbed_official 376:cb4d9db17537 12 *
mbed_official 376:cb4d9db17537 13 @verbatim
mbed_official 376:cb4d9db17537 14 ==============================================================================
mbed_official 376:cb4d9db17537 15 ##### RCC specific features #####
mbed_official 376:cb4d9db17537 16 ==============================================================================
mbed_official 376:cb4d9db17537 17 For CRS, RCC Extension HAL driver can be used as follows:
mbed_official 376:cb4d9db17537 18
mbed_official 376:cb4d9db17537 19 (#) In System clock configuration, HSI48 need to be enabled
mbed_official 376:cb4d9db17537 20
mbed_official 376:cb4d9db17537 21 (#] Enable CRS clock in IP MSP init which will use CRS functions
mbed_official 376:cb4d9db17537 22
mbed_official 376:cb4d9db17537 23 (#) Call CRS functions like this
mbed_official 376:cb4d9db17537 24 (##) Prepare synchronization configuration necessary for HSI48 calibration
mbed_official 376:cb4d9db17537 25 (+++) Default values can be set for frequency Error Measurement (reload and error limit)
mbed_official 376:cb4d9db17537 26 and also HSI48 oscillator smooth trimming.
mbed_official 376:cb4d9db17537 27 (+++) Macro __HAL_RCC_CRS_CALCULATE_RELOADVALUE can be also used to calculate
mbed_official 376:cb4d9db17537 28 directly reload value with target and synchronization frequencies values
mbed_official 376:cb4d9db17537 29 (##) Call function HAL_RCCEx_CRSConfig which
mbed_official 376:cb4d9db17537 30 (+++) Reset CRS registers to their default values.
mbed_official 376:cb4d9db17537 31 (+++) Configure CRS registers with synchronization configuration
mbed_official 376:cb4d9db17537 32 (+++) Enable automatic calibration and frequency error counter feature
mbed_official 376:cb4d9db17537 33
mbed_official 376:cb4d9db17537 34 (##) A polling function is provided to wait for complete Synchronization
mbed_official 376:cb4d9db17537 35 (+++) Call function 'HAL_RCCEx_CRSWaitSynchronization()'
mbed_official 376:cb4d9db17537 36 (+++) According to CRS status, user can decide to adjust again the calibration or continue
mbed_official 376:cb4d9db17537 37 application if synchronization is OK
mbed_official 376:cb4d9db17537 38
mbed_official 376:cb4d9db17537 39 (#) User can retrieve information related to synchronization in calling function
mbed_official 376:cb4d9db17537 40 HAL_RCCEx_CRSGetSynchronizationInfo()
mbed_official 376:cb4d9db17537 41
mbed_official 376:cb4d9db17537 42 (#) Regarding synchronization status and synchronization information, user can try a new calibration
mbed_official 376:cb4d9db17537 43 in changing synchronization configuration and call again HAL_RCCEx_CRSConfig.
mbed_official 376:cb4d9db17537 44 Note: When the SYNC event is detected during the downcounting phase (before reaching the zero value),
mbed_official 376:cb4d9db17537 45 it means that the actual frequency is lower than the target (and so, that the TRIM value should be
mbed_official 376:cb4d9db17537 46 incremented), while when it is detected during the upcounting phase it means that the actual frequency
mbed_official 376:cb4d9db17537 47 is higher (and that the TRIM value should be decremented).
mbed_official 376:cb4d9db17537 48
mbed_official 376:cb4d9db17537 49 (#) To use IT mode, user needs to handle it in calling different macros available to do it
mbed_official 376:cb4d9db17537 50 (__HAL_RCC_CRS_XXX_IT). Interruptions will go through RCC Handler (RCC_IRQn/RCC_CRS_IRQHandler)
mbed_official 376:cb4d9db17537 51 (+++) Call function HAL_RCCEx_CRSConfig()
mbed_official 376:cb4d9db17537 52 (+++) Enable RCC_IRQn (thnaks to NVIC functions)
mbed_official 376:cb4d9db17537 53 (+++) Enable CRS IT (__HAL_RCC_CRS_ENABLE_IT)
mbed_official 376:cb4d9db17537 54 [+++) Implement CRS status management in RCC_CRS_IRQHandler
mbed_official 376:cb4d9db17537 55
mbed_official 376:cb4d9db17537 56 (#) To force a SYNC EVENT, user can use function 'HAL_RCCEx_CRSSoftwareSynchronizationGenerate()'. Function can be
mbed_official 376:cb4d9db17537 57 called before calling HAL_RCCEx_CRSConfig (for instance in Systick handler)
mbed_official 376:cb4d9db17537 58
mbed_official 376:cb4d9db17537 59 @endverbatim
mbed_official 376:cb4d9db17537 60 ******************************************************************************
mbed_official 376:cb4d9db17537 61 * @attention
mbed_official 376:cb4d9db17537 62 *
mbed_official 376:cb4d9db17537 63 * <h2><center>&copy; COPYRIGHT(c) 2014 STMicroelectronics</center></h2>
mbed_official 376:cb4d9db17537 64 *
mbed_official 376:cb4d9db17537 65 * Redistribution and use in source and binary forms, with or without modification,
mbed_official 376:cb4d9db17537 66 * are permitted provided that the following conditions are met:
mbed_official 376:cb4d9db17537 67 * 1. Redistributions of source code must retain the above copyright notice,
mbed_official 376:cb4d9db17537 68 * this list of conditions and the following disclaimer.
mbed_official 376:cb4d9db17537 69 * 2. Redistributions in binary form must reproduce the above copyright notice,
mbed_official 376:cb4d9db17537 70 * this list of conditions and the following disclaimer in the documentation
mbed_official 376:cb4d9db17537 71 * and/or other materials provided with the distribution.
mbed_official 376:cb4d9db17537 72 * 3. Neither the name of STMicroelectronics nor the names of its contributors
mbed_official 376:cb4d9db17537 73 * may be used to endorse or promote products derived from this software
mbed_official 376:cb4d9db17537 74 * without specific prior written permission.
mbed_official 376:cb4d9db17537 75 *
mbed_official 376:cb4d9db17537 76 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
mbed_official 376:cb4d9db17537 77 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
mbed_official 376:cb4d9db17537 78 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
mbed_official 376:cb4d9db17537 79 * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
mbed_official 376:cb4d9db17537 80 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
mbed_official 376:cb4d9db17537 81 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
mbed_official 376:cb4d9db17537 82 * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
mbed_official 376:cb4d9db17537 83 * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
mbed_official 376:cb4d9db17537 84 * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
mbed_official 376:cb4d9db17537 85 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
mbed_official 376:cb4d9db17537 86 *
mbed_official 376:cb4d9db17537 87 ******************************************************************************
mbed_official 376:cb4d9db17537 88 */
mbed_official 376:cb4d9db17537 89
mbed_official 376:cb4d9db17537 90 /* Includes ------------------------------------------------------------------*/
mbed_official 376:cb4d9db17537 91 #include "stm32l0xx_hal.h"
mbed_official 376:cb4d9db17537 92
mbed_official 376:cb4d9db17537 93 /** @addtogroup STM32L0xx_HAL_Driver
mbed_official 376:cb4d9db17537 94 * @{
mbed_official 376:cb4d9db17537 95 */
mbed_official 376:cb4d9db17537 96
mbed_official 376:cb4d9db17537 97 /** @defgroup RCCEx
mbed_official 376:cb4d9db17537 98 * @brief RCC Extension HAL module driver
mbed_official 376:cb4d9db17537 99 * @{
mbed_official 376:cb4d9db17537 100 */
mbed_official 376:cb4d9db17537 101
mbed_official 376:cb4d9db17537 102 #ifdef HAL_RCC_MODULE_ENABLED
mbed_official 376:cb4d9db17537 103
mbed_official 376:cb4d9db17537 104 /* Private typedef -----------------------------------------------------------*/
mbed_official 376:cb4d9db17537 105 /* Private define ------------------------------------------------------------*/
mbed_official 376:cb4d9db17537 106 /* Bit position in register */
mbed_official 376:cb4d9db17537 107 #define CRS_CFGR_FELIM_BITNUMBER 16
mbed_official 376:cb4d9db17537 108 #define CRS_CR_TRIM_BITNUMBER 8
mbed_official 376:cb4d9db17537 109 #define CRS_ISR_FECAP_BITNUMBER 16
mbed_official 376:cb4d9db17537 110
mbed_official 376:cb4d9db17537 111 /* Private macro -------------------------------------------------------------*/
mbed_official 376:cb4d9db17537 112 /* Private variables ---------------------------------------------------------*/
mbed_official 376:cb4d9db17537 113 /* Private function prototypes -----------------------------------------------*/
mbed_official 376:cb4d9db17537 114 /* Private functions ---------------------------------------------------------*/
mbed_official 376:cb4d9db17537 115
mbed_official 376:cb4d9db17537 116 /** @defgroup RCCEx_Private_Functions
mbed_official 376:cb4d9db17537 117 * @{
mbed_official 376:cb4d9db17537 118 */
mbed_official 376:cb4d9db17537 119
mbed_official 376:cb4d9db17537 120 /** @defgroup RCCEx_Group1 Extended Peripheral Control functions
mbed_official 376:cb4d9db17537 121 * @brief Extended Peripheral Control functions
mbed_official 376:cb4d9db17537 122 *
mbed_official 376:cb4d9db17537 123 @verbatim
mbed_official 376:cb4d9db17537 124 ===============================================================================
mbed_official 376:cb4d9db17537 125 ##### Extended Peripheral Control functions #####
mbed_official 376:cb4d9db17537 126 ===============================================================================
mbed_official 376:cb4d9db17537 127 [..]
mbed_official 376:cb4d9db17537 128 This subsection provides a set of functions allowing to control the RCC Clocks
mbed_official 376:cb4d9db17537 129 frequencies.
mbed_official 376:cb4d9db17537 130
mbed_official 376:cb4d9db17537 131 @endverbatim
mbed_official 376:cb4d9db17537 132 * @{
mbed_official 376:cb4d9db17537 133 */
mbed_official 376:cb4d9db17537 134
mbed_official 376:cb4d9db17537 135 /**
mbed_official 376:cb4d9db17537 136 * @brief Initializes the RCC extended peripherals clocks according to the specified parameters in the
mbed_official 376:cb4d9db17537 137 * RCC_PeriphCLKInitTypeDef.
mbed_official 376:cb4d9db17537 138 * @param PeriphClkInit: pointer to an RCC_PeriphCLKInitTypeDef structure that
mbed_official 376:cb4d9db17537 139 * contains the configuration information for the Extended Peripherals clocks(USART1,USART2, LPUART1,
mbed_official 376:cb4d9db17537 140 * I2C1, RTC, USB/RNG and LPTIM1 clocks).
mbed_official 376:cb4d9db17537 141 * @retval HAL status
mbed_official 376:cb4d9db17537 142 */
mbed_official 376:cb4d9db17537 143 HAL_StatusTypeDef HAL_RCCEx_PeriphCLKConfig(RCC_PeriphCLKInitTypeDef *PeriphClkInit)
mbed_official 376:cb4d9db17537 144 {
mbed_official 376:cb4d9db17537 145 uint32_t tickstart = 0;
mbed_official 376:cb4d9db17537 146 uint32_t tmpreg = 0;
mbed_official 376:cb4d9db17537 147
mbed_official 376:cb4d9db17537 148 /* Check the parameters */
mbed_official 376:cb4d9db17537 149 assert_param(IS_RCC_PERIPHCLK(PeriphClkInit->PeriphClockSelection));
mbed_official 376:cb4d9db17537 150
mbed_official 376:cb4d9db17537 151 /*------------------------------- USART1 Configuration ------------------------*/
mbed_official 376:cb4d9db17537 152 if(((PeriphClkInit->PeriphClockSelection) & RCC_PERIPHCLK_USART1) == RCC_PERIPHCLK_USART1)
mbed_official 376:cb4d9db17537 153 {
mbed_official 376:cb4d9db17537 154 /* Check the parameters */
mbed_official 376:cb4d9db17537 155 assert_param(IS_RCC_USART1CLKSOURCE(PeriphClkInit->Usart1ClockSelection));
mbed_official 376:cb4d9db17537 156
mbed_official 376:cb4d9db17537 157 /* Configure the USART1 clock source */
mbed_official 376:cb4d9db17537 158 __HAL_RCC_USART1_CONFIG(PeriphClkInit->Usart1ClockSelection);
mbed_official 376:cb4d9db17537 159 }
mbed_official 376:cb4d9db17537 160
mbed_official 376:cb4d9db17537 161 /*----------------------------- USART2 Configuration --------------------------*/
mbed_official 376:cb4d9db17537 162 if(((PeriphClkInit->PeriphClockSelection) & RCC_PERIPHCLK_USART2) == RCC_PERIPHCLK_USART2)
mbed_official 376:cb4d9db17537 163 {
mbed_official 376:cb4d9db17537 164 /* Check the parameters */
mbed_official 376:cb4d9db17537 165 assert_param(IS_RCC_USART2CLKSOURCE(PeriphClkInit->Usart2ClockSelection));
mbed_official 376:cb4d9db17537 166
mbed_official 376:cb4d9db17537 167 /* Configure the USART2 clock source */
mbed_official 376:cb4d9db17537 168 __HAL_RCC_USART2_CONFIG(PeriphClkInit->Usart2ClockSelection);
mbed_official 376:cb4d9db17537 169 }
mbed_official 376:cb4d9db17537 170
mbed_official 376:cb4d9db17537 171 /*------------------------------ LPUART1 Configuration ------------------------*/
mbed_official 376:cb4d9db17537 172 if(((PeriphClkInit->PeriphClockSelection) & RCC_PERIPHCLK_LPUART1) == RCC_PERIPHCLK_LPUART1)
mbed_official 376:cb4d9db17537 173 {
mbed_official 376:cb4d9db17537 174 /* Check the parameters */
mbed_official 376:cb4d9db17537 175 assert_param(IS_RCC_LPUART1CLKSOURCE(PeriphClkInit->Lpuart1ClockSelection));
mbed_official 376:cb4d9db17537 176
mbed_official 376:cb4d9db17537 177 /* Configure the LPUAR1 clock source */
mbed_official 376:cb4d9db17537 178 __HAL_RCC_LPUART1_CONFIG(PeriphClkInit->Lpuart1ClockSelection);
mbed_official 376:cb4d9db17537 179 }
mbed_official 376:cb4d9db17537 180
mbed_official 376:cb4d9db17537 181 /*------------------------------ I2C1 Configuration ------------------------*/
mbed_official 376:cb4d9db17537 182 if(((PeriphClkInit->PeriphClockSelection) & RCC_PERIPHCLK_I2C1) == RCC_PERIPHCLK_I2C1)
mbed_official 376:cb4d9db17537 183 {
mbed_official 376:cb4d9db17537 184 /* Check the parameters */
mbed_official 376:cb4d9db17537 185 assert_param(IS_RCC_I2C1CLKSOURCE(PeriphClkInit->I2c1ClockSelection));
mbed_official 376:cb4d9db17537 186
mbed_official 376:cb4d9db17537 187 /* Configure the I2C1 clock source */
mbed_official 376:cb4d9db17537 188 __HAL_RCC_I2C1_CONFIG(PeriphClkInit->I2c1ClockSelection);
mbed_official 376:cb4d9db17537 189 }
mbed_official 376:cb4d9db17537 190
mbed_official 376:cb4d9db17537 191
mbed_official 376:cb4d9db17537 192 /*---------------------------- RTC configuration -------------------------------*/
mbed_official 376:cb4d9db17537 193 if(((PeriphClkInit->PeriphClockSelection) & RCC_PERIPHCLK_RTC) == (RCC_PERIPHCLK_RTC))
mbed_official 376:cb4d9db17537 194 {
mbed_official 376:cb4d9db17537 195 /* Enable Power Clock*/
mbed_official 376:cb4d9db17537 196 __PWR_CLK_ENABLE();
mbed_official 376:cb4d9db17537 197
mbed_official 376:cb4d9db17537 198 /* Enable write access to Backup domain */
mbed_official 376:cb4d9db17537 199 PWR->CR |= PWR_CR_DBP;
mbed_official 376:cb4d9db17537 200
mbed_official 376:cb4d9db17537 201 /* Wait for Backup domain Write protection disable */
mbed_official 376:cb4d9db17537 202 tickstart = HAL_GetTick();
mbed_official 376:cb4d9db17537 203
mbed_official 376:cb4d9db17537 204 while((PWR->CR & PWR_CR_DBP) == RESET)
mbed_official 376:cb4d9db17537 205 {
mbed_official 376:cb4d9db17537 206 if((HAL_GetTick() - tickstart ) > DBP_TIMEOUT_VALUE)
mbed_official 376:cb4d9db17537 207 {
mbed_official 376:cb4d9db17537 208 return HAL_TIMEOUT;
mbed_official 376:cb4d9db17537 209 }
mbed_official 376:cb4d9db17537 210 }
mbed_official 376:cb4d9db17537 211
mbed_official 376:cb4d9db17537 212 /* Reset the Backup domain only if the RTC Clock source selection is modified */
mbed_official 376:cb4d9db17537 213 if((RCC->CSR & RCC_CSR_RTCSEL) != (PeriphClkInit->RTCClockSelection & RCC_CSR_RTCSEL))
mbed_official 376:cb4d9db17537 214 {
mbed_official 376:cb4d9db17537 215 /* Store the content of CSR register before the reset of Backup Domain */
mbed_official 376:cb4d9db17537 216 tmpreg = (RCC->CSR & ~(RCC_CSR_RTCSEL));
mbed_official 376:cb4d9db17537 217 /* RTC Clock selection can be changed only if the Backup Domain is reset */
mbed_official 376:cb4d9db17537 218 __HAL_RCC_BACKUPRESET_FORCE();
mbed_official 376:cb4d9db17537 219 __HAL_RCC_BACKUPRESET_RELEASE();
mbed_official 376:cb4d9db17537 220 /* Restore the Content of CSR register */
mbed_official 376:cb4d9db17537 221 RCC->CSR = tmpreg;
mbed_official 376:cb4d9db17537 222 }
mbed_official 376:cb4d9db17537 223
mbed_official 376:cb4d9db17537 224 /* If LSE is selected as RTC clock source, wait for LSE reactivation */
mbed_official 376:cb4d9db17537 225 if(PeriphClkInit->RTCClockSelection == RCC_RTCCLKSOURCE_LSE)
mbed_official 376:cb4d9db17537 226 {
mbed_official 376:cb4d9db17537 227 /* Get timeout */
mbed_official 376:cb4d9db17537 228 tickstart = HAL_GetTick();
mbed_official 376:cb4d9db17537 229
mbed_official 376:cb4d9db17537 230 /* Wait till LSE is ready */
mbed_official 376:cb4d9db17537 231 while(__HAL_RCC_GET_FLAG(RCC_FLAG_LSERDY) == RESET)
mbed_official 376:cb4d9db17537 232 {
mbed_official 376:cb4d9db17537 233 if((HAL_GetTick() - tickstart ) > LSE_TIMEOUT_VALUE)
mbed_official 376:cb4d9db17537 234 {
mbed_official 376:cb4d9db17537 235 return HAL_TIMEOUT;
mbed_official 376:cb4d9db17537 236 }
mbed_official 376:cb4d9db17537 237 }
mbed_official 376:cb4d9db17537 238 }
mbed_official 376:cb4d9db17537 239 __HAL_RCC_RTC_CONFIG(PeriphClkInit->RTCClockSelection);
mbed_official 376:cb4d9db17537 240 }
mbed_official 376:cb4d9db17537 241 #if !defined(STM32L051xx) && !defined(STM32L061xx)
mbed_official 376:cb4d9db17537 242 /*---------------------------- USB and RNG configuration --------------------*/
mbed_official 376:cb4d9db17537 243 if(((PeriphClkInit->PeriphClockSelection) & RCC_PERIPHCLK_USB) == (RCC_PERIPHCLK_USB))
mbed_official 376:cb4d9db17537 244 {
mbed_official 376:cb4d9db17537 245 assert_param(IS_RCC_USBCLKSOURCE(PeriphClkInit->UsbClockSelection));
mbed_official 376:cb4d9db17537 246 __HAL_RCC_USB_CONFIG(PeriphClkInit->UsbClockSelection);
mbed_official 376:cb4d9db17537 247 }
mbed_official 376:cb4d9db17537 248 #endif /* !(STM32L051xx) && !(STM32L061xx) */
mbed_official 376:cb4d9db17537 249
mbed_official 376:cb4d9db17537 250 /*---------------------------- LPTIM1 configuration ------------------------*/
mbed_official 376:cb4d9db17537 251 if(((PeriphClkInit->PeriphClockSelection) & RCC_PERIPHCLK_LPTIM1) == (RCC_PERIPHCLK_LPTIM1))
mbed_official 376:cb4d9db17537 252 {
mbed_official 376:cb4d9db17537 253 assert_param(IS_RCC_LPTIMCLK(PeriphClkInit->LptimClockSelection));
mbed_official 376:cb4d9db17537 254 __HAL_RCC_LPTIM1_CONFIG(PeriphClkInit->LptimClockSelection);
mbed_official 376:cb4d9db17537 255 }
mbed_official 376:cb4d9db17537 256 return HAL_OK;
mbed_official 376:cb4d9db17537 257 }
mbed_official 376:cb4d9db17537 258
mbed_official 376:cb4d9db17537 259 /**
mbed_official 376:cb4d9db17537 260 * @brief Get the RCC_ClkInitStruct according to the internal
mbed_official 376:cb4d9db17537 261 * RCC configuration registers.
mbed_official 376:cb4d9db17537 262 * @param PeriphClkInit: pointer to an RCC_PeriphCLKInitTypeDef structure that
mbed_official 376:cb4d9db17537 263 * returns the configuration information for the Extended Peripherals clocks(USART1,USART2, LPUART1,
mbed_official 376:cb4d9db17537 264 * I2C1, RTC, USB/RNG and LPTIM1 clocks).
mbed_official 376:cb4d9db17537 265 * @retval None
mbed_official 376:cb4d9db17537 266 */
mbed_official 376:cb4d9db17537 267 void HAL_RCCEx_GetPeriphCLKConfig(RCC_PeriphCLKInitTypeDef *PeriphClkInit)
mbed_official 376:cb4d9db17537 268 {
mbed_official 376:cb4d9db17537 269 /* Set all possible values for the extended clock type parameter -----------*/
mbed_official 376:cb4d9db17537 270 /* Common part first */
mbed_official 376:cb4d9db17537 271 #if !defined(STM32L051xx) && !defined(STM32L061xx)
mbed_official 376:cb4d9db17537 272 PeriphClkInit->PeriphClockSelection = RCC_PERIPHCLK_USART1 | RCC_PERIPHCLK_USART2 | RCC_PERIPHCLK_LPUART1 | \
mbed_official 376:cb4d9db17537 273 RCC_PERIPHCLK_I2C1 | RCC_PERIPHCLK_I2C2 | RCC_PERIPHCLK_RTC | \
mbed_official 376:cb4d9db17537 274 RCC_PERIPHCLK_USB | RCC_PERIPHCLK_LPTIM1;
mbed_official 376:cb4d9db17537 275
mbed_official 376:cb4d9db17537 276 #else
mbed_official 376:cb4d9db17537 277 PeriphClkInit->PeriphClockSelection = RCC_PERIPHCLK_USART1 | RCC_PERIPHCLK_USART2 | RCC_PERIPHCLK_LPUART1 | \
mbed_official 376:cb4d9db17537 278 RCC_PERIPHCLK_I2C1 | RCC_PERIPHCLK_I2C2 | RCC_PERIPHCLK_RTC | \
mbed_official 376:cb4d9db17537 279 RCC_PERIPHCLK_LPTIM1;
mbed_official 376:cb4d9db17537 280 #endif /* !(STM32L051xx) && !(STM32L061xx) */
mbed_official 376:cb4d9db17537 281
mbed_official 376:cb4d9db17537 282 /* Get the USART1 configuration --------------------------------------------*/
mbed_official 376:cb4d9db17537 283 PeriphClkInit->Usart1ClockSelection = __HAL_RCC_GET_USART1_SOURCE();
mbed_official 376:cb4d9db17537 284 /* Get the USART2 clock source ---------------------------------------------*/
mbed_official 376:cb4d9db17537 285 PeriphClkInit->Usart2ClockSelection = __HAL_RCC_GET_USART2_SOURCE();
mbed_official 376:cb4d9db17537 286 /* Get the LPUART1 clock source ---------------------------------------------*/
mbed_official 376:cb4d9db17537 287 PeriphClkInit->Lpuart1ClockSelection = __HAL_RCC_GET_LPUART1_SOURCE();
mbed_official 376:cb4d9db17537 288 /* Get the I2C1 clock source -----------------------------------------------*/
mbed_official 376:cb4d9db17537 289 PeriphClkInit->I2c1ClockSelection = __HAL_RCC_GET_I2C1_SOURCE();
mbed_official 376:cb4d9db17537 290 /* Get the LPTIM1 clock source -----------------------------------------------*/
mbed_official 376:cb4d9db17537 291 PeriphClkInit->LptimClockSelection = __HAL_RCC_GET_LPTIM1_SOURCE();
mbed_official 376:cb4d9db17537 292 /* Get the RTC clock source -----------------------------------------------*/
mbed_official 376:cb4d9db17537 293 PeriphClkInit->RTCClockSelection = __HAL_RCC_GET_RTC_SOURCE();
mbed_official 376:cb4d9db17537 294
mbed_official 376:cb4d9db17537 295 #if !defined(STM32L051xx) && !defined(STM32L061xx)
mbed_official 376:cb4d9db17537 296 /* Get the USB/RNG clock source -----------------------------------------------*/
mbed_official 376:cb4d9db17537 297 PeriphClkInit->UsbClockSelection = __HAL_RCC_GET_USB_SOURCE();
mbed_official 376:cb4d9db17537 298 #endif /* !(STM32L051xx) && !(STM32L061xx) */
mbed_official 376:cb4d9db17537 299 }
mbed_official 376:cb4d9db17537 300
mbed_official 376:cb4d9db17537 301 /**
mbed_official 376:cb4d9db17537 302 * @brief Enables the LSE Clock Security System.
mbed_official 376:cb4d9db17537 303 * @param None
mbed_official 376:cb4d9db17537 304 * @retval None
mbed_official 376:cb4d9db17537 305 */
mbed_official 376:cb4d9db17537 306 void HAL_RCCEx_EnableLSECSS(void)
mbed_official 376:cb4d9db17537 307 {
mbed_official 376:cb4d9db17537 308 SET_BIT(RCC->CSR, RCC_CSR_LSECSSON) ;
mbed_official 376:cb4d9db17537 309 }
mbed_official 376:cb4d9db17537 310
mbed_official 376:cb4d9db17537 311 /**
mbed_official 376:cb4d9db17537 312 * @brief Disables the LSE Clock Security System.
mbed_official 376:cb4d9db17537 313 * @param None
mbed_official 376:cb4d9db17537 314 * @retval None
mbed_official 376:cb4d9db17537 315 */
mbed_official 376:cb4d9db17537 316 void HAL_RCCEx_DisableLSECSS(void)
mbed_official 376:cb4d9db17537 317 {
mbed_official 376:cb4d9db17537 318 CLEAR_BIT(RCC->CSR, RCC_CSR_LSECSSON) ;
mbed_official 376:cb4d9db17537 319 }
mbed_official 376:cb4d9db17537 320
mbed_official 376:cb4d9db17537 321 #if !defined(STM32L051xx) && !defined(STM32L061xx)
mbed_official 376:cb4d9db17537 322
mbed_official 376:cb4d9db17537 323 /**
mbed_official 376:cb4d9db17537 324 * @brief Start automatic synchronization using polling mode
mbed_official 376:cb4d9db17537 325 * @param pInit Pointer on RCC_CRSInitTypeDef structure
mbed_official 376:cb4d9db17537 326 * @retval None
mbed_official 376:cb4d9db17537 327 */
mbed_official 376:cb4d9db17537 328 void HAL_RCCEx_CRSConfig(RCC_CRSInitTypeDef *pInit)
mbed_official 376:cb4d9db17537 329 {
mbed_official 376:cb4d9db17537 330 /* Check the parameters */
mbed_official 376:cb4d9db17537 331 assert_param(IS_RCC_CRS_SYNC_DIV(pInit->Prescaler));
mbed_official 376:cb4d9db17537 332 assert_param(IS_RCC_CRS_SYNC_SOURCE(pInit->Source));
mbed_official 376:cb4d9db17537 333 assert_param(IS_RCC_CRS_SYNC_POLARITY(pInit->Polarity));
mbed_official 376:cb4d9db17537 334 assert_param(IS_RCC_CRS_RELOADVALUE(pInit->ReloadValue));
mbed_official 376:cb4d9db17537 335 assert_param(IS_RCC_CRS_ERRORLIMIT(pInit->ErrorLimitValue));
mbed_official 376:cb4d9db17537 336 assert_param(IS_RCC_CRS_HSI48CALIBRATION(pInit->HSI48CalibrationValue));
mbed_official 376:cb4d9db17537 337
mbed_official 376:cb4d9db17537 338
mbed_official 376:cb4d9db17537 339 /* CONFIGURATION */
mbed_official 376:cb4d9db17537 340
mbed_official 376:cb4d9db17537 341 /* Before configuration, reset CRS registers to their default values*/
mbed_official 376:cb4d9db17537 342 __CRS_FORCE_RESET();
mbed_official 376:cb4d9db17537 343 __CRS_RELEASE_RESET();
mbed_official 376:cb4d9db17537 344
mbed_official 376:cb4d9db17537 345 /* Configure Synchronization input */
mbed_official 376:cb4d9db17537 346 /* Clear SYNCDIV[2:0], SYNCSRC[1:0] & SYNCSPOL bits */
mbed_official 376:cb4d9db17537 347 CRS->CFGR &= ~(CRS_CFGR_SYNCDIV | CRS_CFGR_SYNCSRC | CRS_CFGR_SYNCPOL);
mbed_official 376:cb4d9db17537 348
mbed_official 376:cb4d9db17537 349 /* Set the CRS_CFGR_SYNCDIV[2:0] bits according to Prescaler value */
mbed_official 376:cb4d9db17537 350 CRS->CFGR |= pInit->Prescaler;
mbed_official 376:cb4d9db17537 351
mbed_official 376:cb4d9db17537 352 /* Set the SYNCSRC[1:0] bits according to Source value */
mbed_official 376:cb4d9db17537 353 CRS->CFGR |= pInit->Source;
mbed_official 376:cb4d9db17537 354
mbed_official 376:cb4d9db17537 355 /* Set the SYNCSPOL bits according to Polarity value */
mbed_official 376:cb4d9db17537 356 CRS->CFGR |= pInit->Polarity;
mbed_official 376:cb4d9db17537 357
mbed_official 376:cb4d9db17537 358 /* Configure Frequency Error Measurement */
mbed_official 376:cb4d9db17537 359 /* Clear RELOAD[15:0] & FELIM[7:0] bits*/
mbed_official 376:cb4d9db17537 360 CRS->CFGR &= ~(CRS_CFGR_RELOAD | CRS_CFGR_FELIM);
mbed_official 376:cb4d9db17537 361
mbed_official 376:cb4d9db17537 362 /* Set the RELOAD[15:0] bits according to ReloadValue value */
mbed_official 376:cb4d9db17537 363 CRS->CFGR |= pInit->ReloadValue;
mbed_official 376:cb4d9db17537 364
mbed_official 376:cb4d9db17537 365 /* Set the FELIM[7:0] bits according to ErrorLimitValue value */
mbed_official 376:cb4d9db17537 366 CRS->CFGR |= (pInit->ErrorLimitValue << CRS_CFGR_FELIM_BITNUMBER);
mbed_official 376:cb4d9db17537 367
mbed_official 376:cb4d9db17537 368 /* Adjust HSI48 oscillator smooth trimming */
mbed_official 376:cb4d9db17537 369 /* Clear TRIM[5:0] bits */
mbed_official 376:cb4d9db17537 370 CRS->CR &= ~CRS_CR_TRIM;
mbed_official 376:cb4d9db17537 371
mbed_official 376:cb4d9db17537 372 /* Set the TRIM[5:0] bits according to RCC_CRS_HSI48CalibrationValue value */
mbed_official 376:cb4d9db17537 373 CRS->CR |= (pInit->HSI48CalibrationValue << CRS_CR_TRIM_BITNUMBER);
mbed_official 376:cb4d9db17537 374
mbed_official 376:cb4d9db17537 375
mbed_official 376:cb4d9db17537 376 /* START AUTOMATIC SYNCHRONIZATION*/
mbed_official 376:cb4d9db17537 377
mbed_official 376:cb4d9db17537 378 /* Enable Automatic trimming */
mbed_official 376:cb4d9db17537 379 __HAL_RCC_CRS_ENABLE_AUTOMATIC_CALIB();
mbed_official 376:cb4d9db17537 380
mbed_official 376:cb4d9db17537 381 /* Enable Frequency error counter */
mbed_official 376:cb4d9db17537 382 __HAL_RCC_CRS_ENABLE_FREQ_ERROR_COUNTER();
mbed_official 376:cb4d9db17537 383
mbed_official 376:cb4d9db17537 384 }
mbed_official 376:cb4d9db17537 385
mbed_official 376:cb4d9db17537 386 /**
mbed_official 376:cb4d9db17537 387 * @brief Generate the software synchronization event
mbed_official 376:cb4d9db17537 388 * @param None
mbed_official 376:cb4d9db17537 389 * @retval None
mbed_official 376:cb4d9db17537 390 */
mbed_official 376:cb4d9db17537 391 void HAL_RCCEx_CRSSoftwareSynchronizationGenerate(void)
mbed_official 376:cb4d9db17537 392 {
mbed_official 376:cb4d9db17537 393 CRS->CR |= CRS_CR_SWSYNC;
mbed_official 376:cb4d9db17537 394 }
mbed_official 376:cb4d9db17537 395
mbed_official 376:cb4d9db17537 396
mbed_official 376:cb4d9db17537 397 /**
mbed_official 376:cb4d9db17537 398 * @brief Function to return synchronization info
mbed_official 376:cb4d9db17537 399 * @param pSynchroInfo Pointer on RCC_CRSSynchroInfoTypeDef structure
mbed_official 376:cb4d9db17537 400 * @retval None
mbed_official 376:cb4d9db17537 401 */
mbed_official 376:cb4d9db17537 402 void HAL_RCCEx_CRSGetSynchronizationInfo(RCC_CRSSynchroInfoTypeDef *pSynchroInfo)
mbed_official 376:cb4d9db17537 403 {
mbed_official 376:cb4d9db17537 404 /* Check the parameter */
mbed_official 387:643a59b3dbac 405 assert_param(pSynchroInfo != HAL_NULL);
mbed_official 376:cb4d9db17537 406
mbed_official 376:cb4d9db17537 407 /* Get the reload value */
mbed_official 376:cb4d9db17537 408 pSynchroInfo->ReloadValue = (uint32_t)(CRS->CFGR & CRS_CFGR_RELOAD);
mbed_official 376:cb4d9db17537 409
mbed_official 376:cb4d9db17537 410 /* Get HSI48 oscillator smooth trimming */
mbed_official 376:cb4d9db17537 411 pSynchroInfo->HSI48CalibrationValue = (uint32_t)((CRS->CR & CRS_CR_TRIM) >> CRS_CR_TRIM_BITNUMBER);
mbed_official 376:cb4d9db17537 412
mbed_official 376:cb4d9db17537 413 /* Get Frequency error capture */
mbed_official 376:cb4d9db17537 414 pSynchroInfo->FreqErrorCapture = (uint32_t)((CRS->ISR & CRS_ISR_FECAP) >> CRS_ISR_FECAP_BITNUMBER);
mbed_official 376:cb4d9db17537 415
mbed_official 376:cb4d9db17537 416 /* Get Frequency error direction */
mbed_official 376:cb4d9db17537 417 pSynchroInfo->FreqErrorDirection = (uint32_t)(CRS->ISR & CRS_ISR_FEDIR);
mbed_official 376:cb4d9db17537 418
mbed_official 376:cb4d9db17537 419
mbed_official 376:cb4d9db17537 420 }
mbed_official 376:cb4d9db17537 421
mbed_official 376:cb4d9db17537 422 /**
mbed_official 376:cb4d9db17537 423 * @brief This function handles CRS Synchronization Timeout.
mbed_official 376:cb4d9db17537 424 * @param Timeout: Duration of the timeout
mbed_official 376:cb4d9db17537 425 * @note Timeout is based on the maximum time to receive a SYNC event based on synchronization
mbed_official 376:cb4d9db17537 426 * frequency.
mbed_official 376:cb4d9db17537 427 * @note If Timeout set to HAL_MAX_DELAY, HAL_TIMEOUT will be never returned.
mbed_official 376:cb4d9db17537 428 * @retval Combination of Synchronization status
mbed_official 376:cb4d9db17537 429 * This parameter can be a combination of the following values:
mbed_official 376:cb4d9db17537 430 * @arg RCC_CRS_TIMEOUT
mbed_official 376:cb4d9db17537 431 * @arg RCC_CRS_SYNCOK
mbed_official 376:cb4d9db17537 432 * @arg RCC_CRS_SYNCWARM
mbed_official 376:cb4d9db17537 433 * @arg RCC_CRS_SYNCERR
mbed_official 376:cb4d9db17537 434 * @arg RCC_CRS_SYNCMISS
mbed_official 376:cb4d9db17537 435 * @arg RCC_CRS_TRIMOV
mbed_official 376:cb4d9db17537 436 */
mbed_official 376:cb4d9db17537 437 RCC_CRSStatusTypeDef HAL_RCCEx_CRSWaitSynchronization(uint32_t Timeout)
mbed_official 376:cb4d9db17537 438 {
mbed_official 376:cb4d9db17537 439 RCC_CRSStatusTypeDef crsstatus = RCC_CRS_NONE;
mbed_official 376:cb4d9db17537 440 uint32_t tickstart = 0;
mbed_official 376:cb4d9db17537 441
mbed_official 376:cb4d9db17537 442 /* Get timeout */
mbed_official 376:cb4d9db17537 443 tickstart = HAL_GetTick();
mbed_official 376:cb4d9db17537 444
mbed_official 376:cb4d9db17537 445 /* Check that if one of CRS flags have been set */
mbed_official 376:cb4d9db17537 446 while(RCC_CRS_NONE == crsstatus)
mbed_official 376:cb4d9db17537 447 {
mbed_official 376:cb4d9db17537 448 if(Timeout != HAL_MAX_DELAY)
mbed_official 376:cb4d9db17537 449 {
mbed_official 376:cb4d9db17537 450 if((Timeout == 0)||((HAL_GetTick() - tickstart ) > Timeout))
mbed_official 376:cb4d9db17537 451 {
mbed_official 376:cb4d9db17537 452 crsstatus = RCC_CRS_TIMEOUT;
mbed_official 376:cb4d9db17537 453 }
mbed_official 376:cb4d9db17537 454 }
mbed_official 376:cb4d9db17537 455 /* Check CRS SYNCOK flag */
mbed_official 376:cb4d9db17537 456 if(__HAL_RCC_CRS_GET_FLAG(RCC_CRS_FLAG_SYNCOK))
mbed_official 376:cb4d9db17537 457 {
mbed_official 376:cb4d9db17537 458 /* CRS SYNC event OK */
mbed_official 376:cb4d9db17537 459 crsstatus |= RCC_CRS_SYNCOK;
mbed_official 376:cb4d9db17537 460
mbed_official 376:cb4d9db17537 461 /* Clear CRS SYNC event OK bit */
mbed_official 376:cb4d9db17537 462 __HAL_RCC_CRS_CLEAR_FLAG(RCC_CRS_FLAG_SYNCOK);
mbed_official 376:cb4d9db17537 463 }
mbed_official 376:cb4d9db17537 464
mbed_official 376:cb4d9db17537 465 /* Check CRS SYNCWARN flag */
mbed_official 376:cb4d9db17537 466 if(__HAL_RCC_CRS_GET_FLAG(RCC_CRS_FLAG_SYNCWARN))
mbed_official 376:cb4d9db17537 467 {
mbed_official 376:cb4d9db17537 468 /* CRS SYNC warning */
mbed_official 376:cb4d9db17537 469 crsstatus |= RCC_CRS_SYNCWARM;
mbed_official 376:cb4d9db17537 470
mbed_official 376:cb4d9db17537 471 /* Clear CRS SYNCWARN bit */
mbed_official 376:cb4d9db17537 472 __HAL_RCC_CRS_CLEAR_FLAG(RCC_CRS_FLAG_SYNCWARN);
mbed_official 376:cb4d9db17537 473 }
mbed_official 376:cb4d9db17537 474
mbed_official 376:cb4d9db17537 475 /* Check CRS TRIM overflow flag */
mbed_official 376:cb4d9db17537 476 if(__HAL_RCC_CRS_GET_FLAG(RCC_CRS_FLAG_TRIMOVF))
mbed_official 376:cb4d9db17537 477 {
mbed_official 376:cb4d9db17537 478 /* CRS SYNC Error */
mbed_official 376:cb4d9db17537 479 crsstatus |= RCC_CRS_TRIMOV;
mbed_official 376:cb4d9db17537 480
mbed_official 376:cb4d9db17537 481 /* Clear CRS Error bit */
mbed_official 376:cb4d9db17537 482 __HAL_RCC_CRS_CLEAR_FLAG(RCC_CRS_FLAG_TRIMOVF);
mbed_official 376:cb4d9db17537 483 }
mbed_official 376:cb4d9db17537 484
mbed_official 376:cb4d9db17537 485 /* Check CRS Error flag */
mbed_official 376:cb4d9db17537 486 if(__HAL_RCC_CRS_GET_FLAG(RCC_CRS_FLAG_SYNCERR))
mbed_official 376:cb4d9db17537 487 {
mbed_official 376:cb4d9db17537 488 /* CRS SYNC Error */
mbed_official 376:cb4d9db17537 489 crsstatus |= RCC_CRS_SYNCERR;
mbed_official 376:cb4d9db17537 490
mbed_official 376:cb4d9db17537 491 /* Clear CRS Error bit */
mbed_official 376:cb4d9db17537 492 __HAL_RCC_CRS_CLEAR_FLAG(RCC_CRS_FLAG_SYNCERR);
mbed_official 376:cb4d9db17537 493 }
mbed_official 376:cb4d9db17537 494
mbed_official 376:cb4d9db17537 495 /* Check CRS SYNC Missed flag */
mbed_official 376:cb4d9db17537 496 if(__HAL_RCC_CRS_GET_FLAG(RCC_CRS_FLAG_SYNCMISS))
mbed_official 376:cb4d9db17537 497 {
mbed_official 376:cb4d9db17537 498 /* CRS SYNC Missed */
mbed_official 376:cb4d9db17537 499 crsstatus |= RCC_CRS_SYNCMISS;
mbed_official 376:cb4d9db17537 500
mbed_official 376:cb4d9db17537 501 /* Clear CRS SYNC Missed bit */
mbed_official 376:cb4d9db17537 502 __HAL_RCC_CRS_CLEAR_FLAG(RCC_CRS_FLAG_SYNCMISS);
mbed_official 376:cb4d9db17537 503 }
mbed_official 376:cb4d9db17537 504
mbed_official 376:cb4d9db17537 505 /* Check CRS Expected SYNC flag */
mbed_official 376:cb4d9db17537 506 if(__HAL_RCC_CRS_GET_FLAG(RCC_CRS_FLAG_ESYNC))
mbed_official 376:cb4d9db17537 507 {
mbed_official 376:cb4d9db17537 508 /* frequency error counter reached a zero value */
mbed_official 376:cb4d9db17537 509 __HAL_RCC_CRS_CLEAR_FLAG(RCC_CRS_FLAG_ESYNC);
mbed_official 376:cb4d9db17537 510 }
mbed_official 376:cb4d9db17537 511 }
mbed_official 376:cb4d9db17537 512
mbed_official 376:cb4d9db17537 513 return crsstatus;
mbed_official 376:cb4d9db17537 514 }
mbed_official 376:cb4d9db17537 515
mbed_official 376:cb4d9db17537 516 #endif /* !(STM32L051xx) && !(STM32L061xx) */
mbed_official 376:cb4d9db17537 517
mbed_official 376:cb4d9db17537 518 /**
mbed_official 376:cb4d9db17537 519 * @}
mbed_official 376:cb4d9db17537 520 */
mbed_official 376:cb4d9db17537 521
mbed_official 376:cb4d9db17537 522 /**
mbed_official 376:cb4d9db17537 523 * @}
mbed_official 376:cb4d9db17537 524 */
mbed_official 376:cb4d9db17537 525
mbed_official 376:cb4d9db17537 526 #endif /* HAL_RCC_MODULE_ENABLED */
mbed_official 376:cb4d9db17537 527 /**
mbed_official 376:cb4d9db17537 528 * @}
mbed_official 376:cb4d9db17537 529 */
mbed_official 376:cb4d9db17537 530
mbed_official 376:cb4d9db17537 531 /**
mbed_official 376:cb4d9db17537 532 * @}
mbed_official 376:cb4d9db17537 533 */
mbed_official 376:cb4d9db17537 534
mbed_official 376:cb4d9db17537 535 /************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/