apm32f4xx_rcm.h 18 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485
  1. /*!
  2. * @file apm32f4xx_rcm.h
  3. *
  4. * @brief This file contains all the functions prototypes for the RCM firmware library
  5. *
  6. * @version V1.0.2
  7. *
  8. * @date 2022-06-23
  9. *
  10. * @attention
  11. *
  12. * Copyright (C) 2021-2022 Geehy Semiconductor
  13. *
  14. * You may not use this file except in compliance with the
  15. * GEEHY COPYRIGHT NOTICE (GEEHY SOFTWARE PACKAGE LICENSE).
  16. *
  17. * The program is only for reference, which is distributed in the hope
  18. * that it will be usefull and instructional for customers to develop
  19. * their software. Unless required by applicable law or agreed to in
  20. * writing, the program is distributed on an "AS IS" BASIS, WITHOUT
  21. * ANY WARRANTY OR CONDITIONS OF ANY KIND, either express or implied.
  22. * See the GEEHY SOFTWARE PACKAGE LICENSE for the governing permissions
  23. * and limitations under the License.
  24. */
  25. /* Define to prevent recursive inclusion */
  26. #ifndef __APM32F4XX_RCM_H
  27. #define __APM32F4XX_RCM_H
  28. #ifdef __cplusplus
  29. extern "C" {
  30. #endif
  31. /* Includes */
  32. #include "apm32f4xx.h"
  33. /** @addtogroup APM32F4xx_StdPeriphDriver
  34. @{
  35. */
  36. /** @addtogroup RCM_Driver
  37. @{
  38. */
  39. /** @defgroup RCM_Enumerations
  40. @{
  41. */
  42. /**
  43. * @brief HSE state
  44. */
  45. typedef enum
  46. {
  47. RCM_HSE_CLOSE, /*!< Turn off the HSE oscillator */
  48. RCM_HSE_OPEN, /*!< Turn on the HSE oscillator */
  49. RCM_HSE_BYPASS /*!< HSE oscillator bypassed with external clock */
  50. } RCM_HSE_T;
  51. /**
  52. * @brief LSE State
  53. */
  54. typedef enum
  55. {
  56. RCM_LSE_CLOSE, /*!< Close the LSE */
  57. RCM_LSE_OPEN, /*!< Open the LSE */
  58. RCM_LSE_BYPASS /*!< LSE bypass */
  59. } RCM_LSE_T;
  60. /**
  61. * @brief RCM PLL source select
  62. */
  63. typedef enum
  64. {
  65. RCM_PLLSEL_HSI, /*!< HSI oscillator clock selected as PLL clock entry */
  66. RCM_PLLSEL_HSE /*!< HSE oscillator clock selected as PLL clock entry */
  67. } RCM_PLLSEL_T;
  68. /**
  69. * @brief RCM PLL System Division
  70. */
  71. typedef enum
  72. {
  73. RCM_PLL_SYS_DIV_2, /*!< System clock Division factor is 2 */
  74. RCM_PLL_SYS_DIV_4, /*!< System clock Division factor is 4 */
  75. RCM_PLL_SYS_DIV_6, /*!< System clock Division factor is 6 */
  76. RCM_PLL_SYS_DIV_8 /*!< System clock Division factor is 8 */
  77. } RCM_PLL_SYS_DIV_T;
  78. /**
  79. * @brief RCM MCO1 Source Selece
  80. */
  81. typedef enum
  82. {
  83. RCM_MCO1_SEL_HSICLK, /*!< HSI clock selected as MCO1 source */
  84. RCM_MCO1_SEL_LSECLK, /*!< LSE clock selected as MCO1 source */
  85. RCM_MCO1_SEL_HSECLK, /*!< HSE clock selected as MCO1 source */
  86. RCM_MCO1_SEL_PLLCLK /*!< Main PLL clock selected as MCO1 source */
  87. } RCM_MCO1_SEL_T;
  88. /**
  89. * @brief RCM MCO1 Div
  90. */
  91. typedef enum
  92. {
  93. RCM_MCO1_DIV_1, /*!< No division applied to MCO1 clock */
  94. RCM_MCO1_DIV_2 = 4, /*!< Division by 2 applied to MCO1 clock */
  95. RCM_MCO1_DIV_3, /*!< Division by 3 applied to MCO1 clock */
  96. RCM_MCO1_DIV_4, /*!< Division by 4 applied to MCO1 clock */
  97. RCM_MCO1_DIV_5 /*!< Division by 5 applied to MCO1 clock */
  98. } RCM_MCO1_DIV_T;
  99. /**
  100. * @brief RCM MCO2 Source Selece
  101. */
  102. typedef enum
  103. {
  104. RCM_MCO2_SEL_SYSCLK, /*!< SYS clock selected as MCO2 source */
  105. RCM_MCO2_SEL_PLL2CLK, /*!< PLL2 clock selected as MCO2 source */
  106. RCM_MCO2_SEL_HSECLK, /*!< HSE clock selected as MCO2 source */
  107. RCM_MCO2_SEL_PLLCLK /*!< PLL clock selected as MCO2 source */
  108. } RCM_MCO2_SEL_T;
  109. /**
  110. * @brief RCM MCO2 Division
  111. */
  112. typedef enum
  113. {
  114. RCM_MCO2_DIV_1, /*!< No division applied to MCO2 clock */
  115. RCM_MCO2_DIV_2 = 4, /*!< Division by 2 applied to MCO2 clock */
  116. RCM_MCO2_DIV_3, /*!< Division by 3 applied to MCO2 clock */
  117. RCM_MCO2_DIV_4, /*!< Division by 4 applied to MCO2 clock */
  118. RCM_MCO2_DIV_5 /*!< Division by 5 applied to MCO2 clock */
  119. } RCM_MCO2_DIV_T;
  120. /**
  121. * @brief System clock select
  122. */
  123. typedef enum
  124. {
  125. RCM_SYSCLK_SEL_HSI, /*!< HSI is selected as system clock source */
  126. RCM_SYSCLK_SEL_HSE, /*!< HSE is selected as system clock source */
  127. RCM_SYSCLK_SEL_PLL /*!< PLL is selected as system clock source */
  128. } RCM_SYSCLK_SEL_T;
  129. /**
  130. * @brief AHB divider Number
  131. */
  132. typedef enum
  133. {
  134. RCM_AHB_DIV_1 = 7, /*!< HCLK = SYSCLK */
  135. RCM_AHB_DIV_2, /*!< HCLK = SYSCLK / 2 */
  136. RCM_AHB_DIV_4, /*!< HCLK = SYSCLK / 4 */
  137. RCM_AHB_DIV_8, /*!< HCLK = SYSCLK / 8 */
  138. RCM_AHB_DIV_16, /*!< HCLK = SYSCLK / 16 */
  139. RCM_AHB_DIV_64, /*!< HCLK = SYSCLK / 64 */
  140. RCM_AHB_DIV_128, /*!< HCLK = SYSCLK / 128 */
  141. RCM_AHB_DIV_256, /*!< HCLK = SYSCLK / 256 */
  142. RCM_AHB_DIV_512 /*!< HCLK = SYSCLK / 512 */
  143. } RCM_AHB_DIV_T;
  144. /**
  145. * @brief APB divider Number
  146. */
  147. typedef enum
  148. {
  149. RCM_APB_DIV_1 = 3, /*!< PCLK1 = HCLK */
  150. RCM_APB_DIV_2, /*!< PCLK1 = HCLK / 2 */
  151. RCM_APB_DIV_4, /*!< PCLK1 = HCLK / 4 */
  152. RCM_APB_DIV_8, /*!< PCLK1 = HCLK / 8 */
  153. RCM_APB_DIV_16 /*!< PCLK1 = HCLK / 16 */
  154. } RCM_APB_DIV_T;
  155. /**
  156. * @brief SDRAM divider Number
  157. */
  158. typedef enum
  159. {
  160. RCM_SDRAM_DIV_1 = 0, /*!< SDRAM clock = DMC clock */
  161. RCM_SDRAM_DIV_2 = 1, /*!< SDRAM clock = DMC clock / 2 */
  162. RCM_SDRAM_DIV_4 = 2, /*!< SDRAM clock = DMC clock / 4 */
  163. } RCM_SDRAM_DIV_T;
  164. /**
  165. * @brief RTC clock select
  166. */
  167. typedef enum
  168. {
  169. RCM_RTCCLK_LSE, /*!< RTCCLK = LSE clock */
  170. RCM_RTCCLK_LSI, /*!< RTCCLK = LSI clock */
  171. RCM_RTCCLK_HSE_DIV2, /*!< RTCCLK = HSE / 2 */
  172. RCM_RTCCLK_HSE_DIV3, /*!< RTCCLK = HSE / 3 */
  173. RCM_RTCCLK_HSE_DIV4, /*!< RTCCLK = HSE / 4 */
  174. RCM_RTCCLK_HSE_DIV5, /*!< RTCCLK = HSE / 5 */
  175. RCM_RTCCLK_HSE_DIV6, /*!< RTCCLK = HSE / 6 */
  176. RCM_RTCCLK_HSE_DIV7, /*!< RTCCLK = HSE / 7 */
  177. RCM_RTCCLK_HSE_DIV8, /*!< RTCCLK = HSE / 8 */
  178. RCM_RTCCLK_HSE_DIV9, /*!< RTCCLK = HSE / 9 */
  179. RCM_RTCCLK_HSE_DIV10, /*!< RTCCLK = HSE / 10 */
  180. RCM_RTCCLK_HSE_DIV11, /*!< RTCCLK = HSE / 11 */
  181. RCM_RTCCLK_HSE_DIV12, /*!< RTCCLK = HSE / 12 */
  182. RCM_RTCCLK_HSE_DIV13, /*!< RTCCLK = HSE / 13 */
  183. RCM_RTCCLK_HSE_DIV14, /*!< RTCCLK = HSE / 14 */
  184. RCM_RTCCLK_HSE_DIV15, /*!< RTCCLK = HSE / 15 */
  185. RCM_RTCCLK_HSE_DIV16, /*!< RTCCLK = HSE / 16 */
  186. RCM_RTCCLK_HSE_DIV17, /*!< RTCCLK = HSE / 17 */
  187. RCM_RTCCLK_HSE_DIV18, /*!< RTCCLK = HSE / 18 */
  188. RCM_RTCCLK_HSE_DIV19, /*!< RTCCLK = HSE / 19 */
  189. RCM_RTCCLK_HSE_DIV20, /*!< RTCCLK = HSE / 20 */
  190. RCM_RTCCLK_HSE_DIV21, /*!< RTCCLK = HSE / 21 */
  191. RCM_RTCCLK_HSE_DIV22, /*!< RTCCLK = HSE / 22 */
  192. RCM_RTCCLK_HSE_DIV23, /*!< RTCCLK = HSE / 23 */
  193. RCM_RTCCLK_HSE_DIV24, /*!< RTCCLK = HSE / 24 */
  194. RCM_RTCCLK_HSE_DIV25, /*!< RTCCLK = HSE / 25 */
  195. RCM_RTCCLK_HSE_DIV26, /*!< RTCCLK = HSE / 26 */
  196. RCM_RTCCLK_HSE_DIV27, /*!< RTCCLK = HSE / 27 */
  197. RCM_RTCCLK_HSE_DIV28, /*!< RTCCLK = HSE / 28 */
  198. RCM_RTCCLK_HSE_DIV29, /*!< RTCCLK = HSE / 29 */
  199. RCM_RTCCLK_HSE_DIV30, /*!< RTCCLK = HSE / 30 */
  200. RCM_RTCCLK_HSE_DIV31 /*!< RTCCLK = HSE / 31 */
  201. } RCM_RTCCLK_T;
  202. /**
  203. * @brief I2S Clock Source
  204. */
  205. typedef enum
  206. {
  207. RCM_I2S_CLK_PLLI2S, /*!< PLLI2S is selected as I2S clock source */
  208. RCM_I2S_CLK_EXT /*!< EXT is selected as I2S clock source */
  209. } RCM_I2S_CLK_T;
  210. /**
  211. * @brief RCM Interrupt Source
  212. */
  213. typedef enum
  214. {
  215. RCM_INT_LSIRDY = BIT0, /*!< LSI ready interrupt */
  216. RCM_INT_LSERDY = BIT1, /*!< LSE ready interrupt */
  217. RCM_INT_HSIRDY = BIT2, /*!< HSI ready interrupt */
  218. RCM_INT_HSERDY = BIT3, /*!< HSE ready interrupt */
  219. RCM_INT_PLL1RDY = BIT4, /*!< PLL1 ready interrupt */
  220. RCM_INT_PLL2RDY = BIT5, /*!< PLL2 ready interrupt */
  221. RCM_INT_CSS = BIT7 /*!< Clock security system interrupt */
  222. } RCM_INT_T;
  223. /**
  224. * @brief AHB1 peripheral
  225. */
  226. typedef enum
  227. {
  228. RCM_AHB1_PERIPH_GPIOA = BIT0, /*!< Select GPIOA clock */
  229. RCM_AHB1_PERIPH_GPIOB = BIT1, /*!< Select GPIOB clock */
  230. RCM_AHB1_PERIPH_GPIOC = BIT2, /*!< Select GPIOC clock */
  231. RCM_AHB1_PERIPH_GPIOD = BIT3, /*!< Select GPIOD clock */
  232. RCM_AHB1_PERIPH_GPIOE = BIT4, /*!< Select GPIOE clock */
  233. RCM_AHB1_PERIPH_GPIOF = BIT5, /*!< Select GPIOF clock */
  234. RCM_AHB1_PERIPH_GPIOG = BIT6, /*!< Select GPIOG clock */
  235. RCM_AHB1_PERIPH_GPIOH = BIT7, /*!< Select GPIOH clock */
  236. RCM_AHB1_PERIPH_GPIOI = BIT8, /*!< Select GPIOI clock */
  237. RCM_AHB1_PERIPH_GPIOJ = BIT9, /*!< Select GPIOJ clock */
  238. RCM_AHB1_PERIPH_GPIOK = BIT10, /*!< Select GPIOK clock */
  239. RCM_AHB1_PERIPH_CRC = BIT12, /*!< Select CRC clock */
  240. RCM_AHB1_PERIPH_FLITF = BIT15, /*!< Select FLITF clock */
  241. RCM_AHB1_PERIPH_SRAM1 = BIT16, /*!< Select SRAM1 clock */
  242. RCM_AHB1_PERIPH_SRAM2 = BIT17, /*!< Select SRAM2 clock */
  243. RCM_AHB1_PERIPH_BKPSRAM = BIT18, /*!< Select BKPSRAM clock */
  244. RCM_AHB1_PERIPH_SRAM3 = BIT19, /*!< Select SRAM3 clock */
  245. RCM_AHB1_PERIPH_CCMDATARAMEN = BIT20, /*!< Select CCMDATARAMEN clock */
  246. RCM_AHB1_PERIPH_DMA1 = BIT21, /*!< Select DMA1 clock */
  247. RCM_AHB1_PERIPH_DMA2 = BIT22, /*!< Select DMA2 clock */
  248. RCM_AHB1_PERIPH_ETH_MAC = BIT25, /*!< Select ETH MAC clock */
  249. RCM_AHB1_PERIPH_ETH_MAC_Tx = BIT26, /*!< Select ETH MAC TX clock */
  250. RCM_AHB1_PERIPH_ETH_MAC_Rx = BIT27, /*!< Select ETH MAC RX clock */
  251. RCM_AHB1_PERIPH_ETH_MAC_PTP = BIT28, /*!< Select ETH MAC PTP clock */
  252. RCM_AHB1_PERIPH_OTG_HS = BIT29, /*!< Select OTG HS clock */
  253. RCM_AHB1_PERIPH_OTG_HS_ULPI = BIT30 /*!< Select OTG HS ULPI clock */
  254. } RCM_AHB1_PERIPH_T;
  255. /**
  256. * @brief AHB2 peripheral
  257. */
  258. typedef enum
  259. {
  260. RCM_AHB2_PERIPH_DCI = BIT0, /*!< Select DCI clock */
  261. RCM_AHB2_PERIPH_FPU = BIT1, /*!< Select FPU clock */
  262. RCM_AHB2_PERIPH_BN = BIT2, /*!< Select BN clock */
  263. RCM_AHB2_PERIPH_SM = BIT3, /*!< Select SM clock */
  264. RCM_AHB2_PERIPH_CRYP = BIT4, /*!< Select CRYP clock */
  265. RCM_AHB2_PERIPH_HASH = BIT5, /*!< Select HASH clock */
  266. RCM_AHB2_PERIPH_RNG = BIT6, /*!< Select RNG clock */
  267. RCM_AHB2_PERIPH_OTG_FS = BIT7 /*!< Select OTG FS clock */
  268. } RCM_AHB2_PERIPH_T;
  269. /**
  270. * @brief APB1 peripheral
  271. */
  272. typedef enum
  273. {
  274. RCM_APB1_PERIPH_TMR2 = BIT0, /*!< Select TMR2 clock */
  275. RCM_APB1_PERIPH_TMR3 = BIT1, /*!< Select TMR3 clock */
  276. RCM_APB1_PERIPH_TMR4 = BIT2, /*!< Select TMR4 clock */
  277. RCM_APB1_PERIPH_TMR5 = BIT3, /*!< Select TMR5 clock */
  278. RCM_APB1_PERIPH_TMR6 = BIT4, /*!< Select TMR6 clock */
  279. RCM_APB1_PERIPH_TMR7 = BIT5, /*!< Select TMR7 clock */
  280. RCM_APB1_PERIPH_TMR12 = BIT6, /*!< Select TMR12 clock */
  281. RCM_APB1_PERIPH_TMR13 = BIT7, /*!< Select TMR13 clock */
  282. RCM_APB1_PERIPH_TMR14 = BIT8, /*!< Select TMR14 clock */
  283. RCM_APB1_PERIPH_WWDT = BIT11, /*!< Select WWDT clock */
  284. RCM_APB1_PERIPH_SPI2 = BIT14, /*!< Select SPI2 clock */
  285. RCM_APB1_PERIPH_SPI3 = BIT15, /*!< Select SPI3 clock */
  286. RCM_APB1_PERIPH_USART2 = BIT17, /*!< Select USART2 clock */
  287. RCM_APB1_PERIPH_USART3 = BIT18, /*!< Select USART3 clock */
  288. RCM_APB1_PERIPH_UART4 = BIT19, /*!< Select UART4 clock */
  289. RCM_APB1_PERIPH_UART5 = BIT20, /*!< Select UART5 clock */
  290. RCM_APB1_PERIPH_I2C1 = BIT21, /*!< Select I2C1 clock */
  291. RCM_APB1_PERIPH_I2C2 = BIT22, /*!< Select I2C2 clock */
  292. RCM_APB1_PERIPH_I2C3 = BIT23, /*!< Select I2C3 clock */
  293. RCM_APB1_PERIPH_CAN1 = BIT25, /*!< Select CAN1 clock */
  294. RCM_APB1_PERIPH_CAN2 = BIT26, /*!< Select CAN2 clock */
  295. RCM_APB1_PERIPH_PMU = BIT28, /*!< Select PMU clock */
  296. RCM_APB1_PERIPH_DAC = BIT29, /*!< Select DAC clock */
  297. RCM_APB1_PERIPH_UART7 = BIT30, /*!< Select UART7 clock */
  298. RCM_APB1_PERIPH_UART8 = (int32_t)BIT31 /*!< Select UART8 clock */
  299. } RCM_APB1_PERIPH_T;
  300. /**
  301. * @brief APB2 peripheral
  302. */
  303. typedef enum
  304. {
  305. RCM_APB2_PERIPH_TMR1 = BIT0, /*!< Select TMR1 clock */
  306. RCM_APB2_PERIPH_TMR8 = BIT1, /*!< Select TMR8 clock */
  307. RCM_APB2_PERIPH_USART1 = BIT4, /*!< Select USART1 clock */
  308. RCM_APB2_PERIPH_USART6 = BIT5, /*!< Select USART6 clock */
  309. RCM_APB2_PERIPH_ADC = BIT8, /*!< Select ADC clock */
  310. RCM_APB2_PERIPH_ADC1 = BIT8, /*!< Select ADC1 clock */
  311. RCM_APB2_PERIPH_ADC2 = BIT9, /*!< Select ADC2 clock */
  312. RCM_APB2_PERIPH_ADC3 = BIT10, /*!< Select ADC3 clock */
  313. RCM_APB2_PERIPH_SDIO = BIT11, /*!< Select SDIO clock */
  314. RCM_APB2_PERIPH_SPI1 = BIT12, /*!< Select SPI1 clock */
  315. RCM_APB2_PERIPH_SPI4 = BIT13, /*!< Select SPI4 clock */
  316. RCM_APB2_PERIPH_SYSCFG = BIT14, /*!< Select SYSCFG clock */
  317. RCM_APB2_PERIPH_EXTIT = BIT15, /*!< Select EXTIT clock */
  318. RCM_APB2_PERIPH_TMR9 = BIT16, /*!< Select TMR9 clock */
  319. RCM_APB2_PERIPH_TMR10 = BIT17, /*!< Select TMR10 clock */
  320. RCM_APB2_PERIPH_TMR11 = BIT18, /*!< Select TMR11 clock */
  321. RCM_APB2_PERIPH_SPI5 = BIT20, /*!< Select SPI5 clock */
  322. RCM_APB2_PERIPH_SPI6 = BIT21, /*!< Select SPI6 clock */
  323. RCM_APB2_PERIPH_SAI1 = BIT22, /*!< Select SAI1 clock */
  324. RCM_APB2_PERIPH_LTDC = BIT26 /*!< Select LTDC clock */
  325. } RCM_APB2_PERIPH_T;
  326. /**
  327. * @brief RCM FLAG define
  328. */
  329. typedef enum
  330. {
  331. RCM_FLAG_HSIRDY = 0x001, /*!< HSI Ready Flag */
  332. RCM_FLAG_HSERDY = 0x011, /*!< HSE Ready Flag */
  333. RCM_FLAG_PLL1RDY = 0x019, /*!< PLL1 Ready Flag */
  334. RCM_FLAG_PLL2RDY = 0x01B, /*!< PLL2 Ready Flag */
  335. RCM_FLAG_LSERDY = 0x101, /*!< LSE Ready Flag */
  336. RCM_FLAG_LSIRDY = 0x201, /*!< LSI Ready Flag */
  337. RCM_FLAG_BORRST = 0x219, /*!< POR/PDR or BOR reset Flag */
  338. RCM_FLAG_PINRST = 0x21A, /*!< PIN reset flag */
  339. RCM_FLAG_PORRST = 0x21B, /*!< POR/PDR reset flag */
  340. RCM_FLAG_SWRST = 0x21C, /*!< Software reset flag */
  341. RCM_FLAG_IWDTRST = 0x21D, /*!< Independent watchdog reset flag */
  342. RCM_FLAG_WWDTRST = 0x21E, /*!< Window watchdog reset flag */
  343. RCM_FLAG_LPRRST = 0x21F, /*!< Low-power reset flag */
  344. } RCM_FLAG_T;
  345. /**@} end of group RCM_Enumerations*/
  346. /** @defgroup RCM_Functions
  347. @{
  348. */
  349. /* Function description */
  350. /* RCM Reset */
  351. void RCM_Reset(void);
  352. /* HSE clock */
  353. void RCM_ConfigHSE(RCM_HSE_T state);
  354. uint8_t RCM_WaitHSEReady(void);
  355. /* HSI clock */
  356. void RCM_ConfigHSITrim(uint8_t HSITrim);
  357. void RCM_EnableHSI(void);
  358. void RCM_DisableHSI(void);
  359. /* LSE and LSI clock */
  360. void RCM_ConfigLSE(RCM_LSE_T state);
  361. void RCM_EnableLSI(void);
  362. void RCM_DisableLSI(void);
  363. /* PLL clock */
  364. void RCM_ConfigPLL1(uint32_t pllSelect, uint32_t inputDiv, uint32_t vcoMul,
  365. RCM_PLL_SYS_DIV_T sysDiv, uint32_t appDiv);
  366. void RCM_EnablePLL1(void);
  367. void RCM_DisablePLL1(void);
  368. void RCM_ConfigPLL2(uint32_t i2sVcoMul, uint32_t i2sDiv);
  369. void RCM_EnablePLL2(void);
  370. void RCM_DisablePLL2(void);
  371. /* Clock Security System */
  372. void RCM_EnableCSS(void);
  373. void RCM_DisableCSS(void);
  374. void RCM_ConfigMCO1(RCM_MCO1_SEL_T mco1Select, RCM_MCO1_DIV_T mco1Div);
  375. void RCM_ConfigMCO2(RCM_MCO2_SEL_T mco2Select, RCM_MCO2_DIV_T mco2Div);
  376. void RCM_ConfigSYSCLK(RCM_SYSCLK_SEL_T sysClkSelect);
  377. RCM_SYSCLK_SEL_T RCM_ReadSYSCLKSource(void);
  378. /* Config clock prescaler of AHB, APB1, APB2, SDRAM, USB and ADC */
  379. void RCM_ConfigAHB(RCM_AHB_DIV_T AHBDiv);
  380. void RCM_ConfigAPB1(RCM_APB_DIV_T APB1Div);
  381. void RCM_ConfigAPB2(RCM_APB_DIV_T APB2Div);
  382. void RCM_ConfigSDRAM(RCM_SDRAM_DIV_T SDRAMDiv);
  383. /* Reads the clock frequency */
  384. uint32_t RCM_ReadSYSCLKFreq(void);
  385. uint32_t RCM_ReadHCLKFreq(void);
  386. void RCM_ReadPCLKFreq(uint32_t* PCLK1, uint32_t* PCLK2);
  387. /* RTC clock */
  388. void RCM_ConfigRTCCLK(RCM_RTCCLK_T rtcClkSelect);
  389. void RCM_EnableRTCCLK(void);
  390. void RCM_DisableRTCCLK(void);
  391. /* Backup domain reset */
  392. void RCM_EnableBackupReset(void);
  393. void RCM_DisableBackupReset(void);
  394. void RCM_ConfigI2SCLK(RCM_I2S_CLK_T i2sClkSource);
  395. /* Enable or disable Periph Clock */
  396. void RCM_EnableAHB1PeriphClock(uint32_t AHB1Periph);
  397. void RCM_DisableAHB1PeriphClock(uint32_t AHB1Periph);
  398. void RCM_EnableAHB2PeriphClock(uint32_t AHB2Periph);
  399. void RCM_DisableAHB2PeriphClock(uint32_t AHB2Periph);
  400. void RCM_EnableAPB1PeriphClock(uint32_t APB1Periph);
  401. void RCM_DisableAPB1PeriphClock(uint32_t APB1Periph);
  402. void RCM_EnableAPB2PeriphClock(uint32_t APB2Periph);
  403. void RCM_DisableAPB2PeriphClock(uint32_t APB2Periph);
  404. /* Enable or disable Periph Reset */
  405. void RCM_EnableAHB1PeriphReset(uint32_t AHB1Periph);
  406. void RCM_DisableAHB1PeriphReset(uint32_t AHB1Periph);
  407. void RCM_EnableAHB2PeriphReset(uint32_t AHB2Periph);
  408. void RCM_DisableAHB2PeriphReset(uint32_t AHB2Periph);
  409. void RCM_EnableAPB1PeriphReset(uint32_t APB1Periph);
  410. void RCM_DisableAPB1PeriphReset(uint32_t APB1Periph);
  411. void RCM_EnableAPB2PeriphReset(uint32_t APB2Periph);
  412. void RCM_DisableAPB2PeriphReset(uint32_t APB2Periph);
  413. /* Enable or disable Periph clock during Low Power (Sleep) mode */
  414. void RCM_EnableAHB1PeriphClockLPMode(uint32_t AHB1Periph);
  415. void RCM_DisableAHB1PeriphClockLPMode(uint32_t AHB1Periph);
  416. void RCM_EnableAHB2PeriphClockLPMode(uint32_t AHB2Periph);
  417. void RCM_DisableAHB2PeriphClockLPMode(uint32_t AHB2Periph);
  418. void RCM_EnableAPB1PeriphClockLPMode(uint32_t APB1Periph);
  419. void RCM_DisableAPB1PeriphClockLPMode(uint32_t APB1Periph);
  420. void RCM_EnableAPB2PeriphClockLPMode(uint32_t APB2Periph);
  421. void RCM_DisableAPB2PeriphClockLPMode(uint32_t APB2Periph);
  422. /* Interrupts and flags */
  423. void RCM_EnableInterrupt(uint32_t interrupt);
  424. void RCM_DisableInterrupt(uint32_t interrupt);
  425. uint8_t RCM_ReadStatusFlag(RCM_FLAG_T flag);
  426. void RCM_ClearStatusFlag(void);
  427. uint8_t RCM_ReadIntFlag(RCM_INT_T flag);
  428. void RCM_ClearIntFlag(uint32_t flag);
  429. #ifdef __cplusplus
  430. }
  431. #endif
  432. #endif /* __APM32F4XX_RCM_H */
  433. /**@} end of group RCM_Enumerations */
  434. /**@} end of group RCM_Driver */
  435. /**@} end of group APM32F4xx_StdPeriphDriver */