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:
Fri Oct 31 11:00:10 2014 +0000
Revision:
376:cb4d9db17537
Synchronized with git revision 07b49da75eac883fc8916d3d6b6962664b8db29e

Full URL: https://github.com/mbedmicro/mbed/commit/07b49da75eac883fc8916d3d6b6962664b8db29e/

Targets: DISCO_L053C8 - new platform - STM32L0 Discovery board

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 376:cb4d9db17537 405 assert_param(pSynchroInfo != 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****/