]> git.friedersdorff.com Git - max/tmk_keyboard.git/blob - tmk_core/tool/mbed/mbed-sdk/libraries/mbed/targets/cmsis/TARGET_STM/TARGET_STM32L1/stm32l1xx_hal_rcc_ex.h
Merge commit '5a0132f1c1c9a14fd2941f0a5e29bbf5e31da20c' into master-core-pull
[max/tmk_keyboard.git] / tmk_core / tool / mbed / mbed-sdk / libraries / mbed / targets / cmsis / TARGET_STM / TARGET_STM32L1 / stm32l1xx_hal_rcc_ex.h
1 /**
2   ******************************************************************************
3   * @file    stm32l1xx_hal_rcc_ex.h
4   * @author  MCD Application Team
5   * @version V1.0.0
6   * @date    5-September-2014
7   * @brief   Header file of RCC HAL Extension module.
8   ******************************************************************************
9   * @attention
10   *
11   * <h2><center>&copy; COPYRIGHT(c) 2014 STMicroelectronics</center></h2>
12   *
13   * Redistribution and use in source and binary forms, with or without modification,
14   * are permitted provided that the following conditions are met:
15   *   1. Redistributions of source code must retain the above copyright notice,
16   *      this list of conditions and the following disclaimer.
17   *   2. Redistributions in binary form must reproduce the above copyright notice,
18   *      this list of conditions and the following disclaimer in the documentation
19   *      and/or other materials provided with the distribution.
20   *   3. Neither the name of STMicroelectronics nor the names of its contributors
21   *      may be used to endorse or promote products derived from this software
22   *      without specific prior written permission.
23   *
24   * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
25   * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
26   * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
27   * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
28   * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
29   * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
30   * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
31   * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
32   * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
33   * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
34   *
35   ******************************************************************************
36   */ 
37
38 /* Define to prevent recursive inclusion -------------------------------------*/
39 #ifndef __STM32L1xx_HAL_RCC_EX_H
40 #define __STM32L1xx_HAL_RCC_EX_H
41
42 #ifdef __cplusplus
43  extern "C" {
44 #endif
45
46 /* Includes ------------------------------------------------------------------*/
47 #include "stm32l1xx_hal_def.h"
48
49 /** @addtogroup STM32L1xx_HAL_Driver
50   * @{
51   */
52
53 /** @addtogroup RCCEx
54   * @{
55   */ 
56
57 /* Exported types ------------------------------------------------------------*/ 
58
59 /** @defgroup RCCEx_Exported_Types RCCEx Exported Types
60   * @{
61   */
62
63 /** 
64   * @brief  RCC extended clocks structure definition  
65   */
66 typedef struct
67 {
68   uint32_t PeriphClockSelection;                /*!< The Extended Clock to be configured.
69                                       This parameter can be a value of @ref RCCEx_Periph_Clock_Selection */
70
71   uint32_t RTCClockSelection;         /*!< specifies the RTC clock source.
72                                        This parameter can be a value of @ref RCC_RTC_LCD_Clock_Source */
73
74 #if defined (STM32L100xB) || defined (STM32L100xBA) || defined (STM32L100xC) ||\
75     defined(STM32L152xB) || defined(STM32L152xBA) || defined(STM32L152xC) || \
76     defined(STM32L162xC) || defined(STM32L152xCA) || defined(STM32L152xD) || \
77     defined(STM32L162xCA) || defined(STM32L162xD) || defined(STM32L152xE) || \
78     defined(STM32L162xE)
79
80   uint32_t LCDClockSelection;         /*!< specifies the LCD clock source.
81                                        This parameter can be a value of @ref RCC_RTC_LCD_Clock_Source */
82
83 #endif /* STM32L100xB || STM32L152xBA || ... || STM32L152xE || STM32L162xE */
84 } RCC_PeriphCLKInitTypeDef;
85
86 /**
87   * @}
88   */
89
90 /* Exported constants --------------------------------------------------------*/
91
92 /** @defgroup RCCEx_Exported_Constants RCCEx Exported Constants
93   * @{
94   */
95
96 /** @defgroup RCCEx_Periph_Clock_Selection RCCEx Periph Clock Selection
97   * @{
98   */
99 #define RCC_PERIPHCLK_RTC           ((uint32_t)0x00000001)
100
101 #if defined (STM32L100xB) || defined (STM32L100xBA) || defined (STM32L100xC) ||\
102     defined(STM32L152xB) || defined(STM32L152xBA) || defined(STM32L152xC) || \
103     defined(STM32L162xC) || defined(STM32L152xCA) || defined(STM32L152xD) || \
104     defined(STM32L162xCA) || defined(STM32L162xD) || defined(STM32L152xE) || \
105     defined(STM32L162xE)
106
107 #define RCC_PERIPHCLK_LCD           ((uint32_t)0x00000002)
108
109 #endif /* STM32L100xB || STM32L152xBA || ... || STM32L152xE || STM32L162xE */
110
111 #if defined (STM32L100xB) || defined (STM32L100xBA) || defined (STM32L100xC) ||\
112     defined(STM32L152xB) || defined(STM32L152xBA) || defined(STM32L152xC) || \
113     defined(STM32L162xC) || defined(STM32L152xCA) || defined(STM32L152xD) || \
114     defined(STM32L162xCA) || defined(STM32L162xD) || defined(STM32L152xE) || \
115     defined(STM32L162xE)
116
117 #define IS_RCC_PERIPHCLOCK(__CLK__) ((RCC_PERIPHCLK_RTC <= (__CLK__)) && ((__CLK__) <= RCC_PERIPHCLK_LCD))
118
119 #else /* Not LCD LINE */
120
121 #define IS_RCC_PERIPHCLOCK(__CLK__) ((__CLK__) == RCC_PERIPHCLK_RTC)
122
123 #endif /* STM32L100xB || STM32L152xBA || ... || STM32L152xE || STM32L162xE */
124 /**
125   * @}
126   */
127
128 #if defined(STM32L100xBA) || defined (STM32L151xBA) || defined (STM32L152xBA) || \
129     defined(STM32L100xC) || defined (STM32L151xC) || defined (STM32L152xC) || defined (STM32L162xC) || \
130     defined(STM32L151xCA) || defined (STM32L151xD) || defined (STM32L152xCA) || defined (STM32L152xD) || defined (STM32L162xCA) || defined (STM32L162xD) || \
131     defined(STM32L151xE) || defined (STM32L152xE) || defined (STM32L162xE)
132
133 /* Alias word address of LSECSSON bit */
134 #define LSECSSON_BITNUMBER      POSITION_VAL(RCC_CSR_LSECSSON)
135 #define CSR_LSECSSON_BB         ((uint32_t)(PERIPH_BB_BASE + (RCC_CSR_OFFSET_BB * 32) + (LSECSSON_BITNUMBER * 4)))
136
137 #endif /* STM32L100xBA || STM32L151xBA || STM32L152xBA || STM32L100xC || STM32L151xC || STM32L152xC || STM32L162xC || STM32L151xCA || STM32L151xD || STM32L152xCA || STM32L152xD || STM32L162xCA || STM32L162xD || STM32L151xE || STM32L152xE || STM32L162xE*/
138
139 /**
140   * @}
141   */
142
143 /* Exported macro ------------------------------------------------------------*/
144 /** @defgroup RCCEx_Exported_Macros RCCEx Exported Macros
145  * @{
146  */
147
148 /** @defgroup RCCEx_Peripheral_Clock_Enable_Disable RCCEx_Peripheral_Clock_Enable_Disable
149   * @brief  Enables or disables the AHB1 peripheral clock.
150   * @note   After reset, the peripheral clock (used for registers read/write access)
151   *         is disabled and the application software has to enable this clock before 
152   *         using it.   
153   * @{
154   */
155 #if defined (STM32L151xB) || defined (STM32L152xB) || \
156     defined (STM32L151xBA) || defined (STM32L152xBA) || \
157     defined (STM32L151xC) || defined (STM32L152xC) || defined (STM32L162xC) || \
158     defined(STM32L151xCA) || defined (STM32L151xD) || defined (STM32L152xCA) || defined (STM32L152xD) || defined (STM32L162xCA) || defined (STM32L162xD) || \
159     defined(STM32L151xE) || defined (STM32L152xE) || defined (STM32L162xE)
160     
161 #define __GPIOE_CLK_ENABLE()    (RCC->AHBENR |= (RCC_AHBENR_GPIOEEN))
162 #define __GPIOE_CLK_DISABLE()   (RCC->AHBENR &= ~(RCC_AHBENR_GPIOEEN))
163
164 #endif /* STM32L151xB || STM32L152xB || ... || STM32L151xCA || STM32L151xD || STM32L152xCA || STM32L152xD || STM32L162xCA || STM32L162xD || STM32L151xE || STM32L152xE || STM32L162xE */
165
166 #if defined(STM32L151xCA) || defined (STM32L151xD) || defined (STM32L152xCA) || defined (STM32L152xD) || defined (STM32L162xCA) || defined (STM32L162xD) || \
167     defined(STM32L151xE) || defined (STM32L152xE) || defined (STM32L162xE)
168
169 #define __GPIOF_CLK_ENABLE()    (RCC->AHBENR |= (RCC_AHBENR_GPIOFEN))
170 #define __GPIOG_CLK_ENABLE()    (RCC->AHBENR |= (RCC_AHBENR_GPIOGEN))
171
172 #define __GPIOF_CLK_DISABLE()   (RCC->AHBENR &= ~(RCC_AHBENR_GPIOFEN))
173 #define __GPIOG_CLK_DISABLE()   (RCC->AHBENR &= ~(RCC_AHBENR_GPIOGEN))
174
175 #endif /* STM32L151xCA || STM32L151xD || STM32L152xCA || STM32L152xD || STM32L162xCA || STM32L162xD || STM32L151xE || STM32L152xE || STM32L162xE */
176
177 #if defined(STM32L100xC) || defined (STM32L151xC) || defined (STM32L152xC) || defined (STM32L162xC) || \
178     defined(STM32L151xCA) || defined (STM32L151xD) || defined (STM32L152xCA) || defined (STM32L152xD) || defined (STM32L162xCA) || defined (STM32L162xD) || \
179     defined(STM32L151xE) || defined (STM32L152xE) || defined (STM32L162xE)
180     
181 #define __DMA2_CLK_ENABLE()     (RCC->AHBENR |= (RCC_AHBENR_DMA2EN))
182 #define __DMA2_CLK_DISABLE()    (RCC->AHBENR &= ~(RCC_AHBENR_DMA2EN))
183
184 #endif /* STM32L100xC || STM32L151xC || STM32L152xC || STM32L162xC || STM32L151xCA || STM32L151xD || STM32L152xCA || STM32L152xD || STM32L162xCA || STM32L162xD || STM32L151xE || STM32L152xE || STM32L162xE */
185
186 #if defined(STM32L162xC) || defined(STM32L162xCA) || defined(STM32L162xD) || defined(STM32L162xE)
187
188 #define __CRYP_CLK_ENABLE()     (RCC->AHBENR |= (RCC_AHBENR_AESEN))
189 #define __CRYP_CLK_DISABLE()    (RCC->AHBENR &= ~(RCC_AHBENR_AESEN))
190
191 #endif /* STM32L162xC || STM32L162xCA || STM32L162xD || STM32L162xE */
192
193 #if defined (STM32L151xD) || defined (STM32L152xD) || defined (STM32L162xD)
194   
195 #define __FSMC_CLK_ENABLE()     (RCC->AHBENR |= (RCC_AHBENR_FSMCEN))
196 #define __FSMC_CLK_DISABLE()    (RCC->AHBENR &= ~(RCC_AHBENR_FSMCEN))
197
198 #endif /* STM32L151xD || STM32L152xD || STM32L162xD */
199
200 #if defined (STM32L100xB) || defined (STM32L100xBA) || defined (STM32L100xC) ||\
201     defined(STM32L152xB) || defined(STM32L152xBA) || defined(STM32L152xC) || \
202     defined(STM32L162xC) || defined(STM32L152xCA) || defined(STM32L152xD) || \
203     defined(STM32L162xCA) || defined(STM32L162xD) || defined(STM32L152xE) || \
204     defined(STM32L162xE)
205     
206 #define __LCD_CLK_ENABLE()        (RCC->APB1ENR |= (RCC_APB1ENR_LCDEN))
207 #define __LCD_CLK_DISABLE()       (RCC->APB1ENR &= ~(RCC_APB1ENR_LCDEN))
208
209 #endif /* STM32L100xB || STM32L152xBA || ... || STM32L152xE || STM32L162xE */
210
211 /** @brief  Enables or disables the Low Speed APB (APB1) peripheral clock.
212   * @note   After reset, the peripheral clock (used for registers read/write access)
213   *         is disabled and the application software has to enable this clock before 
214   *         using it. 
215   */
216 #if defined (STM32L151xC) || defined (STM32L152xC) || defined (STM32L162xC) || \
217     defined(STM32L151xCA) || defined (STM32L151xD) || defined (STM32L152xCA) || defined (STM32L152xD) || defined (STM32L162xCA) || defined (STM32L162xD) || \
218     defined(STM32L151xE) || defined (STM32L152xE) || defined (STM32L162xE)
219
220 #define __TIM5_CLK_ENABLE()     (RCC->APB1ENR |= (RCC_APB1ENR_TIM5EN))
221 #define __TIM5_CLK_DISABLE()    (RCC->APB1ENR &= ~(RCC_APB1ENR_TIM5EN))
222
223 #endif /* STM32L151xC || STM32L152xC || STM32L162xC || STM32L151xCA || STM32L151xD || STM32L152xCA || STM32L152xD || STM32L162xCA || STM32L162xD || STM32L151xE || STM32L152xE || STM32L162xE */
224
225 #if defined(STM32L100xC) || defined (STM32L151xC) || defined (STM32L152xC) || defined (STM32L162xC) || \
226     defined(STM32L151xCA) || defined (STM32L151xD) || defined (STM32L152xCA) || defined (STM32L152xD) || defined (STM32L162xCA) || defined (STM32L162xD) || \
227     defined(STM32L151xE) || defined (STM32L152xE) || defined (STM32L162xE)
228
229 #define __SPI3_CLK_ENABLE()     (RCC->APB1ENR |= (RCC_APB1ENR_SPI3EN))
230 #define __SPI3_CLK_DISABLE()    (RCC->APB1ENR &= ~(RCC_APB1ENR_SPI3EN))
231
232 #endif /* STM32L100xC || STM32L151xC || STM32L152xC || STM32L162xC || STM32L151xCA || STM32L151xD || STM32L152xCA || STM32L152xD || STM32L162xCA || STM32L162xD || STM32L151xE || STM32L152xE || STM32L162xE */
233
234 #if defined (STM32L151xD) || defined (STM32L152xD) || defined (STM32L162xD) || \
235     defined(STM32L151xE) || defined (STM32L152xE) || defined (STM32L162xE)
236
237 #define __UART4_CLK_ENABLE()    (RCC->APB1ENR |= (RCC_APB1ENR_UART4EN))
238 #define __UART5_CLK_ENABLE()    (RCC->APB1ENR |= (RCC_APB1ENR_UART5EN))
239
240 #define __UART4_CLK_DISABLE()   (RCC->APB1ENR &= ~(RCC_APB1ENR_UART4EN))
241 #define __UART5_CLK_DISABLE()   (RCC->APB1ENR &= ~(RCC_APB1ENR_UART5EN))
242
243 #endif /* STM32L151xD || STM32L152xD || STM32L162xD || STM32L151xE || STM32L152xE || STM32L162xE */
244
245 #if defined (STM32L151xCA) || defined (STM32L151xD) || defined (STM32L152xCA) || defined (STM32L152xD) || defined (STM32L162xCA) || defined (STM32L162xD) || defined (STM32L151xE) || defined (STM32L152xE) || defined (STM32L162xE) || defined (STM32L162xC) || defined (STM32L152xC) || defined (STM32L151xC)
246
247 #define __OPAMP_CLK_ENABLE()      __COMP_CLK_ENABLE()   /* Peripherals COMP and OPAMP share the same clock domain */
248 #define __OPAMP_CLK_DISABLE()     __COMP_CLK_DISABLE()  /* Peripherals COMP and OPAMP share the same clock domain */
249       
250 #endif /* STM32L151xCA || STM32L151xD || STM32L152xCA || STM32L152xD || STM32L162xCA || STM32L162xD || STM32L151xE || STM32L152xE || STM32L162xE || STM32L162xC || STM32L152xC || STM32L151xC */
251       
252 /** @brief  Enables or disables the High Speed APB (APB2) peripheral clock.
253   * @note   After reset, the peripheral clock (used for registers read/write access)
254   *         is disabled and the application software has to enable this clock before 
255   *         using it.
256   */
257 #if defined (STM32L151xD) || defined (STM32L152xD) || defined (STM32L162xD)
258
259 #define __SDIO_CLK_ENABLE()     (RCC->APB2ENR |= (RCC_APB2ENR_SDIOEN))
260 #define __SDIO_CLK_DISABLE()    (RCC->APB2ENR &= ~(RCC_APB2ENR_SDIOEN))
261
262 #endif /* STM32L151xD || STM32L152xD || STM32L162xD */
263
264 /**
265     * @}
266     */
267   
268
269 /** @defgroup RCCEx_Force_Release_Peripheral_Reset RCCEx Force Release Peripheral Reset
270   * @brief  Forces or releases AHB peripheral reset.
271   * @{
272   */  
273 #if defined (STM32L151xB) || defined (STM32L152xB) || \
274     defined (STM32L151xBA) || defined (STM32L152xBA) || \
275     defined (STM32L151xC) || defined (STM32L152xC) || defined (STM32L162xC) || \
276     defined(STM32L151xCA) || defined (STM32L151xD) || defined (STM32L152xCA) || defined (STM32L152xD) || defined (STM32L162xCA) || defined (STM32L162xD) || \
277     defined(STM32L151xE) || defined (STM32L152xE) || defined (STM32L162xE)
278     
279 #define __GPIOE_FORCE_RESET()   (RCC->AHBRSTR |= (RCC_AHBRSTR_GPIOERST))
280 #define __GPIOE_RELEASE_RESET() (RCC->AHBRSTR &= ~(RCC_AHBRSTR_GPIOERST))
281
282 #endif /* STM32L151xB || STM32L152xB || ... || STM32L151xCA || STM32L151xD || STM32L152xCA || STM32L152xD || STM32L162xCA || STM32L162xD || STM32L151xE || STM32L152xE || STM32L162xE */
283
284 #if defined(STM32L151xCA) || defined (STM32L151xD) || defined (STM32L152xCA) || defined (STM32L152xD) || defined (STM32L162xCA) || defined (STM32L162xD) || \
285     defined(STM32L151xE) || defined (STM32L152xE) || defined (STM32L162xE)
286
287 #define __GPIOF_FORCE_RESET()   (RCC->AHBRSTR |= (RCC_AHBRSTR_GPIOFRST))
288 #define __GPIOG_FORCE_RESET()   (RCC->AHBRSTR |= (RCC_AHBRSTR_GPIOGRST))
289
290 #define __GPIOF_RELEASE_RESET() (RCC->AHBRSTR &= ~(RCC_AHBRSTR_GPIOFRST))
291 #define __GPIOG_RELEASE_RESET() (RCC->AHBRSTR &= ~(RCC_AHBRSTR_GPIOGRST))
292
293 #endif /* STM32L151xCA || STM32L151xD || STM32L152xCA || STM32L152xD || STM32L162xCA || STM32L162xD || STM32L151xE || STM32L152xE || STM32L162xE */
294
295 #if defined(STM32L100xC) || defined (STM32L151xC) || defined (STM32L152xC) || defined (STM32L162xC) || \
296     defined(STM32L151xCA) || defined (STM32L151xD) || defined (STM32L152xCA) || defined (STM32L152xD) || defined (STM32L162xCA) || defined (STM32L162xD) || \
297     defined(STM32L151xE) || defined (STM32L152xE) || defined (STM32L162xE)
298     
299 #define __DMA2_FORCE_RESET()    (RCC->AHBRSTR |= (RCC_AHBRSTR_DMA2RST))
300 #define __DMA2_RELEASE_RESET()  (RCC->AHBRSTR &= ~(RCC_AHBRSTR_DMA2RST))
301
302 #endif /* STM32L100xC || STM32L151xC || STM32L152xC || STM32L162xC || STM32L151xCA || STM32L151xD || STM32L152xCA || STM32L152xD || STM32L162xCA || STM32L162xD || STM32L151xE || STM32L152xE || STM32L162xE */
303
304 #if defined(STM32L162xC) || defined(STM32L162xCA) || defined(STM32L162xD) || defined(STM32L162xE)
305
306 #define __CRYP_FORCE_RESET()     (RCC->AHBRSTR |= (RCC_AHBRSTR_AESRST))
307 #define __CRYP_RELEASE_RESET()   (RCC->AHBRSTR &= ~(RCC_AHBRSTR_AESRST))
308
309 #endif /* STM32L162xC || STM32L162xCA || STM32L162xD || STM32L162xE */
310
311 #if defined (STM32L151xD) || defined (STM32L152xD) || defined (STM32L162xD)
312   
313 #define __FSMC_FORCE_RESET()    (RCC->AHBRSTR |= (RCC_AHBRSTR_FSMCRST))
314 #define __FSMC_RELEASE_RESET()  (RCC->AHBRSTR &= ~(RCC_AHBRSTR_FSMCRST))
315
316 #endif /* STM32L151xD || STM32L152xD || STM32L162xD */
317
318 #if defined (STM32L100xB) || defined (STM32L100xBA) || defined (STM32L100xC) ||\
319     defined(STM32L152xB) || defined(STM32L152xBA) || defined(STM32L152xC) || \
320     defined(STM32L162xC) || defined(STM32L152xCA) || defined(STM32L152xD) || \
321     defined(STM32L162xCA) || defined(STM32L162xD) || defined(STM32L152xE) || \
322     defined(STM32L162xE)
323     
324 #define __LCD_FORCE_RESET()     (RCC->APB1RSTR |= (RCC_APB1RSTR_LCDRST))
325 #define __LCD_RELEASE_RESET()   (RCC->APB1RSTR &= ~(RCC_APB1RSTR_LCDRST))
326
327 #endif /* STM32L100xB || STM32L152xBA || ... || STM32L152xE || STM32L162xE */
328
329 /** @brief  Forces or releases APB1 peripheral reset.
330   */
331 #if defined (STM32L151xC) || defined (STM32L152xC) || defined (STM32L162xC) || \
332       defined(STM32L151xCA) || defined (STM32L151xD) || defined (STM32L152xCA) || defined (STM32L152xD) || defined (STM32L162xCA) || defined (STM32L162xD) || \
333       defined(STM32L151xE) || defined (STM32L152xE) || defined (STM32L162xE)
334
335 #define __TIM5_FORCE_RESET()    (RCC->APB1RSTR |= (RCC_APB1RSTR_TIM5RST))
336 #define __TIM5_RELEASE_RESET()  (RCC->APB1RSTR &= ~(RCC_APB1RSTR_TIM5RST))
337
338 #endif /* STM32L151xC || STM32L152xC || STM32L162xC || STM32L151xCA || STM32L151xD || STM32L152xCA || STM32L152xD || STM32L162xCA || STM32L162xD || STM32L151xE || STM32L152xE || STM32L162xE */
339
340 #if defined(STM32L100xC) || defined (STM32L151xC) || defined (STM32L152xC) || defined (STM32L162xC) || \
341     defined(STM32L151xCA) || defined (STM32L151xD) || defined (STM32L152xCA) || defined (STM32L152xD) || defined (STM32L162xCA) || defined (STM32L162xD) || \
342     defined(STM32L151xE) || defined (STM32L152xE) || defined (STM32L162xE)
343
344 #define __SPI3_FORCE_RESET()    (RCC->APB1RSTR |= (RCC_APB1RSTR_SPI3RST))
345 #define __SPI3_RELEASE_RESET()  (RCC->APB1RSTR &= ~(RCC_APB1RSTR_SPI3RST))
346
347 #endif /* STM32L100xC || STM32L151xC || STM32L152xC || STM32L162xC || STM32L151xCA || STM32L151xD || STM32L152xCA || STM32L152xD || STM32L162xCA || STM32L162xD || STM32L151xE || STM32L152xE || STM32L162xE */
348
349 #if defined (STM32L151xD) || defined (STM32L152xD) || defined (STM32L162xD) || \
350     defined(STM32L151xE) || defined (STM32L152xE) || defined (STM32L162xE)
351
352 #define __UART4_FORCE_RESET()   (RCC->APB1RSTR |= (RCC_APB1RSTR_UART4RST))
353 #define __UART5_FORCE_RESET()   (RCC->APB1RSTR |= (RCC_APB1RSTR_UART5RST))
354
355 #define __UART4_RELEASE_RESET() (RCC->APB1RSTR &= ~(RCC_APB1RSTR_UART4RST))
356 #define __UART5_RELEASE_RESET() (RCC->APB1RSTR &= ~(RCC_APB1RSTR_UART5RST))
357
358 #endif /* STM32L151xD || STM32L152xD || STM32L162xD || STM32L151xE || STM32L152xE || STM32L162xE */
359
360 #if defined (STM32L151xCA) || defined (STM32L151xD) || defined (STM32L152xCA) || defined (STM32L152xD) || defined (STM32L162xCA) || defined (STM32L162xD) || defined (STM32L151xE) || defined (STM32L152xE) || defined (STM32L162xE) || defined (STM32L162xC) || defined (STM32L152xC) || defined (STM32L151xC)
361
362 #define __OPAMP_FORCE_RESET()     __COMP_FORCE_RESET()   /* Peripherals COMP and OPAMP share the same clock domain */
363 #define __OPAMP_RELEASE_RESET()   __COMP_RELEASE_RESET() /* Peripherals COMP and OPAMP share the same clock domain */
364       
365 #endif /* STM32L151xCA || STM32L151xD || STM32L152xCA || STM32L152xD || STM32L162xCA || STM32L162xD || STM32L151xE || STM32L152xE || STM32L162xE || STM32L162xC || STM32L152xC || STM32L151xC */
366       
367 /** @brief  Forces or releases APB2 peripheral reset.
368   */
369 #if defined (STM32L151xD) || defined (STM32L152xD) || defined (STM32L162xD)
370
371 #define __SDIO_FORCE_RESET()    (RCC->APB2RSTR |= (RCC_APB2RSTR_SDIORST))
372 #define __SDIO_RELEASE_RESET()  (RCC->APB2RSTR &= ~(RCC_APB2RSTR_SDIORST))
373
374 #endif /* STM32L151xD || STM32L152xD || STM32L162xD */
375
376 /**
377   * @}
378   */
379
380 /** @defgroup RCCEx_Peripheral_Clock_Sleep_Enable_Disable RCCEx Peripheral Clock Sleep Enable Disable
381   * @brief  Enables or disables the AHB1 peripheral clock during Low Power (Sleep) mode.
382   * @note   Peripheral clock gating in SLEEP mode can be used to further reduce
383   *         power consumption.
384   * @note   After wakeup from SLEEP mode, the peripheral clock is enabled again.
385   * @note   By default, all peripheral clocks are enabled during SLEEP mode.
386   * @{
387   */
388 #if defined (STM32L151xB) || defined (STM32L152xB) || \
389     defined (STM32L151xBA) || defined (STM32L152xBA) || \
390     defined (STM32L151xC) || defined (STM32L152xC) || defined (STM32L162xC) || \
391     defined(STM32L151xCA) || defined (STM32L151xD) || defined (STM32L152xCA) || defined (STM32L152xD) || defined (STM32L162xCA) || defined (STM32L162xD) || \
392     defined(STM32L151xE) || defined (STM32L152xE) || defined (STM32L162xE)
393     
394 #define __GPIOE_CLK_SLEEP_ENABLE()  (RCC->AHBLPENR |= (RCC_AHBLPENR_GPIOELPEN))
395 #define __GPIOE_CLK_SLEEP_DISABLE() (RCC->AHBLPENR &= ~(RCC_AHBLPENR_GPIOELPEN))
396
397 #endif /* STM32L151xB || STM32L152xB || ... || STM32L151xCA || STM32L151xD || STM32L152xCA || STM32L152xD || STM32L162xCA || STM32L162xD || STM32L151xE || STM32L152xE || STM32L162xE */
398
399 #if defined(STM32L151xCA) || defined (STM32L151xD) || defined (STM32L152xCA) || defined (STM32L152xD) || defined (STM32L162xCA) || defined (STM32L162xD) || \
400     defined(STM32L151xE) || defined (STM32L152xE) || defined (STM32L162xE)
401
402 #define __GPIOF_CLK_SLEEP_ENABLE()  (RCC->AHBLPENR |= (RCC_AHBLPENR_GPIOFLPEN))
403 #define __GPIOG_CLK_SLEEP_ENABLE()  (RCC->AHBLPENR |= (RCC_AHBLPENR_GPIOGLPEN))
404
405 #define __GPIOF_CLK_SLEEP_DISABLE() (RCC->AHBLPENR &= ~(RCC_AHBLPENR_GPIOFLPEN))
406 #define __GPIOG_CLK_SLEEP_DISABLE() (RCC->AHBLPENR &= ~(RCC_AHBLPENR_GPIOGLPEN))
407
408 #endif /* STM32L151xCA || STM32L151xD || STM32L152xCA || STM32L152xD || STM32L162xCA || STM32L162xD || STM32L151xE || STM32L152xE || STM32L162xE */
409
410 #if defined(STM32L100xC) || defined (STM32L151xC) || defined (STM32L152xC) || defined (STM32L162xC) || \
411     defined(STM32L151xCA) || defined (STM32L151xD) || defined (STM32L152xCA) || defined (STM32L152xD) || defined (STM32L162xCA) || defined (STM32L162xD) || \
412     defined(STM32L151xE) || defined (STM32L152xE) || defined (STM32L162xE)
413     
414 #define __DMA2_CLK_SLEEP_ENABLE()   (RCC->AHBLPENR |= (RCC_AHBLPENR_DMA2LPEN))
415 #define __DMA2_CLK_SLEEP_DISABLE()  (RCC->AHBLPENR &= ~(RCC_AHBLPENR_DMA2LPEN))
416
417 #endif /* STM32L100xC || STM32L151xC || STM32L152xC || STM32L162xC || STM32L151xCA || STM32L151xD || STM32L152xCA || STM32L152xD || STM32L162xCA || STM32L162xD || STM32L151xE || STM32L152xE || STM32L162xE */
418
419 #if defined(STM32L162xC) || defined(STM32L162xCA) || defined(STM32L162xD) || defined(STM32L162xE)
420
421 #define __CRYP_CLK_SLEEP_ENABLE()    (RCC->AHBLPENR |= (RCC_AHBLPENR_AESLPEN))
422 #define __CRYP_CLK_SLEEP_DISABLE()   (RCC->AHBLPENR &= ~(RCC_AHBLPENR_AESLPEN))
423
424 #endif /* STM32L162xC || STM32L162xCA || STM32L162xD || STM32L162xE */
425
426 #if defined (STM32L151xD) || defined (STM32L152xD) || defined (STM32L162xD)
427   
428 #define __FSMC_CLK_SLEEP_ENABLE()   (RCC->AHBLPENR |= (RCC_AHBLPENR_FSMCLPEN))
429 #define __FSMC_CLK_SLEEP_DISABLE()  (RCC->AHBLPENR &= ~(RCC_AHBLPENR_FSMCLPEN))
430
431 #endif /* STM32L151xD || STM32L152xD || STM32L162xD */
432
433 #if defined (STM32L100xB) || defined (STM32L100xBA) || defined (STM32L100xC) ||\
434     defined(STM32L152xB) || defined(STM32L152xBA) || defined(STM32L152xC) || \
435     defined(STM32L162xC) || defined(STM32L152xCA) || defined(STM32L152xD) || \
436     defined(STM32L162xCA) || defined(STM32L162xD) || defined(STM32L152xE) || \
437     defined(STM32L162xE)
438     
439 #define __LCD_CLK_SLEEP_ENABLE()    (RCC->APB1LPENR |= (RCC_APB1LPENR_LCDLPEN))
440 #define __LCD_CLK_SLEEP_DISABLE()   (RCC->APB1LPENR &= ~(RCC_APB1LPENR_LCDLPEN))
441
442 #endif /* STM32L100xB || STM32L152xBA || ... || STM32L152xE || STM32L162xE */
443
444 /** @brief  Enables or disables the APB1 peripheral clock during Low Power (Sleep) mode.
445   * @note   Peripheral clock gating in SLEEP mode can be used to further reduce
446   *           power consumption.
447   * @note   After wakeup from SLEEP mode, the peripheral clock is enabled again.
448   * @note   By default, all peripheral clocks are enabled during SLEEP mode.
449   */
450 #if defined (STM32L151xC) || defined (STM32L152xC) || defined (STM32L162xC) || \
451     defined(STM32L151xCA) || defined (STM32L151xD) || defined (STM32L152xCA) || defined (STM32L152xD) || defined (STM32L162xCA) || defined (STM32L162xD) || \
452     defined(STM32L151xE) || defined (STM32L152xE) || defined (STM32L162xE)
453
454 #define __TIM5_CLK_SLEEP_ENABLE()   (RCC->APB1LPENR |= (RCC_APB1LPENR_TIM5LPEN))
455 #define __TIM5_CLK_SLEEP_DISABLE()  (RCC->APB1LPENR &= ~(RCC_APB1LPENR_TIM5LPEN))
456
457 #endif /* STM32L151xC || STM32L152xC || STM32L162xC || STM32L151xCA || STM32L151xD || STM32L152xCA || STM32L152xD || STM32L162xCA || STM32L162xD || STM32L151xE || STM32L152xE || STM32L162xE */
458
459 #if defined(STM32L100xC) || defined (STM32L151xC) || defined (STM32L152xC) || defined (STM32L162xC) || \
460     defined(STM32L151xCA) || defined (STM32L151xD) || defined (STM32L152xCA) || defined (STM32L152xD) || defined (STM32L162xCA) || defined (STM32L162xD) || \
461     defined(STM32L151xE) || defined (STM32L152xE) || defined (STM32L162xE)
462
463 #define __SPI3_CLK_SLEEP_ENABLE()   (RCC->APB1LPENR |= (RCC_APB1LPENR_SPI3LPEN))
464 #define __SPI3_CLK_SLEEP_DISABLE()  (RCC->APB1LPENR &= ~(RCC_APB1LPENR_SPI3LPEN))
465
466 #endif /* STM32L100xC || STM32L151xC || STM32L152xC || STM32L162xC || STM32L151xCA || STM32L151xD || STM32L152xCA || STM32L152xD || STM32L162xCA || STM32L162xD || STM32L151xE || STM32L152xE || STM32L162xE */
467
468 #if defined (STM32L151xD) || defined (STM32L152xD) || defined (STM32L162xD) || \
469     defined(STM32L151xE) || defined (STM32L152xE) || defined (STM32L162xE)
470
471 #define __UART4_CLK_SLEEP_ENABLE()  (RCC->APB1LPENR |= (RCC_APB1LPENR_UART4LPEN))
472 #define __UART5_CLK_SLEEP_ENABLE()  (RCC->APB1LPENR |= (RCC_APB1LPENR_UART5LPEN))
473
474 #define __UART4_CLK_SLEEP_DISABLE() (RCC->APB1LPENR &= ~(RCC_APB1LPENR_UART4LPEN))
475 #define __UART5_CLK_SLEEP_DISABLE() (RCC->APB1LPENR &= ~(RCC_APB1LPENR_UART5LPEN))
476
477 #endif /* STM32L151xD || STM32L152xD || STM32L162xD || STM32L151xE || STM32L152xE || STM32L162xE */
478
479 /** @brief  Enables or disables the APB2 peripheral clock during Low Power (Sleep) mode.
480   * @note   Peripheral clock gating in SLEEP mode can be used to further reduce
481   *           power consumption.
482   * @note   After wakeup from SLEEP mode, the peripheral clock is enabled again.
483   * @note   By default, all peripheral clocks are enabled during SLEEP mode.
484   */
485 #if defined (STM32L151xD) || defined (STM32L152xD) || defined (STM32L162xD)
486
487 #define __SDIO_CLK_SLEEP_ENABLE()   (RCC->APB2LPENR |= (RCC_APB2LPENR_SDIOLPEN))
488 #define __SDIO_CLK_SLEEP_DISABLE()  (RCC->APB2LPENR &= ~(RCC_APB2LPENR_SDIOLPEN))
489
490 #endif /* STM32L151xD || STM32L152xD || STM32L162xD */
491
492 /**
493   * @}
494   */
495
496 #if defined (STM32L100xB) || defined (STM32L100xBA) || defined (STM32L100xC) ||\
497     defined(STM32L152xB) || defined(STM32L152xBA) || defined(STM32L152xC) || \
498     defined(STM32L162xC) || defined(STM32L152xCA) || defined(STM32L152xD) || \
499     defined(STM32L162xCA) || defined(STM32L162xD) || defined(STM32L152xE) || \
500     defined(STM32L162xE)
501     
502
503 /** @brief Macro to configures LCD clock (LCDCLK).
504   *  @note   LCD and RTC use the same configuration
505   *  @note   LCD can however be used in the Stop low power mode if the LSE or LSI is used as the
506   *   LCD clock source.
507   *    
508   *  @param  __LCD_CLKSOURCE__: specifies the LCD clock source.
509   *          This parameter can be one of the following values:
510   *             @arg RCC_RTCCLKSOURCE_LSE: LSE selected as RTC clock
511   *             @arg RCC_RTCCLKSOURCE_LSI: LSI selected as RTC clock
512   *             @arg RCC_RTCCLKSOURCE_HSE_DIV2: HSE divided by 2 selected as RTC clock
513   *             @arg RCC_RTCCLKSOURCE_HSE_DIV4: HSE divided by 4 selected as RTC clock
514   *             @arg RCC_RTCCLKSOURCE_HSE_DIV8: HSE divided by 8 selected as RTC clock
515   *             @arg RCC_RTCCLKSOURCE_HSE_DIV16: HSE divided by 16 selected as RTC clock
516   */
517 #define __HAL_RCC_LCD_CONFIG(__LCD_CLKSOURCE__) __HAL_RCC_RTC_CONFIG(__LCD_CLKSOURCE__)
518
519 /** @brief macros to get the LCD clock source.
520   */
521 #define __HAL_RCC_GET_LCD_SOURCE()              __HAL_RCC_GET_RTC_SOURCE()
522
523 #endif /* STM32L100xB || STM32L152xBA || ... || STM32L152xE || STM32L162xE */
524
525 /**
526   * @}
527   */
528
529 /* Exported functions --------------------------------------------------------*/
530 /** @addtogroup RCCEx_Private_Functions
531   * @{
532   */
533
534 /** @addtogroup RCCEx_Exported_Functions_Group1
535   * @{
536   */
537
538 HAL_StatusTypeDef HAL_RCCEx_PeriphCLKConfig(RCC_PeriphCLKInitTypeDef  *PeriphClkInit);
539 void              HAL_RCCEx_GetPeriphCLKConfig(RCC_PeriphCLKInitTypeDef  *PeriphClkInit);
540
541 #if defined(STM32L100xBA) || defined (STM32L151xBA) || defined (STM32L152xBA) || \
542     defined(STM32L100xC) || defined (STM32L151xC) || defined (STM32L152xC) || defined (STM32L162xC) || \
543     defined(STM32L151xCA) || defined (STM32L151xD) || defined (STM32L152xCA) || defined (STM32L152xD) || defined (STM32L162xCA) || defined (STM32L162xD) || \
544     defined(STM32L151xE) || defined (STM32L152xE) || defined (STM32L162xE)
545
546 void              HAL_RCCEx_EnableLSECSS(void);
547 void              HAL_RCCEx_DisableLSECSS(void);
548
549 #endif /* STM32L100xBA || STM32L151xBA || STM32L152xBA || STM32L100xC || STM32L151xC || STM32L152xC || STM32L162xC || STM32L151xCA || STM32L151xD || STM32L152xCA || STM32L152xD || STM32L162xCA || STM32L162xD || STM32L151xE || STM32L152xE || STM32L162xE*/
550
551 /**
552   * @}
553   */
554
555 /**
556   * @}
557   */
558
559 /**
560   * @}
561   */
562
563 /**
564   * @}
565   */
566   
567 #ifdef __cplusplus
568 }
569 #endif
570
571 #endif /* __STM32L1xx_HAL_RCC_EX_H */
572
573 /************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/