stm32f1xx_ll_bus.h 45 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033
  1. /**
  2. ******************************************************************************
  3. * @file stm32f1xx_ll_bus.h
  4. * @author MCD Application Team
  5. * @version V1.1.1
  6. * @date 12-May-2017
  7. * @brief Header file of BUS LL module.
  8. @verbatim
  9. ##### RCC Limitations #####
  10. ==============================================================================
  11. [..]
  12. A delay between an RCC peripheral clock enable and the effective peripheral
  13. enabling should be taken into account in order to manage the peripheral read/write
  14. from/to registers.
  15. (+) This delay depends on the peripheral mapping.
  16. (++) AHB & APB peripherals, 1 dummy read is necessary
  17. [..]
  18. Workarounds:
  19. (#) For AHB & APB peripherals, a dummy read to the peripheral register has been
  20. inserted in each LL_{BUS}_GRP{x}_EnableClock() function.
  21. @endverbatim
  22. ******************************************************************************
  23. * @attention
  24. *
  25. * <h2><center>&copy; COPYRIGHT(c) 2016 STMicroelectronics</center></h2>
  26. *
  27. * Redistribution and use in source and binary forms, with or without modification,
  28. * are permitted provided that the following conditions are met:
  29. * 1. Redistributions of source code must retain the above copyright notice,
  30. * this list of conditions and the following disclaimer.
  31. * 2. Redistributions in binary form must reproduce the above copyright notice,
  32. * this list of conditions and the following disclaimer in the documentation
  33. * and/or other materials provided with the distribution.
  34. * 3. Neither the name of STMicroelectronics nor the names of its contributors
  35. * may be used to endorse or promote products derived from this software
  36. * without specific prior written permission.
  37. *
  38. * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
  39. * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
  40. * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
  41. * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
  42. * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
  43. * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
  44. * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
  45. * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
  46. * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
  47. * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  48. *
  49. ******************************************************************************
  50. */
  51. /* Define to prevent recursive inclusion -------------------------------------*/
  52. #ifndef __STM32F1xx_LL_BUS_H
  53. #define __STM32F1xx_LL_BUS_H
  54. #ifdef __cplusplus
  55. extern "C" {
  56. #endif
  57. /* Includes ------------------------------------------------------------------*/
  58. #include "stm32f1xx.h"
  59. /** @addtogroup STM32F1xx_LL_Driver
  60. * @{
  61. */
  62. #if defined(RCC)
  63. /** @defgroup BUS_LL BUS
  64. * @{
  65. */
  66. /* Private types -------------------------------------------------------------*/
  67. /* Private variables ---------------------------------------------------------*/
  68. /* Private constants ---------------------------------------------------------*/
  69. #if defined(RCC_AHBRSTR_OTGFSRST) || defined(RCC_AHBRSTR_ETHMACRST)
  70. #define RCC_AHBRSTR_SUPPORT
  71. #endif /* RCC_AHBRSTR_OTGFSRST || RCC_AHBRSTR_ETHMACRST */
  72. /* Private macros ------------------------------------------------------------*/
  73. /* Exported types ------------------------------------------------------------*/
  74. /* Exported constants --------------------------------------------------------*/
  75. /** @defgroup BUS_LL_Exported_Constants BUS Exported Constants
  76. * @{
  77. */
  78. /** @defgroup BUS_LL_EC_AHB1_GRP1_PERIPH AHB1 GRP1 PERIPH
  79. * @{
  80. */
  81. #define LL_AHB1_GRP1_PERIPH_ALL (uint32_t)0xFFFFFFFFU
  82. #define LL_AHB1_GRP1_PERIPH_CRC RCC_AHBENR_CRCEN
  83. #define LL_AHB1_GRP1_PERIPH_DMA1 RCC_AHBENR_DMA1EN
  84. #if defined(DMA2)
  85. #define LL_AHB1_GRP1_PERIPH_DMA2 RCC_AHBENR_DMA2EN
  86. #endif /*DMA2*/
  87. #if defined(ETH)
  88. #define LL_AHB1_GRP1_PERIPH_ETHMAC RCC_AHBENR_ETHMACEN
  89. #define LL_AHB1_GRP1_PERIPH_ETHMACRX RCC_AHBENR_ETHMACRXEN
  90. #define LL_AHB1_GRP1_PERIPH_ETHMACTX RCC_AHBENR_ETHMACTXEN
  91. #endif /*ETH*/
  92. #define LL_AHB1_GRP1_PERIPH_FLASH RCC_AHBENR_FLITFEN
  93. #if defined(FSMC_Bank1)
  94. #define LL_AHB1_GRP1_PERIPH_FSMC RCC_AHBENR_FSMCEN
  95. #endif /*FSMC_Bank1*/
  96. #if defined(USB_OTG_FS)
  97. #define LL_AHB1_GRP1_PERIPH_OTGFS RCC_AHBENR_OTGFSEN
  98. #endif /*USB_OTG_FS*/
  99. #if defined(SDIO)
  100. #define LL_AHB1_GRP1_PERIPH_SDIO RCC_AHBENR_SDIOEN
  101. #endif /*SDIO*/
  102. #define LL_AHB1_GRP1_PERIPH_SRAM RCC_AHBENR_SRAMEN
  103. /**
  104. * @}
  105. */
  106. /** @defgroup BUS_LL_EC_APB1_GRP1_PERIPH APB1 GRP1 PERIPH
  107. * @{
  108. */
  109. #define LL_APB1_GRP1_PERIPH_ALL (uint32_t)0xFFFFFFFFU
  110. #define LL_APB1_GRP1_PERIPH_BKP RCC_APB1ENR_BKPEN
  111. #if defined(CAN1)
  112. #define LL_APB1_GRP1_PERIPH_CAN1 RCC_APB1ENR_CAN1EN
  113. #endif /*CAN1*/
  114. #if defined(CAN2)
  115. #define LL_APB1_GRP1_PERIPH_CAN2 RCC_APB1ENR_CAN2EN
  116. #endif /*CAN2*/
  117. #if defined(CEC)
  118. #define LL_APB1_GRP1_PERIPH_CEC RCC_APB1ENR_CECEN
  119. #endif /*CEC*/
  120. #if defined(DAC)
  121. #define LL_APB1_GRP1_PERIPH_DAC1 RCC_APB1ENR_DACEN
  122. #endif /*DAC*/
  123. #define LL_APB1_GRP1_PERIPH_I2C1 RCC_APB1ENR_I2C1EN
  124. #if defined(I2C2)
  125. #define LL_APB1_GRP1_PERIPH_I2C2 RCC_APB1ENR_I2C2EN
  126. #endif /*I2C2*/
  127. #define LL_APB1_GRP1_PERIPH_PWR RCC_APB1ENR_PWREN
  128. #if defined(SPI2)
  129. #define LL_APB1_GRP1_PERIPH_SPI2 RCC_APB1ENR_SPI2EN
  130. #endif /*SPI2*/
  131. #if defined(SPI3)
  132. #define LL_APB1_GRP1_PERIPH_SPI3 RCC_APB1ENR_SPI3EN
  133. #endif /*SPI3*/
  134. #if defined(TIM12)
  135. #define LL_APB1_GRP1_PERIPH_TIM12 RCC_APB1ENR_TIM12EN
  136. #endif /*TIM12*/
  137. #if defined(TIM13)
  138. #define LL_APB1_GRP1_PERIPH_TIM13 RCC_APB1ENR_TIM13EN
  139. #endif /*TIM13*/
  140. #if defined(TIM14)
  141. #define LL_APB1_GRP1_PERIPH_TIM14 RCC_APB1ENR_TIM14EN
  142. #endif /*TIM14*/
  143. #define LL_APB1_GRP1_PERIPH_TIM2 RCC_APB1ENR_TIM2EN
  144. #define LL_APB1_GRP1_PERIPH_TIM3 RCC_APB1ENR_TIM3EN
  145. #if defined(TIM4)
  146. #define LL_APB1_GRP1_PERIPH_TIM4 RCC_APB1ENR_TIM4EN
  147. #endif /*TIM4*/
  148. #if defined(TIM5)
  149. #define LL_APB1_GRP1_PERIPH_TIM5 RCC_APB1ENR_TIM5EN
  150. #endif /*TIM5*/
  151. #if defined(TIM6)
  152. #define LL_APB1_GRP1_PERIPH_TIM6 RCC_APB1ENR_TIM6EN
  153. #endif /*TIM6*/
  154. #if defined(TIM7)
  155. #define LL_APB1_GRP1_PERIPH_TIM7 RCC_APB1ENR_TIM7EN
  156. #endif /*TIM7*/
  157. #if defined(UART4)
  158. #define LL_APB1_GRP1_PERIPH_UART4 RCC_APB1ENR_UART4EN
  159. #endif /*UART4*/
  160. #if defined(UART5)
  161. #define LL_APB1_GRP1_PERIPH_UART5 RCC_APB1ENR_UART5EN
  162. #endif /*UART5*/
  163. #define LL_APB1_GRP1_PERIPH_USART2 RCC_APB1ENR_USART2EN
  164. #if defined(USART3)
  165. #define LL_APB1_GRP1_PERIPH_USART3 RCC_APB1ENR_USART3EN
  166. #endif /*USART3*/
  167. #if defined(USB)
  168. #define LL_APB1_GRP1_PERIPH_USB RCC_APB1ENR_USBEN
  169. #endif /*USB*/
  170. #define LL_APB1_GRP1_PERIPH_WWDG RCC_APB1ENR_WWDGEN
  171. /**
  172. * @}
  173. */
  174. /** @defgroup BUS_LL_EC_APB2_GRP1_PERIPH APB2 GRP1 PERIPH
  175. * @{
  176. */
  177. #define LL_APB2_GRP1_PERIPH_ALL (uint32_t)0xFFFFFFFFU
  178. #define LL_APB2_GRP1_PERIPH_ADC1 RCC_APB2ENR_ADC1EN
  179. #if defined(ADC2)
  180. #define LL_APB2_GRP1_PERIPH_ADC2 RCC_APB2ENR_ADC2EN
  181. #endif /*ADC2*/
  182. #if defined(ADC3)
  183. #define LL_APB2_GRP1_PERIPH_ADC3 RCC_APB2ENR_ADC3EN
  184. #endif /*ADC3*/
  185. #define LL_APB2_GRP1_PERIPH_AFIO RCC_APB2ENR_AFIOEN
  186. #define LL_APB2_GRP1_PERIPH_GPIOA RCC_APB2ENR_IOPAEN
  187. #define LL_APB2_GRP1_PERIPH_GPIOB RCC_APB2ENR_IOPBEN
  188. #define LL_APB2_GRP1_PERIPH_GPIOC RCC_APB2ENR_IOPCEN
  189. #define LL_APB2_GRP1_PERIPH_GPIOD RCC_APB2ENR_IOPDEN
  190. #if defined(GPIOE)
  191. #define LL_APB2_GRP1_PERIPH_GPIOE RCC_APB2ENR_IOPEEN
  192. #endif /*GPIOE*/
  193. #if defined(GPIOF)
  194. #define LL_APB2_GRP1_PERIPH_GPIOF RCC_APB2ENR_IOPFEN
  195. #endif /*GPIOF*/
  196. #if defined(GPIOG)
  197. #define LL_APB2_GRP1_PERIPH_GPIOG RCC_APB2ENR_IOPGEN
  198. #endif /*GPIOG*/
  199. #define LL_APB2_GRP1_PERIPH_SPI1 RCC_APB2ENR_SPI1EN
  200. #if defined(TIM10)
  201. #define LL_APB2_GRP1_PERIPH_TIM10 RCC_APB2ENR_TIM10EN
  202. #endif /*TIM10*/
  203. #if defined(TIM11)
  204. #define LL_APB2_GRP1_PERIPH_TIM11 RCC_APB2ENR_TIM11EN
  205. #endif /*TIM11*/
  206. #if defined(TIM15)
  207. #define LL_APB2_GRP1_PERIPH_TIM15 RCC_APB2ENR_TIM15EN
  208. #endif /*TIM15*/
  209. #if defined(TIM16)
  210. #define LL_APB2_GRP1_PERIPH_TIM16 RCC_APB2ENR_TIM16EN
  211. #endif /*TIM16*/
  212. #if defined(TIM17)
  213. #define LL_APB2_GRP1_PERIPH_TIM17 RCC_APB2ENR_TIM17EN
  214. #endif /*TIM17*/
  215. #define LL_APB2_GRP1_PERIPH_TIM1 RCC_APB2ENR_TIM1EN
  216. #if defined(TIM8)
  217. #define LL_APB2_GRP1_PERIPH_TIM8 RCC_APB2ENR_TIM8EN
  218. #endif /*TIM8*/
  219. #if defined(TIM9)
  220. #define LL_APB2_GRP1_PERIPH_TIM9 RCC_APB2ENR_TIM9EN
  221. #endif /*TIM9*/
  222. #define LL_APB2_GRP1_PERIPH_USART1 RCC_APB2ENR_USART1EN
  223. /**
  224. * @}
  225. */
  226. /**
  227. * @}
  228. */
  229. /* Exported macro ------------------------------------------------------------*/
  230. /* Exported functions --------------------------------------------------------*/
  231. /** @defgroup BUS_LL_Exported_Functions BUS Exported Functions
  232. * @{
  233. */
  234. /** @defgroup BUS_LL_EF_AHB1 AHB1
  235. * @{
  236. */
  237. /**
  238. * @brief Enable AHB1 peripherals clock.
  239. * @rmtoll AHBENR CRCEN LL_AHB1_GRP1_EnableClock\n
  240. * AHBENR DMA1EN LL_AHB1_GRP1_EnableClock\n
  241. * AHBENR DMA2EN LL_AHB1_GRP1_EnableClock\n
  242. * AHBENR ETHMACEN LL_AHB1_GRP1_EnableClock\n
  243. * AHBENR ETHMACRXEN LL_AHB1_GRP1_EnableClock\n
  244. * AHBENR ETHMACTXEN LL_AHB1_GRP1_EnableClock\n
  245. * AHBENR FLITFEN LL_AHB1_GRP1_EnableClock\n
  246. * AHBENR FSMCEN LL_AHB1_GRP1_EnableClock\n
  247. * AHBENR OTGFSEN LL_AHB1_GRP1_EnableClock\n
  248. * AHBENR SDIOEN LL_AHB1_GRP1_EnableClock\n
  249. * AHBENR SRAMEN LL_AHB1_GRP1_EnableClock
  250. * @param Periphs This parameter can be a combination of the following values:
  251. * @arg @ref LL_AHB1_GRP1_PERIPH_CRC
  252. * @arg @ref LL_AHB1_GRP1_PERIPH_DMA1
  253. * @arg @ref LL_AHB1_GRP1_PERIPH_DMA2 (*)
  254. * @arg @ref LL_AHB1_GRP1_PERIPH_ETHMAC (*)
  255. * @arg @ref LL_AHB1_GRP1_PERIPH_ETHMACRX (*)
  256. * @arg @ref LL_AHB1_GRP1_PERIPH_ETHMACTX (*)
  257. * @arg @ref LL_AHB1_GRP1_PERIPH_FLASH
  258. * @arg @ref LL_AHB1_GRP1_PERIPH_FSMC (*)
  259. * @arg @ref LL_AHB1_GRP1_PERIPH_OTGFS (*)
  260. * @arg @ref LL_AHB1_GRP1_PERIPH_SDIO (*)
  261. * @arg @ref LL_AHB1_GRP1_PERIPH_SRAM
  262. *
  263. * (*) value not defined in all devices.
  264. * @retval None
  265. */
  266. __STATIC_INLINE void LL_AHB1_GRP1_EnableClock(uint32_t Periphs)
  267. {
  268. __IO uint32_t tmpreg;
  269. SET_BIT(RCC->AHBENR, Periphs);
  270. /* Delay after an RCC peripheral clock enabling */
  271. tmpreg = READ_BIT(RCC->AHBENR, Periphs);
  272. (void)tmpreg;
  273. }
  274. /**
  275. * @brief Check if AHB1 peripheral clock is enabled or not
  276. * @rmtoll AHBENR CRCEN LL_AHB1_GRP1_IsEnabledClock\n
  277. * AHBENR DMA1EN LL_AHB1_GRP1_IsEnabledClock\n
  278. * AHBENR DMA2EN LL_AHB1_GRP1_IsEnabledClock\n
  279. * AHBENR ETHMACEN LL_AHB1_GRP1_IsEnabledClock\n
  280. * AHBENR ETHMACRXEN LL_AHB1_GRP1_IsEnabledClock\n
  281. * AHBENR ETHMACTXEN LL_AHB1_GRP1_IsEnabledClock\n
  282. * AHBENR FLITFEN LL_AHB1_GRP1_IsEnabledClock\n
  283. * AHBENR FSMCEN LL_AHB1_GRP1_IsEnabledClock\n
  284. * AHBENR OTGFSEN LL_AHB1_GRP1_IsEnabledClock\n
  285. * AHBENR SDIOEN LL_AHB1_GRP1_IsEnabledClock\n
  286. * AHBENR SRAMEN LL_AHB1_GRP1_IsEnabledClock
  287. * @param Periphs This parameter can be a combination of the following values:
  288. * @arg @ref LL_AHB1_GRP1_PERIPH_CRC
  289. * @arg @ref LL_AHB1_GRP1_PERIPH_DMA1
  290. * @arg @ref LL_AHB1_GRP1_PERIPH_DMA2 (*)
  291. * @arg @ref LL_AHB1_GRP1_PERIPH_ETHMAC (*)
  292. * @arg @ref LL_AHB1_GRP1_PERIPH_ETHMACRX (*)
  293. * @arg @ref LL_AHB1_GRP1_PERIPH_ETHMACTX (*)
  294. * @arg @ref LL_AHB1_GRP1_PERIPH_FLASH
  295. * @arg @ref LL_AHB1_GRP1_PERIPH_FSMC (*)
  296. * @arg @ref LL_AHB1_GRP1_PERIPH_OTGFS (*)
  297. * @arg @ref LL_AHB1_GRP1_PERIPH_SDIO (*)
  298. * @arg @ref LL_AHB1_GRP1_PERIPH_SRAM
  299. *
  300. * (*) value not defined in all devices.
  301. * @retval State of Periphs (1 or 0).
  302. */
  303. __STATIC_INLINE uint32_t LL_AHB1_GRP1_IsEnabledClock(uint32_t Periphs)
  304. {
  305. return (READ_BIT(RCC->AHBENR, Periphs) == Periphs);
  306. }
  307. /**
  308. * @brief Disable AHB1 peripherals clock.
  309. * @rmtoll AHBENR CRCEN LL_AHB1_GRP1_DisableClock\n
  310. * AHBENR DMA1EN LL_AHB1_GRP1_DisableClock\n
  311. * AHBENR DMA2EN LL_AHB1_GRP1_DisableClock\n
  312. * AHBENR ETHMACEN LL_AHB1_GRP1_DisableClock\n
  313. * AHBENR ETHMACRXEN LL_AHB1_GRP1_DisableClock\n
  314. * AHBENR ETHMACTXEN LL_AHB1_GRP1_DisableClock\n
  315. * AHBENR FLITFEN LL_AHB1_GRP1_DisableClock\n
  316. * AHBENR FSMCEN LL_AHB1_GRP1_DisableClock\n
  317. * AHBENR OTGFSEN LL_AHB1_GRP1_DisableClock\n
  318. * AHBENR SDIOEN LL_AHB1_GRP1_DisableClock\n
  319. * AHBENR SRAMEN LL_AHB1_GRP1_DisableClock
  320. * @param Periphs This parameter can be a combination of the following values:
  321. * @arg @ref LL_AHB1_GRP1_PERIPH_CRC
  322. * @arg @ref LL_AHB1_GRP1_PERIPH_DMA1
  323. * @arg @ref LL_AHB1_GRP1_PERIPH_DMA2 (*)
  324. * @arg @ref LL_AHB1_GRP1_PERIPH_ETHMAC (*)
  325. * @arg @ref LL_AHB1_GRP1_PERIPH_ETHMACRX (*)
  326. * @arg @ref LL_AHB1_GRP1_PERIPH_ETHMACTX (*)
  327. * @arg @ref LL_AHB1_GRP1_PERIPH_FLASH
  328. * @arg @ref LL_AHB1_GRP1_PERIPH_FSMC (*)
  329. * @arg @ref LL_AHB1_GRP1_PERIPH_OTGFS (*)
  330. * @arg @ref LL_AHB1_GRP1_PERIPH_SDIO (*)
  331. * @arg @ref LL_AHB1_GRP1_PERIPH_SRAM
  332. *
  333. * (*) value not defined in all devices.
  334. * @retval None
  335. */
  336. __STATIC_INLINE void LL_AHB1_GRP1_DisableClock(uint32_t Periphs)
  337. {
  338. CLEAR_BIT(RCC->AHBENR, Periphs);
  339. }
  340. #if defined(RCC_AHBRSTR_SUPPORT)
  341. /**
  342. * @brief Force AHB1 peripherals reset.
  343. * @rmtoll AHBRSTR ETHMACRST LL_AHB1_GRP1_ForceReset\n
  344. * AHBRSTR OTGFSRST LL_AHB1_GRP1_ForceReset
  345. * @param Periphs This parameter can be a combination of the following values:
  346. * @arg @ref LL_AHB1_GRP1_PERIPH_ALL
  347. * @arg @ref LL_AHB1_GRP1_PERIPH_ETHMAC (*)
  348. * @arg @ref LL_AHB1_GRP1_PERIPH_OTGFS (*)
  349. *
  350. * (*) value not defined in all devices.
  351. * @retval None
  352. */
  353. __STATIC_INLINE void LL_AHB1_GRP1_ForceReset(uint32_t Periphs)
  354. {
  355. SET_BIT(RCC->AHBRSTR, Periphs);
  356. }
  357. /**
  358. * @brief Release AHB1 peripherals reset.
  359. * @rmtoll AHBRSTR ETHMACRST LL_AHB1_GRP1_ReleaseReset\n
  360. * AHBRSTR OTGFSRST LL_AHB1_GRP1_ReleaseReset
  361. * @param Periphs This parameter can be a combination of the following values:
  362. * @arg @ref LL_AHB1_GRP1_PERIPH_ALL
  363. * @arg @ref LL_AHB1_GRP1_PERIPH_ETHMAC (*)
  364. * @arg @ref LL_AHB1_GRP1_PERIPH_OTGFS (*)
  365. *
  366. * (*) value not defined in all devices.
  367. * @retval None
  368. */
  369. __STATIC_INLINE void LL_AHB1_GRP1_ReleaseReset(uint32_t Periphs)
  370. {
  371. CLEAR_BIT(RCC->AHBRSTR, Periphs);
  372. }
  373. #endif /* RCC_AHBRSTR_SUPPORT */
  374. /**
  375. * @}
  376. */
  377. /** @defgroup BUS_LL_EF_APB1 APB1
  378. * @{
  379. */
  380. /**
  381. * @brief Enable APB1 peripherals clock.
  382. * @rmtoll APB1ENR BKPEN LL_APB1_GRP1_EnableClock\n
  383. * APB1ENR CAN1EN LL_APB1_GRP1_EnableClock\n
  384. * APB1ENR CAN2EN LL_APB1_GRP1_EnableClock\n
  385. * APB1ENR CECEN LL_APB1_GRP1_EnableClock\n
  386. * APB1ENR DACEN LL_APB1_GRP1_EnableClock\n
  387. * APB1ENR I2C1EN LL_APB1_GRP1_EnableClock\n
  388. * APB1ENR I2C2EN LL_APB1_GRP1_EnableClock\n
  389. * APB1ENR PWREN LL_APB1_GRP1_EnableClock\n
  390. * APB1ENR SPI2EN LL_APB1_GRP1_EnableClock\n
  391. * APB1ENR SPI3EN LL_APB1_GRP1_EnableClock\n
  392. * APB1ENR TIM12EN LL_APB1_GRP1_EnableClock\n
  393. * APB1ENR TIM13EN LL_APB1_GRP1_EnableClock\n
  394. * APB1ENR TIM14EN LL_APB1_GRP1_EnableClock\n
  395. * APB1ENR TIM2EN LL_APB1_GRP1_EnableClock\n
  396. * APB1ENR TIM3EN LL_APB1_GRP1_EnableClock\n
  397. * APB1ENR TIM4EN LL_APB1_GRP1_EnableClock\n
  398. * APB1ENR TIM5EN LL_APB1_GRP1_EnableClock\n
  399. * APB1ENR TIM6EN LL_APB1_GRP1_EnableClock\n
  400. * APB1ENR TIM7EN LL_APB1_GRP1_EnableClock\n
  401. * APB1ENR UART4EN LL_APB1_GRP1_EnableClock\n
  402. * APB1ENR UART5EN LL_APB1_GRP1_EnableClock\n
  403. * APB1ENR USART2EN LL_APB1_GRP1_EnableClock\n
  404. * APB1ENR USART3EN LL_APB1_GRP1_EnableClock\n
  405. * APB1ENR USBEN LL_APB1_GRP1_EnableClock\n
  406. * APB1ENR WWDGEN LL_APB1_GRP1_EnableClock
  407. * @param Periphs This parameter can be a combination of the following values:
  408. * @arg @ref LL_APB1_GRP1_PERIPH_BKP
  409. * @arg @ref LL_APB1_GRP1_PERIPH_CAN1 (*)
  410. * @arg @ref LL_APB1_GRP1_PERIPH_CAN2 (*)
  411. * @arg @ref LL_APB1_GRP1_PERIPH_CEC (*)
  412. * @arg @ref LL_APB1_GRP1_PERIPH_DAC1 (*)
  413. * @arg @ref LL_APB1_GRP1_PERIPH_I2C1
  414. * @arg @ref LL_APB1_GRP1_PERIPH_I2C2 (*)
  415. * @arg @ref LL_APB1_GRP1_PERIPH_PWR
  416. * @arg @ref LL_APB1_GRP1_PERIPH_SPI2 (*)
  417. * @arg @ref LL_APB1_GRP1_PERIPH_SPI3 (*)
  418. * @arg @ref LL_APB1_GRP1_PERIPH_TIM12 (*)
  419. * @arg @ref LL_APB1_GRP1_PERIPH_TIM13 (*)
  420. * @arg @ref LL_APB1_GRP1_PERIPH_TIM14 (*)
  421. * @arg @ref LL_APB1_GRP1_PERIPH_TIM2
  422. * @arg @ref LL_APB1_GRP1_PERIPH_TIM3
  423. * @arg @ref LL_APB1_GRP1_PERIPH_TIM4 (*)
  424. * @arg @ref LL_APB1_GRP1_PERIPH_TIM5 (*)
  425. * @arg @ref LL_APB1_GRP1_PERIPH_TIM6 (*)
  426. * @arg @ref LL_APB1_GRP1_PERIPH_TIM7 (*)
  427. * @arg @ref LL_APB1_GRP1_PERIPH_UART4 (*)
  428. * @arg @ref LL_APB1_GRP1_PERIPH_UART5 (*)
  429. * @arg @ref LL_APB1_GRP1_PERIPH_USART2
  430. * @arg @ref LL_APB1_GRP1_PERIPH_USART3 (*)
  431. * @arg @ref LL_APB1_GRP1_PERIPH_USB (*)
  432. * @arg @ref LL_APB1_GRP1_PERIPH_WWDG
  433. *
  434. * (*) value not defined in all devices.
  435. * @retval None
  436. */
  437. __STATIC_INLINE void LL_APB1_GRP1_EnableClock(uint32_t Periphs)
  438. {
  439. __IO uint32_t tmpreg;
  440. SET_BIT(RCC->APB1ENR, Periphs);
  441. /* Delay after an RCC peripheral clock enabling */
  442. tmpreg = READ_BIT(RCC->APB1ENR, Periphs);
  443. (void)tmpreg;
  444. }
  445. /**
  446. * @brief Check if APB1 peripheral clock is enabled or not
  447. * @rmtoll APB1ENR BKPEN LL_APB1_GRP1_IsEnabledClock\n
  448. * APB1ENR CAN1EN LL_APB1_GRP1_IsEnabledClock\n
  449. * APB1ENR CAN2EN LL_APB1_GRP1_IsEnabledClock\n
  450. * APB1ENR CECEN LL_APB1_GRP1_IsEnabledClock\n
  451. * APB1ENR DACEN LL_APB1_GRP1_IsEnabledClock\n
  452. * APB1ENR I2C1EN LL_APB1_GRP1_IsEnabledClock\n
  453. * APB1ENR I2C2EN LL_APB1_GRP1_IsEnabledClock\n
  454. * APB1ENR PWREN LL_APB1_GRP1_IsEnabledClock\n
  455. * APB1ENR SPI2EN LL_APB1_GRP1_IsEnabledClock\n
  456. * APB1ENR SPI3EN LL_APB1_GRP1_IsEnabledClock\n
  457. * APB1ENR TIM12EN LL_APB1_GRP1_IsEnabledClock\n
  458. * APB1ENR TIM13EN LL_APB1_GRP1_IsEnabledClock\n
  459. * APB1ENR TIM14EN LL_APB1_GRP1_IsEnabledClock\n
  460. * APB1ENR TIM2EN LL_APB1_GRP1_IsEnabledClock\n
  461. * APB1ENR TIM3EN LL_APB1_GRP1_IsEnabledClock\n
  462. * APB1ENR TIM4EN LL_APB1_GRP1_IsEnabledClock\n
  463. * APB1ENR TIM5EN LL_APB1_GRP1_IsEnabledClock\n
  464. * APB1ENR TIM6EN LL_APB1_GRP1_IsEnabledClock\n
  465. * APB1ENR TIM7EN LL_APB1_GRP1_IsEnabledClock\n
  466. * APB1ENR UART4EN LL_APB1_GRP1_IsEnabledClock\n
  467. * APB1ENR UART5EN LL_APB1_GRP1_IsEnabledClock\n
  468. * APB1ENR USART2EN LL_APB1_GRP1_IsEnabledClock\n
  469. * APB1ENR USART3EN LL_APB1_GRP1_IsEnabledClock\n
  470. * APB1ENR USBEN LL_APB1_GRP1_IsEnabledClock\n
  471. * APB1ENR WWDGEN LL_APB1_GRP1_IsEnabledClock
  472. * @param Periphs This parameter can be a combination of the following values:
  473. * @arg @ref LL_APB1_GRP1_PERIPH_BKP
  474. * @arg @ref LL_APB1_GRP1_PERIPH_CAN1 (*)
  475. * @arg @ref LL_APB1_GRP1_PERIPH_CAN2 (*)
  476. * @arg @ref LL_APB1_GRP1_PERIPH_CEC (*)
  477. * @arg @ref LL_APB1_GRP1_PERIPH_DAC1 (*)
  478. * @arg @ref LL_APB1_GRP1_PERIPH_I2C1
  479. * @arg @ref LL_APB1_GRP1_PERIPH_I2C2 (*)
  480. * @arg @ref LL_APB1_GRP1_PERIPH_PWR
  481. * @arg @ref LL_APB1_GRP1_PERIPH_SPI2 (*)
  482. * @arg @ref LL_APB1_GRP1_PERIPH_SPI3 (*)
  483. * @arg @ref LL_APB1_GRP1_PERIPH_TIM12 (*)
  484. * @arg @ref LL_APB1_GRP1_PERIPH_TIM13 (*)
  485. * @arg @ref LL_APB1_GRP1_PERIPH_TIM14 (*)
  486. * @arg @ref LL_APB1_GRP1_PERIPH_TIM2
  487. * @arg @ref LL_APB1_GRP1_PERIPH_TIM3
  488. * @arg @ref LL_APB1_GRP1_PERIPH_TIM4 (*)
  489. * @arg @ref LL_APB1_GRP1_PERIPH_TIM5 (*)
  490. * @arg @ref LL_APB1_GRP1_PERIPH_TIM6 (*)
  491. * @arg @ref LL_APB1_GRP1_PERIPH_TIM7 (*)
  492. * @arg @ref LL_APB1_GRP1_PERIPH_UART4 (*)
  493. * @arg @ref LL_APB1_GRP1_PERIPH_UART5 (*)
  494. * @arg @ref LL_APB1_GRP1_PERIPH_USART2
  495. * @arg @ref LL_APB1_GRP1_PERIPH_USART3 (*)
  496. * @arg @ref LL_APB1_GRP1_PERIPH_USB (*)
  497. * @arg @ref LL_APB1_GRP1_PERIPH_WWDG
  498. *
  499. * (*) value not defined in all devices.
  500. * @retval State of Periphs (1 or 0).
  501. */
  502. __STATIC_INLINE uint32_t LL_APB1_GRP1_IsEnabledClock(uint32_t Periphs)
  503. {
  504. return (READ_BIT(RCC->APB1ENR, Periphs) == Periphs);
  505. }
  506. /**
  507. * @brief Disable APB1 peripherals clock.
  508. * @rmtoll APB1ENR BKPEN LL_APB1_GRP1_DisableClock\n
  509. * APB1ENR CAN1EN LL_APB1_GRP1_DisableClock\n
  510. * APB1ENR CAN2EN LL_APB1_GRP1_DisableClock\n
  511. * APB1ENR CECEN LL_APB1_GRP1_DisableClock\n
  512. * APB1ENR DACEN LL_APB1_GRP1_DisableClock\n
  513. * APB1ENR I2C1EN LL_APB1_GRP1_DisableClock\n
  514. * APB1ENR I2C2EN LL_APB1_GRP1_DisableClock\n
  515. * APB1ENR PWREN LL_APB1_GRP1_DisableClock\n
  516. * APB1ENR SPI2EN LL_APB1_GRP1_DisableClock\n
  517. * APB1ENR SPI3EN LL_APB1_GRP1_DisableClock\n
  518. * APB1ENR TIM12EN LL_APB1_GRP1_DisableClock\n
  519. * APB1ENR TIM13EN LL_APB1_GRP1_DisableClock\n
  520. * APB1ENR TIM14EN LL_APB1_GRP1_DisableClock\n
  521. * APB1ENR TIM2EN LL_APB1_GRP1_DisableClock\n
  522. * APB1ENR TIM3EN LL_APB1_GRP1_DisableClock\n
  523. * APB1ENR TIM4EN LL_APB1_GRP1_DisableClock\n
  524. * APB1ENR TIM5EN LL_APB1_GRP1_DisableClock\n
  525. * APB1ENR TIM6EN LL_APB1_GRP1_DisableClock\n
  526. * APB1ENR TIM7EN LL_APB1_GRP1_DisableClock\n
  527. * APB1ENR UART4EN LL_APB1_GRP1_DisableClock\n
  528. * APB1ENR UART5EN LL_APB1_GRP1_DisableClock\n
  529. * APB1ENR USART2EN LL_APB1_GRP1_DisableClock\n
  530. * APB1ENR USART3EN LL_APB1_GRP1_DisableClock\n
  531. * APB1ENR USBEN LL_APB1_GRP1_DisableClock\n
  532. * APB1ENR WWDGEN LL_APB1_GRP1_DisableClock
  533. * @param Periphs This parameter can be a combination of the following values:
  534. * @arg @ref LL_APB1_GRP1_PERIPH_BKP
  535. * @arg @ref LL_APB1_GRP1_PERIPH_CAN1 (*)
  536. * @arg @ref LL_APB1_GRP1_PERIPH_CAN2 (*)
  537. * @arg @ref LL_APB1_GRP1_PERIPH_CEC (*)
  538. * @arg @ref LL_APB1_GRP1_PERIPH_DAC1 (*)
  539. * @arg @ref LL_APB1_GRP1_PERIPH_I2C1
  540. * @arg @ref LL_APB1_GRP1_PERIPH_I2C2 (*)
  541. * @arg @ref LL_APB1_GRP1_PERIPH_PWR
  542. * @arg @ref LL_APB1_GRP1_PERIPH_SPI2 (*)
  543. * @arg @ref LL_APB1_GRP1_PERIPH_SPI3 (*)
  544. * @arg @ref LL_APB1_GRP1_PERIPH_TIM12 (*)
  545. * @arg @ref LL_APB1_GRP1_PERIPH_TIM13 (*)
  546. * @arg @ref LL_APB1_GRP1_PERIPH_TIM14 (*)
  547. * @arg @ref LL_APB1_GRP1_PERIPH_TIM2
  548. * @arg @ref LL_APB1_GRP1_PERIPH_TIM3
  549. * @arg @ref LL_APB1_GRP1_PERIPH_TIM4 (*)
  550. * @arg @ref LL_APB1_GRP1_PERIPH_TIM5 (*)
  551. * @arg @ref LL_APB1_GRP1_PERIPH_TIM6 (*)
  552. * @arg @ref LL_APB1_GRP1_PERIPH_TIM7 (*)
  553. * @arg @ref LL_APB1_GRP1_PERIPH_UART4 (*)
  554. * @arg @ref LL_APB1_GRP1_PERIPH_UART5 (*)
  555. * @arg @ref LL_APB1_GRP1_PERIPH_USART2
  556. * @arg @ref LL_APB1_GRP1_PERIPH_USART3 (*)
  557. * @arg @ref LL_APB1_GRP1_PERIPH_USB (*)
  558. * @arg @ref LL_APB1_GRP1_PERIPH_WWDG
  559. *
  560. * (*) value not defined in all devices.
  561. * @retval None
  562. */
  563. __STATIC_INLINE void LL_APB1_GRP1_DisableClock(uint32_t Periphs)
  564. {
  565. CLEAR_BIT(RCC->APB1ENR, Periphs);
  566. }
  567. /**
  568. * @brief Force APB1 peripherals reset.
  569. * @rmtoll APB1RSTR BKPRST LL_APB1_GRP1_ForceReset\n
  570. * APB1RSTR CAN1RST LL_APB1_GRP1_ForceReset\n
  571. * APB1RSTR CAN2RST LL_APB1_GRP1_ForceReset\n
  572. * APB1RSTR CECRST LL_APB1_GRP1_ForceReset\n
  573. * APB1RSTR DACRST LL_APB1_GRP1_ForceReset\n
  574. * APB1RSTR I2C1RST LL_APB1_GRP1_ForceReset\n
  575. * APB1RSTR I2C2RST LL_APB1_GRP1_ForceReset\n
  576. * APB1RSTR PWRRST LL_APB1_GRP1_ForceReset\n
  577. * APB1RSTR SPI2RST LL_APB1_GRP1_ForceReset\n
  578. * APB1RSTR SPI3RST LL_APB1_GRP1_ForceReset\n
  579. * APB1RSTR TIM12RST LL_APB1_GRP1_ForceReset\n
  580. * APB1RSTR TIM13RST LL_APB1_GRP1_ForceReset\n
  581. * APB1RSTR TIM14RST LL_APB1_GRP1_ForceReset\n
  582. * APB1RSTR TIM2RST LL_APB1_GRP1_ForceReset\n
  583. * APB1RSTR TIM3RST LL_APB1_GRP1_ForceReset\n
  584. * APB1RSTR TIM4RST LL_APB1_GRP1_ForceReset\n
  585. * APB1RSTR TIM5RST LL_APB1_GRP1_ForceReset\n
  586. * APB1RSTR TIM6RST LL_APB1_GRP1_ForceReset\n
  587. * APB1RSTR TIM7RST LL_APB1_GRP1_ForceReset\n
  588. * APB1RSTR UART4RST LL_APB1_GRP1_ForceReset\n
  589. * APB1RSTR UART5RST LL_APB1_GRP1_ForceReset\n
  590. * APB1RSTR USART2RST LL_APB1_GRP1_ForceReset\n
  591. * APB1RSTR USART3RST LL_APB1_GRP1_ForceReset\n
  592. * APB1RSTR USBRST LL_APB1_GRP1_ForceReset\n
  593. * APB1RSTR WWDGRST LL_APB1_GRP1_ForceReset
  594. * @param Periphs This parameter can be a combination of the following values:
  595. * @arg @ref LL_APB1_GRP1_PERIPH_ALL
  596. * @arg @ref LL_APB1_GRP1_PERIPH_BKP
  597. * @arg @ref LL_APB1_GRP1_PERIPH_CAN1 (*)
  598. * @arg @ref LL_APB1_GRP1_PERIPH_CAN2 (*)
  599. * @arg @ref LL_APB1_GRP1_PERIPH_CEC (*)
  600. * @arg @ref LL_APB1_GRP1_PERIPH_DAC1 (*)
  601. * @arg @ref LL_APB1_GRP1_PERIPH_I2C1
  602. * @arg @ref LL_APB1_GRP1_PERIPH_I2C2 (*)
  603. * @arg @ref LL_APB1_GRP1_PERIPH_PWR
  604. * @arg @ref LL_APB1_GRP1_PERIPH_SPI2 (*)
  605. * @arg @ref LL_APB1_GRP1_PERIPH_SPI3 (*)
  606. * @arg @ref LL_APB1_GRP1_PERIPH_TIM12 (*)
  607. * @arg @ref LL_APB1_GRP1_PERIPH_TIM13 (*)
  608. * @arg @ref LL_APB1_GRP1_PERIPH_TIM14 (*)
  609. * @arg @ref LL_APB1_GRP1_PERIPH_TIM2
  610. * @arg @ref LL_APB1_GRP1_PERIPH_TIM3
  611. * @arg @ref LL_APB1_GRP1_PERIPH_TIM4 (*)
  612. * @arg @ref LL_APB1_GRP1_PERIPH_TIM5 (*)
  613. * @arg @ref LL_APB1_GRP1_PERIPH_TIM6 (*)
  614. * @arg @ref LL_APB1_GRP1_PERIPH_TIM7 (*)
  615. * @arg @ref LL_APB1_GRP1_PERIPH_UART4 (*)
  616. * @arg @ref LL_APB1_GRP1_PERIPH_UART5 (*)
  617. * @arg @ref LL_APB1_GRP1_PERIPH_USART2
  618. * @arg @ref LL_APB1_GRP1_PERIPH_USART3 (*)
  619. * @arg @ref LL_APB1_GRP1_PERIPH_USB (*)
  620. * @arg @ref LL_APB1_GRP1_PERIPH_WWDG
  621. *
  622. * (*) value not defined in all devices.
  623. * @retval None
  624. */
  625. __STATIC_INLINE void LL_APB1_GRP1_ForceReset(uint32_t Periphs)
  626. {
  627. SET_BIT(RCC->APB1RSTR, Periphs);
  628. }
  629. /**
  630. * @brief Release APB1 peripherals reset.
  631. * @rmtoll APB1RSTR BKPRST LL_APB1_GRP1_ReleaseReset\n
  632. * APB1RSTR CAN1RST LL_APB1_GRP1_ReleaseReset\n
  633. * APB1RSTR CAN2RST LL_APB1_GRP1_ReleaseReset\n
  634. * APB1RSTR CECRST LL_APB1_GRP1_ReleaseReset\n
  635. * APB1RSTR DACRST LL_APB1_GRP1_ReleaseReset\n
  636. * APB1RSTR I2C1RST LL_APB1_GRP1_ReleaseReset\n
  637. * APB1RSTR I2C2RST LL_APB1_GRP1_ReleaseReset\n
  638. * APB1RSTR PWRRST LL_APB1_GRP1_ReleaseReset\n
  639. * APB1RSTR SPI2RST LL_APB1_GRP1_ReleaseReset\n
  640. * APB1RSTR SPI3RST LL_APB1_GRP1_ReleaseReset\n
  641. * APB1RSTR TIM12RST LL_APB1_GRP1_ReleaseReset\n
  642. * APB1RSTR TIM13RST LL_APB1_GRP1_ReleaseReset\n
  643. * APB1RSTR TIM14RST LL_APB1_GRP1_ReleaseReset\n
  644. * APB1RSTR TIM2RST LL_APB1_GRP1_ReleaseReset\n
  645. * APB1RSTR TIM3RST LL_APB1_GRP1_ReleaseReset\n
  646. * APB1RSTR TIM4RST LL_APB1_GRP1_ReleaseReset\n
  647. * APB1RSTR TIM5RST LL_APB1_GRP1_ReleaseReset\n
  648. * APB1RSTR TIM6RST LL_APB1_GRP1_ReleaseReset\n
  649. * APB1RSTR TIM7RST LL_APB1_GRP1_ReleaseReset\n
  650. * APB1RSTR UART4RST LL_APB1_GRP1_ReleaseReset\n
  651. * APB1RSTR UART5RST LL_APB1_GRP1_ReleaseReset\n
  652. * APB1RSTR USART2RST LL_APB1_GRP1_ReleaseReset\n
  653. * APB1RSTR USART3RST LL_APB1_GRP1_ReleaseReset\n
  654. * APB1RSTR USBRST LL_APB1_GRP1_ReleaseReset\n
  655. * APB1RSTR WWDGRST LL_APB1_GRP1_ReleaseReset
  656. * @param Periphs This parameter can be a combination of the following values:
  657. * @arg @ref LL_APB1_GRP1_PERIPH_ALL
  658. * @arg @ref LL_APB1_GRP1_PERIPH_BKP
  659. * @arg @ref LL_APB1_GRP1_PERIPH_CAN1 (*)
  660. * @arg @ref LL_APB1_GRP1_PERIPH_CAN2 (*)
  661. * @arg @ref LL_APB1_GRP1_PERIPH_CEC (*)
  662. * @arg @ref LL_APB1_GRP1_PERIPH_DAC1 (*)
  663. * @arg @ref LL_APB1_GRP1_PERIPH_I2C1
  664. * @arg @ref LL_APB1_GRP1_PERIPH_I2C2 (*)
  665. * @arg @ref LL_APB1_GRP1_PERIPH_PWR
  666. * @arg @ref LL_APB1_GRP1_PERIPH_SPI2 (*)
  667. * @arg @ref LL_APB1_GRP1_PERIPH_SPI3 (*)
  668. * @arg @ref LL_APB1_GRP1_PERIPH_TIM12 (*)
  669. * @arg @ref LL_APB1_GRP1_PERIPH_TIM13 (*)
  670. * @arg @ref LL_APB1_GRP1_PERIPH_TIM14 (*)
  671. * @arg @ref LL_APB1_GRP1_PERIPH_TIM2
  672. * @arg @ref LL_APB1_GRP1_PERIPH_TIM3
  673. * @arg @ref LL_APB1_GRP1_PERIPH_TIM4 (*)
  674. * @arg @ref LL_APB1_GRP1_PERIPH_TIM5 (*)
  675. * @arg @ref LL_APB1_GRP1_PERIPH_TIM6 (*)
  676. * @arg @ref LL_APB1_GRP1_PERIPH_TIM7 (*)
  677. * @arg @ref LL_APB1_GRP1_PERIPH_UART4 (*)
  678. * @arg @ref LL_APB1_GRP1_PERIPH_UART5 (*)
  679. * @arg @ref LL_APB1_GRP1_PERIPH_USART2
  680. * @arg @ref LL_APB1_GRP1_PERIPH_USART3 (*)
  681. * @arg @ref LL_APB1_GRP1_PERIPH_USB (*)
  682. * @arg @ref LL_APB1_GRP1_PERIPH_WWDG
  683. *
  684. * (*) value not defined in all devices.
  685. * @retval None
  686. */
  687. __STATIC_INLINE void LL_APB1_GRP1_ReleaseReset(uint32_t Periphs)
  688. {
  689. CLEAR_BIT(RCC->APB1RSTR, Periphs);
  690. }
  691. /**
  692. * @}
  693. */
  694. /** @defgroup BUS_LL_EF_APB2 APB2
  695. * @{
  696. */
  697. /**
  698. * @brief Enable APB2 peripherals clock.
  699. * @rmtoll APB2ENR ADC1EN LL_APB2_GRP1_EnableClock\n
  700. * APB2ENR ADC2EN LL_APB2_GRP1_EnableClock\n
  701. * APB2ENR ADC3EN LL_APB2_GRP1_EnableClock\n
  702. * APB2ENR AFIOEN LL_APB2_GRP1_EnableClock\n
  703. * APB2ENR IOPAEN LL_APB2_GRP1_EnableClock\n
  704. * APB2ENR IOPBEN LL_APB2_GRP1_EnableClock\n
  705. * APB2ENR IOPCEN LL_APB2_GRP1_EnableClock\n
  706. * APB2ENR IOPDEN LL_APB2_GRP1_EnableClock\n
  707. * APB2ENR IOPEEN LL_APB2_GRP1_EnableClock\n
  708. * APB2ENR IOPFEN LL_APB2_GRP1_EnableClock\n
  709. * APB2ENR IOPGEN LL_APB2_GRP1_EnableClock\n
  710. * APB2ENR SPI1EN LL_APB2_GRP1_EnableClock\n
  711. * APB2ENR TIM10EN LL_APB2_GRP1_EnableClock\n
  712. * APB2ENR TIM11EN LL_APB2_GRP1_EnableClock\n
  713. * APB2ENR TIM15EN LL_APB2_GRP1_EnableClock\n
  714. * APB2ENR TIM16EN LL_APB2_GRP1_EnableClock\n
  715. * APB2ENR TIM17EN LL_APB2_GRP1_EnableClock\n
  716. * APB2ENR TIM1EN LL_APB2_GRP1_EnableClock\n
  717. * APB2ENR TIM8EN LL_APB2_GRP1_EnableClock\n
  718. * APB2ENR TIM9EN LL_APB2_GRP1_EnableClock\n
  719. * APB2ENR USART1EN LL_APB2_GRP1_EnableClock
  720. * @param Periphs This parameter can be a combination of the following values:
  721. * @arg @ref LL_APB2_GRP1_PERIPH_ADC1
  722. * @arg @ref LL_APB2_GRP1_PERIPH_ADC2 (*)
  723. * @arg @ref LL_APB2_GRP1_PERIPH_ADC3 (*)
  724. * @arg @ref LL_APB2_GRP1_PERIPH_AFIO
  725. * @arg @ref LL_APB2_GRP1_PERIPH_GPIOA
  726. * @arg @ref LL_APB2_GRP1_PERIPH_GPIOB
  727. * @arg @ref LL_APB2_GRP1_PERIPH_GPIOC
  728. * @arg @ref LL_APB2_GRP1_PERIPH_GPIOD
  729. * @arg @ref LL_APB2_GRP1_PERIPH_GPIOE (*)
  730. * @arg @ref LL_APB2_GRP1_PERIPH_GPIOF (*)
  731. * @arg @ref LL_APB2_GRP1_PERIPH_GPIOG (*)
  732. * @arg @ref LL_APB2_GRP1_PERIPH_SPI1
  733. * @arg @ref LL_APB2_GRP1_PERIPH_TIM10 (*)
  734. * @arg @ref LL_APB2_GRP1_PERIPH_TIM11 (*)
  735. * @arg @ref LL_APB2_GRP1_PERIPH_TIM15 (*)
  736. * @arg @ref LL_APB2_GRP1_PERIPH_TIM16 (*)
  737. * @arg @ref LL_APB2_GRP1_PERIPH_TIM17 (*)
  738. * @arg @ref LL_APB2_GRP1_PERIPH_TIM1
  739. * @arg @ref LL_APB2_GRP1_PERIPH_TIM8 (*)
  740. * @arg @ref LL_APB2_GRP1_PERIPH_TIM9 (*)
  741. * @arg @ref LL_APB2_GRP1_PERIPH_USART1
  742. *
  743. * (*) value not defined in all devices.
  744. * @retval None
  745. */
  746. __STATIC_INLINE void LL_APB2_GRP1_EnableClock(uint32_t Periphs)
  747. {
  748. __IO uint32_t tmpreg;
  749. SET_BIT(RCC->APB2ENR, Periphs);
  750. /* Delay after an RCC peripheral clock enabling */
  751. tmpreg = READ_BIT(RCC->APB2ENR, Periphs);
  752. (void)tmpreg;
  753. }
  754. /**
  755. * @brief Check if APB2 peripheral clock is enabled or not
  756. * @rmtoll APB2ENR ADC1EN LL_APB2_GRP1_IsEnabledClock\n
  757. * APB2ENR ADC2EN LL_APB2_GRP1_IsEnabledClock\n
  758. * APB2ENR ADC3EN LL_APB2_GRP1_IsEnabledClock\n
  759. * APB2ENR AFIOEN LL_APB2_GRP1_IsEnabledClock\n
  760. * APB2ENR IOPAEN LL_APB2_GRP1_IsEnabledClock\n
  761. * APB2ENR IOPBEN LL_APB2_GRP1_IsEnabledClock\n
  762. * APB2ENR IOPCEN LL_APB2_GRP1_IsEnabledClock\n
  763. * APB2ENR IOPDEN LL_APB2_GRP1_IsEnabledClock\n
  764. * APB2ENR IOPEEN LL_APB2_GRP1_IsEnabledClock\n
  765. * APB2ENR IOPFEN LL_APB2_GRP1_IsEnabledClock\n
  766. * APB2ENR IOPGEN LL_APB2_GRP1_IsEnabledClock\n
  767. * APB2ENR SPI1EN LL_APB2_GRP1_IsEnabledClock\n
  768. * APB2ENR TIM10EN LL_APB2_GRP1_IsEnabledClock\n
  769. * APB2ENR TIM11EN LL_APB2_GRP1_IsEnabledClock\n
  770. * APB2ENR TIM15EN LL_APB2_GRP1_IsEnabledClock\n
  771. * APB2ENR TIM16EN LL_APB2_GRP1_IsEnabledClock\n
  772. * APB2ENR TIM17EN LL_APB2_GRP1_IsEnabledClock\n
  773. * APB2ENR TIM1EN LL_APB2_GRP1_IsEnabledClock\n
  774. * APB2ENR TIM8EN LL_APB2_GRP1_IsEnabledClock\n
  775. * APB2ENR TIM9EN LL_APB2_GRP1_IsEnabledClock\n
  776. * APB2ENR USART1EN LL_APB2_GRP1_IsEnabledClock
  777. * @param Periphs This parameter can be a combination of the following values:
  778. * @arg @ref LL_APB2_GRP1_PERIPH_ADC1
  779. * @arg @ref LL_APB2_GRP1_PERIPH_ADC2 (*)
  780. * @arg @ref LL_APB2_GRP1_PERIPH_ADC3 (*)
  781. * @arg @ref LL_APB2_GRP1_PERIPH_AFIO
  782. * @arg @ref LL_APB2_GRP1_PERIPH_GPIOA
  783. * @arg @ref LL_APB2_GRP1_PERIPH_GPIOB
  784. * @arg @ref LL_APB2_GRP1_PERIPH_GPIOC
  785. * @arg @ref LL_APB2_GRP1_PERIPH_GPIOD
  786. * @arg @ref LL_APB2_GRP1_PERIPH_GPIOE (*)
  787. * @arg @ref LL_APB2_GRP1_PERIPH_GPIOF (*)
  788. * @arg @ref LL_APB2_GRP1_PERIPH_GPIOG (*)
  789. * @arg @ref LL_APB2_GRP1_PERIPH_SPI1
  790. * @arg @ref LL_APB2_GRP1_PERIPH_TIM10 (*)
  791. * @arg @ref LL_APB2_GRP1_PERIPH_TIM11 (*)
  792. * @arg @ref LL_APB2_GRP1_PERIPH_TIM15 (*)
  793. * @arg @ref LL_APB2_GRP1_PERIPH_TIM16 (*)
  794. * @arg @ref LL_APB2_GRP1_PERIPH_TIM17 (*)
  795. * @arg @ref LL_APB2_GRP1_PERIPH_TIM1
  796. * @arg @ref LL_APB2_GRP1_PERIPH_TIM8 (*)
  797. * @arg @ref LL_APB2_GRP1_PERIPH_TIM9 (*)
  798. * @arg @ref LL_APB2_GRP1_PERIPH_USART1
  799. *
  800. * (*) value not defined in all devices.
  801. * @retval State of Periphs (1 or 0).
  802. */
  803. __STATIC_INLINE uint32_t LL_APB2_GRP1_IsEnabledClock(uint32_t Periphs)
  804. {
  805. return (READ_BIT(RCC->APB2ENR, Periphs) == Periphs);
  806. }
  807. /**
  808. * @brief Disable APB2 peripherals clock.
  809. * @rmtoll APB2ENR ADC1EN LL_APB2_GRP1_DisableClock\n
  810. * APB2ENR ADC2EN LL_APB2_GRP1_DisableClock\n
  811. * APB2ENR ADC3EN LL_APB2_GRP1_DisableClock\n
  812. * APB2ENR AFIOEN LL_APB2_GRP1_DisableClock\n
  813. * APB2ENR IOPAEN LL_APB2_GRP1_DisableClock\n
  814. * APB2ENR IOPBEN LL_APB2_GRP1_DisableClock\n
  815. * APB2ENR IOPCEN LL_APB2_GRP1_DisableClock\n
  816. * APB2ENR IOPDEN LL_APB2_GRP1_DisableClock\n
  817. * APB2ENR IOPEEN LL_APB2_GRP1_DisableClock\n
  818. * APB2ENR IOPFEN LL_APB2_GRP1_DisableClock\n
  819. * APB2ENR IOPGEN LL_APB2_GRP1_DisableClock\n
  820. * APB2ENR SPI1EN LL_APB2_GRP1_DisableClock\n
  821. * APB2ENR TIM10EN LL_APB2_GRP1_DisableClock\n
  822. * APB2ENR TIM11EN LL_APB2_GRP1_DisableClock\n
  823. * APB2ENR TIM15EN LL_APB2_GRP1_DisableClock\n
  824. * APB2ENR TIM16EN LL_APB2_GRP1_DisableClock\n
  825. * APB2ENR TIM17EN LL_APB2_GRP1_DisableClock\n
  826. * APB2ENR TIM1EN LL_APB2_GRP1_DisableClock\n
  827. * APB2ENR TIM8EN LL_APB2_GRP1_DisableClock\n
  828. * APB2ENR TIM9EN LL_APB2_GRP1_DisableClock\n
  829. * APB2ENR USART1EN LL_APB2_GRP1_DisableClock
  830. * @param Periphs This parameter can be a combination of the following values:
  831. * @arg @ref LL_APB2_GRP1_PERIPH_ADC1
  832. * @arg @ref LL_APB2_GRP1_PERIPH_ADC2 (*)
  833. * @arg @ref LL_APB2_GRP1_PERIPH_ADC3 (*)
  834. * @arg @ref LL_APB2_GRP1_PERIPH_AFIO
  835. * @arg @ref LL_APB2_GRP1_PERIPH_GPIOA
  836. * @arg @ref LL_APB2_GRP1_PERIPH_GPIOB
  837. * @arg @ref LL_APB2_GRP1_PERIPH_GPIOC
  838. * @arg @ref LL_APB2_GRP1_PERIPH_GPIOD
  839. * @arg @ref LL_APB2_GRP1_PERIPH_GPIOE (*)
  840. * @arg @ref LL_APB2_GRP1_PERIPH_GPIOF (*)
  841. * @arg @ref LL_APB2_GRP1_PERIPH_GPIOG (*)
  842. * @arg @ref LL_APB2_GRP1_PERIPH_SPI1
  843. * @arg @ref LL_APB2_GRP1_PERIPH_TIM10 (*)
  844. * @arg @ref LL_APB2_GRP1_PERIPH_TIM11 (*)
  845. * @arg @ref LL_APB2_GRP1_PERIPH_TIM15 (*)
  846. * @arg @ref LL_APB2_GRP1_PERIPH_TIM16 (*)
  847. * @arg @ref LL_APB2_GRP1_PERIPH_TIM17 (*)
  848. * @arg @ref LL_APB2_GRP1_PERIPH_TIM1
  849. * @arg @ref LL_APB2_GRP1_PERIPH_TIM8 (*)
  850. * @arg @ref LL_APB2_GRP1_PERIPH_TIM9 (*)
  851. * @arg @ref LL_APB2_GRP1_PERIPH_USART1
  852. *
  853. * (*) value not defined in all devices.
  854. * @retval None
  855. */
  856. __STATIC_INLINE void LL_APB2_GRP1_DisableClock(uint32_t Periphs)
  857. {
  858. CLEAR_BIT(RCC->APB2ENR, Periphs);
  859. }
  860. /**
  861. * @brief Force APB2 peripherals reset.
  862. * @rmtoll APB2RSTR ADC1RST LL_APB2_GRP1_ForceReset\n
  863. * APB2RSTR ADC2RST LL_APB2_GRP1_ForceReset\n
  864. * APB2RSTR ADC3RST LL_APB2_GRP1_ForceReset\n
  865. * APB2RSTR AFIORST LL_APB2_GRP1_ForceReset\n
  866. * APB2RSTR IOPARST LL_APB2_GRP1_ForceReset\n
  867. * APB2RSTR IOPBRST LL_APB2_GRP1_ForceReset\n
  868. * APB2RSTR IOPCRST LL_APB2_GRP1_ForceReset\n
  869. * APB2RSTR IOPDRST LL_APB2_GRP1_ForceReset\n
  870. * APB2RSTR IOPERST LL_APB2_GRP1_ForceReset\n
  871. * APB2RSTR IOPFRST LL_APB2_GRP1_ForceReset\n
  872. * APB2RSTR IOPGRST LL_APB2_GRP1_ForceReset\n
  873. * APB2RSTR SPI1RST LL_APB2_GRP1_ForceReset\n
  874. * APB2RSTR TIM10RST LL_APB2_GRP1_ForceReset\n
  875. * APB2RSTR TIM11RST LL_APB2_GRP1_ForceReset\n
  876. * APB2RSTR TIM15RST LL_APB2_GRP1_ForceReset\n
  877. * APB2RSTR TIM16RST LL_APB2_GRP1_ForceReset\n
  878. * APB2RSTR TIM17RST LL_APB2_GRP1_ForceReset\n
  879. * APB2RSTR TIM1RST LL_APB2_GRP1_ForceReset\n
  880. * APB2RSTR TIM8RST LL_APB2_GRP1_ForceReset\n
  881. * APB2RSTR TIM9RST LL_APB2_GRP1_ForceReset\n
  882. * APB2RSTR USART1RST LL_APB2_GRP1_ForceReset
  883. * @param Periphs This parameter can be a combination of the following values:
  884. * @arg @ref LL_APB2_GRP1_PERIPH_ALL
  885. * @arg @ref LL_APB2_GRP1_PERIPH_ADC1
  886. * @arg @ref LL_APB2_GRP1_PERIPH_ADC2 (*)
  887. * @arg @ref LL_APB2_GRP1_PERIPH_ADC3 (*)
  888. * @arg @ref LL_APB2_GRP1_PERIPH_AFIO
  889. * @arg @ref LL_APB2_GRP1_PERIPH_GPIOA
  890. * @arg @ref LL_APB2_GRP1_PERIPH_GPIOB
  891. * @arg @ref LL_APB2_GRP1_PERIPH_GPIOC
  892. * @arg @ref LL_APB2_GRP1_PERIPH_GPIOD
  893. * @arg @ref LL_APB2_GRP1_PERIPH_GPIOE (*)
  894. * @arg @ref LL_APB2_GRP1_PERIPH_GPIOF (*)
  895. * @arg @ref LL_APB2_GRP1_PERIPH_GPIOG (*)
  896. * @arg @ref LL_APB2_GRP1_PERIPH_SPI1
  897. * @arg @ref LL_APB2_GRP1_PERIPH_TIM10 (*)
  898. * @arg @ref LL_APB2_GRP1_PERIPH_TIM11 (*)
  899. * @arg @ref LL_APB2_GRP1_PERIPH_TIM15 (*)
  900. * @arg @ref LL_APB2_GRP1_PERIPH_TIM16 (*)
  901. * @arg @ref LL_APB2_GRP1_PERIPH_TIM17 (*)
  902. * @arg @ref LL_APB2_GRP1_PERIPH_TIM1
  903. * @arg @ref LL_APB2_GRP1_PERIPH_TIM8 (*)
  904. * @arg @ref LL_APB2_GRP1_PERIPH_TIM9 (*)
  905. * @arg @ref LL_APB2_GRP1_PERIPH_USART1
  906. *
  907. * (*) value not defined in all devices.
  908. * @retval None
  909. */
  910. __STATIC_INLINE void LL_APB2_GRP1_ForceReset(uint32_t Periphs)
  911. {
  912. SET_BIT(RCC->APB2RSTR, Periphs);
  913. }
  914. /**
  915. * @brief Release APB2 peripherals reset.
  916. * @rmtoll APB2RSTR ADC1RST LL_APB2_GRP1_ReleaseReset\n
  917. * APB2RSTR ADC2RST LL_APB2_GRP1_ReleaseReset\n
  918. * APB2RSTR ADC3RST LL_APB2_GRP1_ReleaseReset\n
  919. * APB2RSTR AFIORST LL_APB2_GRP1_ReleaseReset\n
  920. * APB2RSTR IOPARST LL_APB2_GRP1_ReleaseReset\n
  921. * APB2RSTR IOPBRST LL_APB2_GRP1_ReleaseReset\n
  922. * APB2RSTR IOPCRST LL_APB2_GRP1_ReleaseReset\n
  923. * APB2RSTR IOPDRST LL_APB2_GRP1_ReleaseReset\n
  924. * APB2RSTR IOPERST LL_APB2_GRP1_ReleaseReset\n
  925. * APB2RSTR IOPFRST LL_APB2_GRP1_ReleaseReset\n
  926. * APB2RSTR IOPGRST LL_APB2_GRP1_ReleaseReset\n
  927. * APB2RSTR SPI1RST LL_APB2_GRP1_ReleaseReset\n
  928. * APB2RSTR TIM10RST LL_APB2_GRP1_ReleaseReset\n
  929. * APB2RSTR TIM11RST LL_APB2_GRP1_ReleaseReset\n
  930. * APB2RSTR TIM15RST LL_APB2_GRP1_ReleaseReset\n
  931. * APB2RSTR TIM16RST LL_APB2_GRP1_ReleaseReset\n
  932. * APB2RSTR TIM17RST LL_APB2_GRP1_ReleaseReset\n
  933. * APB2RSTR TIM1RST LL_APB2_GRP1_ReleaseReset\n
  934. * APB2RSTR TIM8RST LL_APB2_GRP1_ReleaseReset\n
  935. * APB2RSTR TIM9RST LL_APB2_GRP1_ReleaseReset\n
  936. * APB2RSTR USART1RST LL_APB2_GRP1_ReleaseReset
  937. * @param Periphs This parameter can be a combination of the following values:
  938. * @arg @ref LL_APB2_GRP1_PERIPH_ALL
  939. * @arg @ref LL_APB2_GRP1_PERIPH_ADC1
  940. * @arg @ref LL_APB2_GRP1_PERIPH_ADC2 (*)
  941. * @arg @ref LL_APB2_GRP1_PERIPH_ADC3 (*)
  942. * @arg @ref LL_APB2_GRP1_PERIPH_AFIO
  943. * @arg @ref LL_APB2_GRP1_PERIPH_GPIOA
  944. * @arg @ref LL_APB2_GRP1_PERIPH_GPIOB
  945. * @arg @ref LL_APB2_GRP1_PERIPH_GPIOC
  946. * @arg @ref LL_APB2_GRP1_PERIPH_GPIOD
  947. * @arg @ref LL_APB2_GRP1_PERIPH_GPIOE (*)
  948. * @arg @ref LL_APB2_GRP1_PERIPH_GPIOF (*)
  949. * @arg @ref LL_APB2_GRP1_PERIPH_GPIOG (*)
  950. * @arg @ref LL_APB2_GRP1_PERIPH_SPI1
  951. * @arg @ref LL_APB2_GRP1_PERIPH_TIM10 (*)
  952. * @arg @ref LL_APB2_GRP1_PERIPH_TIM11 (*)
  953. * @arg @ref LL_APB2_GRP1_PERIPH_TIM15 (*)
  954. * @arg @ref LL_APB2_GRP1_PERIPH_TIM16 (*)
  955. * @arg @ref LL_APB2_GRP1_PERIPH_TIM17 (*)
  956. * @arg @ref LL_APB2_GRP1_PERIPH_TIM1
  957. * @arg @ref LL_APB2_GRP1_PERIPH_TIM8 (*)
  958. * @arg @ref LL_APB2_GRP1_PERIPH_TIM9 (*)
  959. * @arg @ref LL_APB2_GRP1_PERIPH_USART1
  960. *
  961. * (*) value not defined in all devices.
  962. * @retval None
  963. */
  964. __STATIC_INLINE void LL_APB2_GRP1_ReleaseReset(uint32_t Periphs)
  965. {
  966. CLEAR_BIT(RCC->APB2RSTR, Periphs);
  967. }
  968. /**
  969. * @}
  970. */
  971. /**
  972. * @}
  973. */
  974. /**
  975. * @}
  976. */
  977. #endif /* defined(RCC) */
  978. /**
  979. * @}
  980. */
  981. #ifdef __cplusplus
  982. }
  983. #endif
  984. #endif /* __STM32F1xx_LL_BUS_H */
  985. /************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/