stm32l1xx_hal_rcc_ex.h 29 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573
  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. /* Define to prevent recursive inclusion -------------------------------------*/
  38. #ifndef __STM32L1xx_HAL_RCC_EX_H
  39. #define __STM32L1xx_HAL_RCC_EX_H
  40. #ifdef __cplusplus
  41. extern "C" {
  42. #endif
  43. /* Includes ------------------------------------------------------------------*/
  44. #include "stm32l1xx_hal_def.h"
  45. /** @addtogroup STM32L1xx_HAL_Driver
  46. * @{
  47. */
  48. /** @addtogroup RCCEx
  49. * @{
  50. */
  51. /* Exported types ------------------------------------------------------------*/
  52. /** @defgroup RCCEx_Exported_Types RCCEx Exported Types
  53. * @{
  54. */
  55. /**
  56. * @brief RCC extended clocks structure definition
  57. */
  58. typedef struct
  59. {
  60. uint32_t PeriphClockSelection; /*!< The Extended Clock to be configured.
  61. This parameter can be a value of @ref RCCEx_Periph_Clock_Selection */
  62. uint32_t RTCClockSelection; /*!< specifies the RTC clock source.
  63. This parameter can be a value of @ref RCC_RTC_LCD_Clock_Source */
  64. #if defined (STM32L100xB) || defined (STM32L100xBA) || defined (STM32L100xC) ||\
  65. defined(STM32L152xB) || defined(STM32L152xBA) || defined(STM32L152xC) || \
  66. defined(STM32L162xC) || defined(STM32L152xCA) || defined(STM32L152xD) || \
  67. defined(STM32L162xCA) || defined(STM32L162xD) || defined(STM32L152xE) || \
  68. defined(STM32L162xE)
  69. uint32_t LCDClockSelection; /*!< specifies the LCD clock source.
  70. This parameter can be a value of @ref RCC_RTC_LCD_Clock_Source */
  71. #endif /* STM32L100xB || STM32L152xBA || ... || STM32L152xE || STM32L162xE */
  72. } RCC_PeriphCLKInitTypeDef;
  73. /**
  74. * @}
  75. */
  76. /* Exported constants --------------------------------------------------------*/
  77. /** @defgroup RCCEx_Exported_Constants RCCEx Exported Constants
  78. * @{
  79. */
  80. /** @defgroup RCCEx_Periph_Clock_Selection RCCEx Periph Clock Selection
  81. * @{
  82. */
  83. #define RCC_PERIPHCLK_RTC ((uint32_t)0x00000001)
  84. #if defined (STM32L100xB) || defined (STM32L100xBA) || defined (STM32L100xC) ||\
  85. defined(STM32L152xB) || defined(STM32L152xBA) || defined(STM32L152xC) || \
  86. defined(STM32L162xC) || defined(STM32L152xCA) || defined(STM32L152xD) || \
  87. defined(STM32L162xCA) || defined(STM32L162xD) || defined(STM32L152xE) || \
  88. defined(STM32L162xE)
  89. #define RCC_PERIPHCLK_LCD ((uint32_t)0x00000002)
  90. #endif /* STM32L100xB || STM32L152xBA || ... || STM32L152xE || STM32L162xE */
  91. #if defined (STM32L100xB) || defined (STM32L100xBA) || defined (STM32L100xC) ||\
  92. defined(STM32L152xB) || defined(STM32L152xBA) || defined(STM32L152xC) || \
  93. defined(STM32L162xC) || defined(STM32L152xCA) || defined(STM32L152xD) || \
  94. defined(STM32L162xCA) || defined(STM32L162xD) || defined(STM32L152xE) || \
  95. defined(STM32L162xE)
  96. #define IS_RCC_PERIPHCLOCK(__CLK__) ((RCC_PERIPHCLK_RTC <= (__CLK__)) && ((__CLK__) <= RCC_PERIPHCLK_LCD))
  97. #else /* Not LCD LINE */
  98. #define IS_RCC_PERIPHCLOCK(__CLK__) ((__CLK__) == RCC_PERIPHCLK_RTC)
  99. #endif /* STM32L100xB || STM32L152xBA || ... || STM32L152xE || STM32L162xE */
  100. /**
  101. * @}
  102. */
  103. #if defined(STM32L100xBA) || defined (STM32L151xBA) || defined (STM32L152xBA) || \
  104. defined(STM32L100xC) || defined (STM32L151xC) || defined (STM32L152xC) || defined (STM32L162xC) || \
  105. defined(STM32L151xCA) || defined (STM32L151xD) || defined (STM32L152xCA) || defined (STM32L152xD) || defined (STM32L162xCA) || defined (STM32L162xD) || \
  106. defined(STM32L151xE) || defined (STM32L152xE) || defined (STM32L162xE)
  107. /* Alias word address of LSECSSON bit */
  108. #define LSECSSON_BITNUMBER POSITION_VAL(RCC_CSR_LSECSSON)
  109. #define CSR_LSECSSON_BB ((uint32_t)(PERIPH_BB_BASE + (RCC_CSR_OFFSET_BB * 32) + (LSECSSON_BITNUMBER * 4)))
  110. #endif /* STM32L100xBA || STM32L151xBA || STM32L152xBA || STM32L100xC || STM32L151xC || STM32L152xC || STM32L162xC || STM32L151xCA || STM32L151xD || STM32L152xCA || STM32L152xD || STM32L162xCA || STM32L162xD || STM32L151xE || STM32L152xE || STM32L162xE*/
  111. /**
  112. * @}
  113. */
  114. /* Exported macro ------------------------------------------------------------*/
  115. /** @defgroup RCCEx_Exported_Macros RCCEx Exported Macros
  116. * @{
  117. */
  118. /** @defgroup RCCEx_Peripheral_Clock_Enable_Disable RCCEx_Peripheral_Clock_Enable_Disable
  119. * @brief Enables or disables the AHB1 peripheral clock.
  120. * @note After reset, the peripheral clock (used for registers read/write access)
  121. * is disabled and the application software has to enable this clock before
  122. * using it.
  123. * @{
  124. */
  125. #if defined (STM32L151xB) || defined (STM32L152xB) || \
  126. defined (STM32L151xBA) || defined (STM32L152xBA) || \
  127. defined (STM32L151xC) || defined (STM32L152xC) || defined (STM32L162xC) || \
  128. defined(STM32L151xCA) || defined (STM32L151xD) || defined (STM32L152xCA) || defined (STM32L152xD) || defined (STM32L162xCA) || defined (STM32L162xD) || \
  129. defined(STM32L151xE) || defined (STM32L152xE) || defined (STM32L162xE)
  130. #define __GPIOE_CLK_ENABLE() (RCC->AHBENR |= (RCC_AHBENR_GPIOEEN))
  131. #define __GPIOE_CLK_DISABLE() (RCC->AHBENR &= ~(RCC_AHBENR_GPIOEEN))
  132. #endif /* STM32L151xB || STM32L152xB || ... || STM32L151xCA || STM32L151xD || STM32L152xCA || STM32L152xD || STM32L162xCA || STM32L162xD || STM32L151xE || STM32L152xE || STM32L162xE */
  133. #if defined(STM32L151xCA) || defined (STM32L151xD) || defined (STM32L152xCA) || defined (STM32L152xD) || defined (STM32L162xCA) || defined (STM32L162xD) || \
  134. defined(STM32L151xE) || defined (STM32L152xE) || defined (STM32L162xE)
  135. #define __GPIOF_CLK_ENABLE() (RCC->AHBENR |= (RCC_AHBENR_GPIOFEN))
  136. #define __GPIOG_CLK_ENABLE() (RCC->AHBENR |= (RCC_AHBENR_GPIOGEN))
  137. #define __GPIOF_CLK_DISABLE() (RCC->AHBENR &= ~(RCC_AHBENR_GPIOFEN))
  138. #define __GPIOG_CLK_DISABLE() (RCC->AHBENR &= ~(RCC_AHBENR_GPIOGEN))
  139. #endif /* STM32L151xCA || STM32L151xD || STM32L152xCA || STM32L152xD || STM32L162xCA || STM32L162xD || STM32L151xE || STM32L152xE || STM32L162xE */
  140. #if defined(STM32L100xC) || defined (STM32L151xC) || defined (STM32L152xC) || defined (STM32L162xC) || \
  141. defined(STM32L151xCA) || defined (STM32L151xD) || defined (STM32L152xCA) || defined (STM32L152xD) || defined (STM32L162xCA) || defined (STM32L162xD) || \
  142. defined(STM32L151xE) || defined (STM32L152xE) || defined (STM32L162xE)
  143. #define __DMA2_CLK_ENABLE() (RCC->AHBENR |= (RCC_AHBENR_DMA2EN))
  144. #define __DMA2_CLK_DISABLE() (RCC->AHBENR &= ~(RCC_AHBENR_DMA2EN))
  145. #endif /* STM32L100xC || STM32L151xC || STM32L152xC || STM32L162xC || STM32L151xCA || STM32L151xD || STM32L152xCA || STM32L152xD || STM32L162xCA || STM32L162xD || STM32L151xE || STM32L152xE || STM32L162xE */
  146. #if defined(STM32L162xC) || defined(STM32L162xCA) || defined(STM32L162xD) || defined(STM32L162xE)
  147. #define __CRYP_CLK_ENABLE() (RCC->AHBENR |= (RCC_AHBENR_AESEN))
  148. #define __CRYP_CLK_DISABLE() (RCC->AHBENR &= ~(RCC_AHBENR_AESEN))
  149. #endif /* STM32L162xC || STM32L162xCA || STM32L162xD || STM32L162xE */
  150. #if defined (STM32L151xD) || defined (STM32L152xD) || defined (STM32L162xD)
  151. #define __FSMC_CLK_ENABLE() (RCC->AHBENR |= (RCC_AHBENR_FSMCEN))
  152. #define __FSMC_CLK_DISABLE() (RCC->AHBENR &= ~(RCC_AHBENR_FSMCEN))
  153. #endif /* STM32L151xD || STM32L152xD || STM32L162xD */
  154. #if defined (STM32L100xB) || defined (STM32L100xBA) || defined (STM32L100xC) ||\
  155. defined(STM32L152xB) || defined(STM32L152xBA) || defined(STM32L152xC) || \
  156. defined(STM32L162xC) || defined(STM32L152xCA) || defined(STM32L152xD) || \
  157. defined(STM32L162xCA) || defined(STM32L162xD) || defined(STM32L152xE) || \
  158. defined(STM32L162xE)
  159. #define __LCD_CLK_ENABLE() (RCC->APB1ENR |= (RCC_APB1ENR_LCDEN))
  160. #define __LCD_CLK_DISABLE() (RCC->APB1ENR &= ~(RCC_APB1ENR_LCDEN))
  161. #endif /* STM32L100xB || STM32L152xBA || ... || STM32L152xE || STM32L162xE */
  162. /** @brief Enables or disables the Low Speed APB (APB1) peripheral clock.
  163. * @note After reset, the peripheral clock (used for registers read/write access)
  164. * is disabled and the application software has to enable this clock before
  165. * using it.
  166. */
  167. #if defined (STM32L151xC) || defined (STM32L152xC) || defined (STM32L162xC) || \
  168. defined(STM32L151xCA) || defined (STM32L151xD) || defined (STM32L152xCA) || defined (STM32L152xD) || defined (STM32L162xCA) || defined (STM32L162xD) || \
  169. defined(STM32L151xE) || defined (STM32L152xE) || defined (STM32L162xE)
  170. #define __TIM5_CLK_ENABLE() (RCC->APB1ENR |= (RCC_APB1ENR_TIM5EN))
  171. #define __TIM5_CLK_DISABLE() (RCC->APB1ENR &= ~(RCC_APB1ENR_TIM5EN))
  172. #endif /* STM32L151xC || STM32L152xC || STM32L162xC || STM32L151xCA || STM32L151xD || STM32L152xCA || STM32L152xD || STM32L162xCA || STM32L162xD || STM32L151xE || STM32L152xE || STM32L162xE */
  173. #if defined(STM32L100xC) || defined (STM32L151xC) || defined (STM32L152xC) || defined (STM32L162xC) || \
  174. defined(STM32L151xCA) || defined (STM32L151xD) || defined (STM32L152xCA) || defined (STM32L152xD) || defined (STM32L162xCA) || defined (STM32L162xD) || \
  175. defined(STM32L151xE) || defined (STM32L152xE) || defined (STM32L162xE)
  176. #define __SPI3_CLK_ENABLE() (RCC->APB1ENR |= (RCC_APB1ENR_SPI3EN))
  177. #define __SPI3_CLK_DISABLE() (RCC->APB1ENR &= ~(RCC_APB1ENR_SPI3EN))
  178. #endif /* STM32L100xC || STM32L151xC || STM32L152xC || STM32L162xC || STM32L151xCA || STM32L151xD || STM32L152xCA || STM32L152xD || STM32L162xCA || STM32L162xD || STM32L151xE || STM32L152xE || STM32L162xE */
  179. #if defined (STM32L151xD) || defined (STM32L152xD) || defined (STM32L162xD) || \
  180. defined(STM32L151xE) || defined (STM32L152xE) || defined (STM32L162xE)
  181. #define __UART4_CLK_ENABLE() (RCC->APB1ENR |= (RCC_APB1ENR_UART4EN))
  182. #define __UART5_CLK_ENABLE() (RCC->APB1ENR |= (RCC_APB1ENR_UART5EN))
  183. #define __UART4_CLK_DISABLE() (RCC->APB1ENR &= ~(RCC_APB1ENR_UART4EN))
  184. #define __UART5_CLK_DISABLE() (RCC->APB1ENR &= ~(RCC_APB1ENR_UART5EN))
  185. #endif /* STM32L151xD || STM32L152xD || STM32L162xD || STM32L151xE || STM32L152xE || STM32L162xE */
  186. #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)
  187. #define __OPAMP_CLK_ENABLE() __COMP_CLK_ENABLE() /* Peripherals COMP and OPAMP share the same clock domain */
  188. #define __OPAMP_CLK_DISABLE() __COMP_CLK_DISABLE() /* Peripherals COMP and OPAMP share the same clock domain */
  189. #endif /* STM32L151xCA || STM32L151xD || STM32L152xCA || STM32L152xD || STM32L162xCA || STM32L162xD || STM32L151xE || STM32L152xE || STM32L162xE || STM32L162xC || STM32L152xC || STM32L151xC */
  190. /** @brief Enables or disables the High Speed APB (APB2) peripheral clock.
  191. * @note After reset, the peripheral clock (used for registers read/write access)
  192. * is disabled and the application software has to enable this clock before
  193. * using it.
  194. */
  195. #if defined (STM32L151xD) || defined (STM32L152xD) || defined (STM32L162xD)
  196. #define __SDIO_CLK_ENABLE() (RCC->APB2ENR |= (RCC_APB2ENR_SDIOEN))
  197. #define __SDIO_CLK_DISABLE() (RCC->APB2ENR &= ~(RCC_APB2ENR_SDIOEN))
  198. #endif /* STM32L151xD || STM32L152xD || STM32L162xD */
  199. /**
  200. * @}
  201. */
  202. /** @defgroup RCCEx_Force_Release_Peripheral_Reset RCCEx Force Release Peripheral Reset
  203. * @brief Forces or releases AHB peripheral reset.
  204. * @{
  205. */
  206. #if defined (STM32L151xB) || defined (STM32L152xB) || \
  207. defined (STM32L151xBA) || defined (STM32L152xBA) || \
  208. defined (STM32L151xC) || defined (STM32L152xC) || defined (STM32L162xC) || \
  209. defined(STM32L151xCA) || defined (STM32L151xD) || defined (STM32L152xCA) || defined (STM32L152xD) || defined (STM32L162xCA) || defined (STM32L162xD) || \
  210. defined(STM32L151xE) || defined (STM32L152xE) || defined (STM32L162xE)
  211. #define __GPIOE_FORCE_RESET() (RCC->AHBRSTR |= (RCC_AHBRSTR_GPIOERST))
  212. #define __GPIOE_RELEASE_RESET() (RCC->AHBRSTR &= ~(RCC_AHBRSTR_GPIOERST))
  213. #endif /* STM32L151xB || STM32L152xB || ... || STM32L151xCA || STM32L151xD || STM32L152xCA || STM32L152xD || STM32L162xCA || STM32L162xD || STM32L151xE || STM32L152xE || STM32L162xE */
  214. #if defined(STM32L151xCA) || defined (STM32L151xD) || defined (STM32L152xCA) || defined (STM32L152xD) || defined (STM32L162xCA) || defined (STM32L162xD) || \
  215. defined(STM32L151xE) || defined (STM32L152xE) || defined (STM32L162xE)
  216. #define __GPIOF_FORCE_RESET() (RCC->AHBRSTR |= (RCC_AHBRSTR_GPIOFRST))
  217. #define __GPIOG_FORCE_RESET() (RCC->AHBRSTR |= (RCC_AHBRSTR_GPIOGRST))
  218. #define __GPIOF_RELEASE_RESET() (RCC->AHBRSTR &= ~(RCC_AHBRSTR_GPIOFRST))
  219. #define __GPIOG_RELEASE_RESET() (RCC->AHBRSTR &= ~(RCC_AHBRSTR_GPIOGRST))
  220. #endif /* STM32L151xCA || STM32L151xD || STM32L152xCA || STM32L152xD || STM32L162xCA || STM32L162xD || STM32L151xE || STM32L152xE || STM32L162xE */
  221. #if defined(STM32L100xC) || defined (STM32L151xC) || defined (STM32L152xC) || defined (STM32L162xC) || \
  222. defined(STM32L151xCA) || defined (STM32L151xD) || defined (STM32L152xCA) || defined (STM32L152xD) || defined (STM32L162xCA) || defined (STM32L162xD) || \
  223. defined(STM32L151xE) || defined (STM32L152xE) || defined (STM32L162xE)
  224. #define __DMA2_FORCE_RESET() (RCC->AHBRSTR |= (RCC_AHBRSTR_DMA2RST))
  225. #define __DMA2_RELEASE_RESET() (RCC->AHBRSTR &= ~(RCC_AHBRSTR_DMA2RST))
  226. #endif /* STM32L100xC || STM32L151xC || STM32L152xC || STM32L162xC || STM32L151xCA || STM32L151xD || STM32L152xCA || STM32L152xD || STM32L162xCA || STM32L162xD || STM32L151xE || STM32L152xE || STM32L162xE */
  227. #if defined(STM32L162xC) || defined(STM32L162xCA) || defined(STM32L162xD) || defined(STM32L162xE)
  228. #define __CRYP_FORCE_RESET() (RCC->AHBRSTR |= (RCC_AHBRSTR_AESRST))
  229. #define __CRYP_RELEASE_RESET() (RCC->AHBRSTR &= ~(RCC_AHBRSTR_AESRST))
  230. #endif /* STM32L162xC || STM32L162xCA || STM32L162xD || STM32L162xE */
  231. #if defined (STM32L151xD) || defined (STM32L152xD) || defined (STM32L162xD)
  232. #define __FSMC_FORCE_RESET() (RCC->AHBRSTR |= (RCC_AHBRSTR_FSMCRST))
  233. #define __FSMC_RELEASE_RESET() (RCC->AHBRSTR &= ~(RCC_AHBRSTR_FSMCRST))
  234. #endif /* STM32L151xD || STM32L152xD || STM32L162xD */
  235. #if defined (STM32L100xB) || defined (STM32L100xBA) || defined (STM32L100xC) ||\
  236. defined(STM32L152xB) || defined(STM32L152xBA) || defined(STM32L152xC) || \
  237. defined(STM32L162xC) || defined(STM32L152xCA) || defined(STM32L152xD) || \
  238. defined(STM32L162xCA) || defined(STM32L162xD) || defined(STM32L152xE) || \
  239. defined(STM32L162xE)
  240. #define __LCD_FORCE_RESET() (RCC->APB1RSTR |= (RCC_APB1RSTR_LCDRST))
  241. #define __LCD_RELEASE_RESET() (RCC->APB1RSTR &= ~(RCC_APB1RSTR_LCDRST))
  242. #endif /* STM32L100xB || STM32L152xBA || ... || STM32L152xE || STM32L162xE */
  243. /** @brief Forces or releases APB1 peripheral reset.
  244. */
  245. #if defined (STM32L151xC) || defined (STM32L152xC) || defined (STM32L162xC) || \
  246. defined(STM32L151xCA) || defined (STM32L151xD) || defined (STM32L152xCA) || defined (STM32L152xD) || defined (STM32L162xCA) || defined (STM32L162xD) || \
  247. defined(STM32L151xE) || defined (STM32L152xE) || defined (STM32L162xE)
  248. #define __TIM5_FORCE_RESET() (RCC->APB1RSTR |= (RCC_APB1RSTR_TIM5RST))
  249. #define __TIM5_RELEASE_RESET() (RCC->APB1RSTR &= ~(RCC_APB1RSTR_TIM5RST))
  250. #endif /* STM32L151xC || STM32L152xC || STM32L162xC || STM32L151xCA || STM32L151xD || STM32L152xCA || STM32L152xD || STM32L162xCA || STM32L162xD || STM32L151xE || STM32L152xE || STM32L162xE */
  251. #if defined(STM32L100xC) || defined (STM32L151xC) || defined (STM32L152xC) || defined (STM32L162xC) || \
  252. defined(STM32L151xCA) || defined (STM32L151xD) || defined (STM32L152xCA) || defined (STM32L152xD) || defined (STM32L162xCA) || defined (STM32L162xD) || \
  253. defined(STM32L151xE) || defined (STM32L152xE) || defined (STM32L162xE)
  254. #define __SPI3_FORCE_RESET() (RCC->APB1RSTR |= (RCC_APB1RSTR_SPI3RST))
  255. #define __SPI3_RELEASE_RESET() (RCC->APB1RSTR &= ~(RCC_APB1RSTR_SPI3RST))
  256. #endif /* STM32L100xC || STM32L151xC || STM32L152xC || STM32L162xC || STM32L151xCA || STM32L151xD || STM32L152xCA || STM32L152xD || STM32L162xCA || STM32L162xD || STM32L151xE || STM32L152xE || STM32L162xE */
  257. #if defined (STM32L151xD) || defined (STM32L152xD) || defined (STM32L162xD) || \
  258. defined(STM32L151xE) || defined (STM32L152xE) || defined (STM32L162xE)
  259. #define __UART4_FORCE_RESET() (RCC->APB1RSTR |= (RCC_APB1RSTR_UART4RST))
  260. #define __UART5_FORCE_RESET() (RCC->APB1RSTR |= (RCC_APB1RSTR_UART5RST))
  261. #define __UART4_RELEASE_RESET() (RCC->APB1RSTR &= ~(RCC_APB1RSTR_UART4RST))
  262. #define __UART5_RELEASE_RESET() (RCC->APB1RSTR &= ~(RCC_APB1RSTR_UART5RST))
  263. #endif /* STM32L151xD || STM32L152xD || STM32L162xD || STM32L151xE || STM32L152xE || STM32L162xE */
  264. #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)
  265. #define __OPAMP_FORCE_RESET() __COMP_FORCE_RESET() /* Peripherals COMP and OPAMP share the same clock domain */
  266. #define __OPAMP_RELEASE_RESET() __COMP_RELEASE_RESET() /* Peripherals COMP and OPAMP share the same clock domain */
  267. #endif /* STM32L151xCA || STM32L151xD || STM32L152xCA || STM32L152xD || STM32L162xCA || STM32L162xD || STM32L151xE || STM32L152xE || STM32L162xE || STM32L162xC || STM32L152xC || STM32L151xC */
  268. /** @brief Forces or releases APB2 peripheral reset.
  269. */
  270. #if defined (STM32L151xD) || defined (STM32L152xD) || defined (STM32L162xD)
  271. #define __SDIO_FORCE_RESET() (RCC->APB2RSTR |= (RCC_APB2RSTR_SDIORST))
  272. #define __SDIO_RELEASE_RESET() (RCC->APB2RSTR &= ~(RCC_APB2RSTR_SDIORST))
  273. #endif /* STM32L151xD || STM32L152xD || STM32L162xD */
  274. /**
  275. * @}
  276. */
  277. /** @defgroup RCCEx_Peripheral_Clock_Sleep_Enable_Disable RCCEx Peripheral Clock Sleep Enable Disable
  278. * @brief Enables or disables the AHB1 peripheral clock during Low Power (Sleep) mode.
  279. * @note Peripheral clock gating in SLEEP mode can be used to further reduce
  280. * power consumption.
  281. * @note After wakeup from SLEEP mode, the peripheral clock is enabled again.
  282. * @note By default, all peripheral clocks are enabled during SLEEP mode.
  283. * @{
  284. */
  285. #if defined (STM32L151xB) || defined (STM32L152xB) || \
  286. defined (STM32L151xBA) || defined (STM32L152xBA) || \
  287. defined (STM32L151xC) || defined (STM32L152xC) || defined (STM32L162xC) || \
  288. defined(STM32L151xCA) || defined (STM32L151xD) || defined (STM32L152xCA) || defined (STM32L152xD) || defined (STM32L162xCA) || defined (STM32L162xD) || \
  289. defined(STM32L151xE) || defined (STM32L152xE) || defined (STM32L162xE)
  290. #define __GPIOE_CLK_SLEEP_ENABLE() (RCC->AHBLPENR |= (RCC_AHBLPENR_GPIOELPEN))
  291. #define __GPIOE_CLK_SLEEP_DISABLE() (RCC->AHBLPENR &= ~(RCC_AHBLPENR_GPIOELPEN))
  292. #endif /* STM32L151xB || STM32L152xB || ... || STM32L151xCA || STM32L151xD || STM32L152xCA || STM32L152xD || STM32L162xCA || STM32L162xD || STM32L151xE || STM32L152xE || STM32L162xE */
  293. #if defined(STM32L151xCA) || defined (STM32L151xD) || defined (STM32L152xCA) || defined (STM32L152xD) || defined (STM32L162xCA) || defined (STM32L162xD) || \
  294. defined(STM32L151xE) || defined (STM32L152xE) || defined (STM32L162xE)
  295. #define __GPIOF_CLK_SLEEP_ENABLE() (RCC->AHBLPENR |= (RCC_AHBLPENR_GPIOFLPEN))
  296. #define __GPIOG_CLK_SLEEP_ENABLE() (RCC->AHBLPENR |= (RCC_AHBLPENR_GPIOGLPEN))
  297. #define __GPIOF_CLK_SLEEP_DISABLE() (RCC->AHBLPENR &= ~(RCC_AHBLPENR_GPIOFLPEN))
  298. #define __GPIOG_CLK_SLEEP_DISABLE() (RCC->AHBLPENR &= ~(RCC_AHBLPENR_GPIOGLPEN))
  299. #endif /* STM32L151xCA || STM32L151xD || STM32L152xCA || STM32L152xD || STM32L162xCA || STM32L162xD || STM32L151xE || STM32L152xE || STM32L162xE */
  300. #if defined(STM32L100xC) || defined (STM32L151xC) || defined (STM32L152xC) || defined (STM32L162xC) || \
  301. defined(STM32L151xCA) || defined (STM32L151xD) || defined (STM32L152xCA) || defined (STM32L152xD) || defined (STM32L162xCA) || defined (STM32L162xD) || \
  302. defined(STM32L151xE) || defined (STM32L152xE) || defined (STM32L162xE)
  303. #define __DMA2_CLK_SLEEP_ENABLE() (RCC->AHBLPENR |= (RCC_AHBLPENR_DMA2LPEN))
  304. #define __DMA2_CLK_SLEEP_DISABLE() (RCC->AHBLPENR &= ~(RCC_AHBLPENR_DMA2LPEN))
  305. #endif /* STM32L100xC || STM32L151xC || STM32L152xC || STM32L162xC || STM32L151xCA || STM32L151xD || STM32L152xCA || STM32L152xD || STM32L162xCA || STM32L162xD || STM32L151xE || STM32L152xE || STM32L162xE */
  306. #if defined(STM32L162xC) || defined(STM32L162xCA) || defined(STM32L162xD) || defined(STM32L162xE)
  307. #define __CRYP_CLK_SLEEP_ENABLE() (RCC->AHBLPENR |= (RCC_AHBLPENR_AESLPEN))
  308. #define __CRYP_CLK_SLEEP_DISABLE() (RCC->AHBLPENR &= ~(RCC_AHBLPENR_AESLPEN))
  309. #endif /* STM32L162xC || STM32L162xCA || STM32L162xD || STM32L162xE */
  310. #if defined (STM32L151xD) || defined (STM32L152xD) || defined (STM32L162xD)
  311. #define __FSMC_CLK_SLEEP_ENABLE() (RCC->AHBLPENR |= (RCC_AHBLPENR_FSMCLPEN))
  312. #define __FSMC_CLK_SLEEP_DISABLE() (RCC->AHBLPENR &= ~(RCC_AHBLPENR_FSMCLPEN))
  313. #endif /* STM32L151xD || STM32L152xD || STM32L162xD */
  314. #if defined (STM32L100xB) || defined (STM32L100xBA) || defined (STM32L100xC) ||\
  315. defined(STM32L152xB) || defined(STM32L152xBA) || defined(STM32L152xC) || \
  316. defined(STM32L162xC) || defined(STM32L152xCA) || defined(STM32L152xD) || \
  317. defined(STM32L162xCA) || defined(STM32L162xD) || defined(STM32L152xE) || \
  318. defined(STM32L162xE)
  319. #define __LCD_CLK_SLEEP_ENABLE() (RCC->APB1LPENR |= (RCC_APB1LPENR_LCDLPEN))
  320. #define __LCD_CLK_SLEEP_DISABLE() (RCC->APB1LPENR &= ~(RCC_APB1LPENR_LCDLPEN))
  321. #endif /* STM32L100xB || STM32L152xBA || ... || STM32L152xE || STM32L162xE */
  322. /** @brief Enables or disables the APB1 peripheral clock during Low Power (Sleep) mode.
  323. * @note Peripheral clock gating in SLEEP mode can be used to further reduce
  324. * power consumption.
  325. * @note After wakeup from SLEEP mode, the peripheral clock is enabled again.
  326. * @note By default, all peripheral clocks are enabled during SLEEP mode.
  327. */
  328. #if defined (STM32L151xC) || defined (STM32L152xC) || defined (STM32L162xC) || \
  329. defined(STM32L151xCA) || defined (STM32L151xD) || defined (STM32L152xCA) || defined (STM32L152xD) || defined (STM32L162xCA) || defined (STM32L162xD) || \
  330. defined(STM32L151xE) || defined (STM32L152xE) || defined (STM32L162xE)
  331. #define __TIM5_CLK_SLEEP_ENABLE() (RCC->APB1LPENR |= (RCC_APB1LPENR_TIM5LPEN))
  332. #define __TIM5_CLK_SLEEP_DISABLE() (RCC->APB1LPENR &= ~(RCC_APB1LPENR_TIM5LPEN))
  333. #endif /* STM32L151xC || STM32L152xC || STM32L162xC || STM32L151xCA || STM32L151xD || STM32L152xCA || STM32L152xD || STM32L162xCA || STM32L162xD || STM32L151xE || STM32L152xE || STM32L162xE */
  334. #if defined(STM32L100xC) || defined (STM32L151xC) || defined (STM32L152xC) || defined (STM32L162xC) || \
  335. defined(STM32L151xCA) || defined (STM32L151xD) || defined (STM32L152xCA) || defined (STM32L152xD) || defined (STM32L162xCA) || defined (STM32L162xD) || \
  336. defined(STM32L151xE) || defined (STM32L152xE) || defined (STM32L162xE)
  337. #define __SPI3_CLK_SLEEP_ENABLE() (RCC->APB1LPENR |= (RCC_APB1LPENR_SPI3LPEN))
  338. #define __SPI3_CLK_SLEEP_DISABLE() (RCC->APB1LPENR &= ~(RCC_APB1LPENR_SPI3LPEN))
  339. #endif /* STM32L100xC || STM32L151xC || STM32L152xC || STM32L162xC || STM32L151xCA || STM32L151xD || STM32L152xCA || STM32L152xD || STM32L162xCA || STM32L162xD || STM32L151xE || STM32L152xE || STM32L162xE */
  340. #if defined (STM32L151xD) || defined (STM32L152xD) || defined (STM32L162xD) || \
  341. defined(STM32L151xE) || defined (STM32L152xE) || defined (STM32L162xE)
  342. #define __UART4_CLK_SLEEP_ENABLE() (RCC->APB1LPENR |= (RCC_APB1LPENR_UART4LPEN))
  343. #define __UART5_CLK_SLEEP_ENABLE() (RCC->APB1LPENR |= (RCC_APB1LPENR_UART5LPEN))
  344. #define __UART4_CLK_SLEEP_DISABLE() (RCC->APB1LPENR &= ~(RCC_APB1LPENR_UART4LPEN))
  345. #define __UART5_CLK_SLEEP_DISABLE() (RCC->APB1LPENR &= ~(RCC_APB1LPENR_UART5LPEN))
  346. #endif /* STM32L151xD || STM32L152xD || STM32L162xD || STM32L151xE || STM32L152xE || STM32L162xE */
  347. /** @brief Enables or disables the APB2 peripheral clock during Low Power (Sleep) mode.
  348. * @note Peripheral clock gating in SLEEP mode can be used to further reduce
  349. * power consumption.
  350. * @note After wakeup from SLEEP mode, the peripheral clock is enabled again.
  351. * @note By default, all peripheral clocks are enabled during SLEEP mode.
  352. */
  353. #if defined (STM32L151xD) || defined (STM32L152xD) || defined (STM32L162xD)
  354. #define __SDIO_CLK_SLEEP_ENABLE() (RCC->APB2LPENR |= (RCC_APB2LPENR_SDIOLPEN))
  355. #define __SDIO_CLK_SLEEP_DISABLE() (RCC->APB2LPENR &= ~(RCC_APB2LPENR_SDIOLPEN))
  356. #endif /* STM32L151xD || STM32L152xD || STM32L162xD */
  357. /**
  358. * @}
  359. */
  360. #if defined (STM32L100xB) || defined (STM32L100xBA) || defined (STM32L100xC) ||\
  361. defined(STM32L152xB) || defined(STM32L152xBA) || defined(STM32L152xC) || \
  362. defined(STM32L162xC) || defined(STM32L152xCA) || defined(STM32L152xD) || \
  363. defined(STM32L162xCA) || defined(STM32L162xD) || defined(STM32L152xE) || \
  364. defined(STM32L162xE)
  365. /** @brief Macro to configures LCD clock (LCDCLK).
  366. * @note LCD and RTC use the same configuration
  367. * @note LCD can however be used in the Stop low power mode if the LSE or LSI is used as the
  368. * LCD clock source.
  369. *
  370. * @param __LCD_CLKSOURCE__: specifies the LCD clock source.
  371. * This parameter can be one of the following values:
  372. * @arg RCC_RTCCLKSOURCE_LSE: LSE selected as RTC clock
  373. * @arg RCC_RTCCLKSOURCE_LSI: LSI selected as RTC clock
  374. * @arg RCC_RTCCLKSOURCE_HSE_DIV2: HSE divided by 2 selected as RTC clock
  375. * @arg RCC_RTCCLKSOURCE_HSE_DIV4: HSE divided by 4 selected as RTC clock
  376. * @arg RCC_RTCCLKSOURCE_HSE_DIV8: HSE divided by 8 selected as RTC clock
  377. * @arg RCC_RTCCLKSOURCE_HSE_DIV16: HSE divided by 16 selected as RTC clock
  378. */
  379. #define __HAL_RCC_LCD_CONFIG(__LCD_CLKSOURCE__) __HAL_RCC_RTC_CONFIG(__LCD_CLKSOURCE__)
  380. /** @brief macros to get the LCD clock source.
  381. */
  382. #define __HAL_RCC_GET_LCD_SOURCE() __HAL_RCC_GET_RTC_SOURCE()
  383. #endif /* STM32L100xB || STM32L152xBA || ... || STM32L152xE || STM32L162xE */
  384. /**
  385. * @}
  386. */
  387. /* Exported functions --------------------------------------------------------*/
  388. /** @addtogroup RCCEx_Private_Functions
  389. * @{
  390. */
  391. /** @addtogroup RCCEx_Exported_Functions_Group1
  392. * @{
  393. */
  394. HAL_StatusTypeDef HAL_RCCEx_PeriphCLKConfig(RCC_PeriphCLKInitTypeDef *PeriphClkInit);
  395. void HAL_RCCEx_GetPeriphCLKConfig(RCC_PeriphCLKInitTypeDef *PeriphClkInit);
  396. #if defined(STM32L100xBA) || defined (STM32L151xBA) || defined (STM32L152xBA) || \
  397. defined(STM32L100xC) || defined (STM32L151xC) || defined (STM32L152xC) || defined (STM32L162xC) || \
  398. defined(STM32L151xCA) || defined (STM32L151xD) || defined (STM32L152xCA) || defined (STM32L152xD) || defined (STM32L162xCA) || defined (STM32L162xD) || \
  399. defined(STM32L151xE) || defined (STM32L152xE) || defined (STM32L162xE)
  400. void HAL_RCCEx_EnableLSECSS(void);
  401. void HAL_RCCEx_DisableLSECSS(void);
  402. #endif /* STM32L100xBA || STM32L151xBA || STM32L152xBA || STM32L100xC || STM32L151xC || STM32L152xC || STM32L162xC || STM32L151xCA || STM32L151xD || STM32L152xCA || STM32L152xD || STM32L162xCA || STM32L162xD || STM32L151xE || STM32L152xE || STM32L162xE*/
  403. /**
  404. * @}
  405. */
  406. /**
  407. * @}
  408. */
  409. /**
  410. * @}
  411. */
  412. /**
  413. * @}
  414. */
  415. #ifdef __cplusplus
  416. }
  417. #endif
  418. #endif /* __STM32L1xx_HAL_RCC_EX_H */
  419. /************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/