你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

【经验分享】STM32 时钟相关函数和类型

[复制链接]
STMCU小助手 发布时间:2022-6-10 20:14
01. 概述
在 STM32F4 标准固件库里,时钟源的选择以及时钟使能等函数都是在 RCC 相关固件库文件 stm32f4xx_rcc.h 和 stm32f4xx_rcc.c 中声明和定义的。大家打开 stm32f4xx_rcc.h 文件可以看到文件开头有很多宏定义标识符,然后是一系列时钟配置和时钟使能函数申明。这些函数大致可以归结为三类,一类是外设时钟使能函数,一类是时钟源和分频因子配置函数,还有一类是外设复位函数。当然还有几个获取时钟源配置的函数。


02. 相关类型
RCC_ClocksTypeDef
  1. /* Exported types ------------------------------------------------------------*/
  2. typedef struct
  3. {
  4.   uint32_t SYSCLK_Frequency; /*!<  SYSCLK clock frequency expressed in Hz */
  5.   uint32_t HCLK_Frequency;   /*!<  HCLK clock frequency expressed in Hz   */
  6.   uint32_t PCLK1_Frequency;  /*!<  PCLK1 clock frequency expressed in Hz  */
  7.   uint32_t PCLK2_Frequency;  /*!<  PCLK2 clock frequency expressed in Hz  */
  8. }RCC_ClocksTypeDef;
复制代码

RCC_HSE_configuration
  1. /** @defgroup RCC_HSE_configuration
  2.   * @{
  3.   */
  4. #define RCC_HSE_OFF                      ((uint8_t)0x00)
  5. #define RCC_HSE_ON                       ((uint8_t)0x01)
  6. #define RCC_HSE_Bypass                   ((uint8_t)0x05)
  7. #define IS_RCC_HSE(HSE) (((HSE) == RCC_HSE_OFF) || ((HSE) == RCC_HSE_ON) || \
  8.                          ((HSE) == RCC_HSE_Bypass))
复制代码

RCC_LSE_Dual_Mode_Selection
  1. /** @defgroup RCC_LSE_Dual_Mode_Selection
  2.   * @{
  3.   */
  4. #define RCC_LSE_LOWPOWER_MODE           ((uint8_t)0x00)
  5. #define RCC_LSE_HIGHDRIVE_MODE          ((uint8_t)0x01)
  6. #define IS_RCC_LSE_MODE(MODE)           (((MODE) == RCC_LSE_LOWPOWER_MODE) || \
  7.                                          ((MODE) == RCC_LSE_HIGHDRIVE_MODE))
复制代码

RCC_PLLSAIDivR_Factor
  1. /** @defgroup RCC_PLLSAIDivR_Factor
  2.   * @{
  3.   */
  4. #define RCC_PLLSAIDivR_Div2                ((uint32_t)0x00000000)
  5. #define RCC_PLLSAIDivR_Div4                ((uint32_t)0x00010000)
  6. #define RCC_PLLSAIDivR_Div8                ((uint32_t)0x00020000)
  7. #define RCC_PLLSAIDivR_Div16               ((uint32_t)0x00030000)
  8. #define IS_RCC_PLLSAI_DIVR_VALUE(VALUE) (((VALUE) == RCC_PLLSAIDivR_Div2) ||\
  9.                                         ((VALUE) == RCC_PLLSAIDivR_Div4)  ||\
  10.                                         ((VALUE) == RCC_PLLSAIDivR_Div8)  ||\
  11.                                         ((VALUE) == RCC_PLLSAIDivR_Div16))
复制代码


RCC_PLL_Clock_Source

  1. /** @defgroup RCC_PLL_Clock_Source
  2.   * @{
  3.   */
  4. #define RCC_PLLSource_HSI                ((uint32_t)0x00000000)
  5. #define RCC_PLLSource_HSE                ((uint32_t)0x00400000)
  6. #define IS_RCC_PLL_SOURCE(SOURCE) (((SOURCE) == RCC_PLLSource_HSI) || \
  7.                                    ((SOURCE) == RCC_PLLSource_HSE))
  8. #define IS_RCC_PLLM_VALUE(VALUE) ((VALUE) <= 63)
  9. #define IS_RCC_PLLN_VALUE(VALUE) ((50 <= (VALUE)) && ((VALUE) <= 432))
  10. #define IS_RCC_PLLP_VALUE(VALUE) (((VALUE) == 2) || ((VALUE) == 4) ||
  11. ((VALUE) == 6) || ((VALUE) == 8))
  12. #define IS_RCC_PLLQ_VALUE(VALUE) ((4 <= (VALUE)) && ((VALUE) <= 15))
  13. #if defined(STM32F410xx) || defined(STM32F412xG) || defined(STM32F413_423xx)
  14.     || defined(STM32F446xx) || defined(STM32F469_479xx)
  15. #define IS_RCC_PLLR_VALUE(VALUE) ((2 <= (VALUE)) && ((VALUE) <= 7))
  16. #endif /* STM32F410xx || STM32F412xG || STM32F413_423xx || STM32F446xx
  17. || STM32F469_479xx */

  18. #define IS_RCC_PLLI2SN_VALUE(VALUE) ((50 <= (VALUE)) && ((VALUE) <= 432))
  19. #define IS_RCC_PLLI2SR_VALUE(VALUE) ((2 <= (VALUE))  && ((VALUE) <= 7))
  20. #define IS_RCC_PLLI2SM_VALUE(VALUE) ((2 <= (VALUE))  && ((VALUE) <= 63))
  21. #define IS_RCC_PLLI2SQ_VALUE(VALUE) ((2 <= (VALUE))  && ((VALUE) <= 15))
  22. #if defined(STM32F446xx)
  23. #define IS_RCC_PLLI2SP_VALUE(VALUE) (((VALUE) == 2) || ((VALUE) == 4)
  24.     || ((VALUE) == 6) || ((VALUE) == 8))
  25. #define IS_RCC_PLLSAIM_VALUE(VALUE) ((VALUE) <= 63)
  26. #elif  defined(STM32F412xG) || defined(STM32F413_423xx)
  27. #define IS_RCC_PLLI2SP_VALUE(VALUE) (((VALUE) == 2) || ((VALUE) == 4)
  28.     || ((VALUE) == 6) || ((VALUE) == 8))
  29. #else
  30. #endif /* STM32F446xx */
  31. #define IS_RCC_PLLSAIN_VALUE(VALUE) ((50 <= (VALUE)) && ((VALUE) <= 432))
  32. #if defined(STM32F446xx) || defined(STM32F469_479xx)
  33. #define IS_RCC_PLLSAIP_VALUE(VALUE) (((VALUE) == 2) || ((VALUE) == 4)
  34.     || ((VALUE) == 6) || ((VALUE) == 8))
  35. #endif /* STM32F446xx || STM32F469_479xx */
  36. #define IS_RCC_PLLSAIQ_VALUE(VALUE) ((2 <= (VALUE)) && ((VALUE) <= 15))
  37. #define IS_RCC_PLLSAIR_VALUE(VALUE) ((2 <= (VALUE)) && ((VALUE) <= 7))  

  38. #define IS_RCC_PLLSAI_DIVQ_VALUE(VALUE) ((1 <= (VALUE)) && ((VALUE) <= 32))
  39. #define IS_RCC_PLLI2S_DIVQ_VALUE(VALUE) ((1 <= (VALUE)) && ((VALUE) <= 32))

  40. #if defined(STM32F413_423xx)
  41. #define IS_RCC_PLLI2S_DIVR_VALUE(VALUE) ((1 <= (VALUE)) && ((VALUE) <= 32))
  42. #define IS_RCC_PLL_DIVR_VALUE(VALUE)    ((1 <= (VALUE)) && ((VALUE) <= 32))
  43. #endif /* STM32F413_423xx */
复制代码

RCC_System_Clock_Source
  1. /** @defgroup RCC_System_Clock_Source
  2.   * @{
  3.   */

  4. #if  defined(STM32F412xG) || defined(STM32F413_423xx) || defined(STM32F446xx)
  5. #define RCC_SYSCLKSource_HSI             ((uint32_t)0x00000000)
  6. #define RCC_SYSCLKSource_HSE             ((uint32_t)0x00000001)
  7. #define RCC_SYSCLKSource_PLLPCLK         ((uint32_t)0x00000002)
  8. #define RCC_SYSCLKSource_PLLRCLK         ((uint32_t)0x00000003)
  9. #define IS_RCC_SYSCLK_SOURCE(SOURCE) (((SOURCE) == RCC_SYSCLKSource_HSI) || \
  10.                                       ((SOURCE) == RCC_SYSCLKSource_HSE) || \
  11.                                       ((SOURCE) == RCC_SYSCLKSource_PLLPCLK) || \
  12.                                       ((SOURCE) == RCC_SYSCLKSource_PLLRCLK))
  13. /* Add legacy definition */
  14. #define  RCC_SYSCLKSource_PLLCLK    RCC_SYSCLKSource_PLLPCLK  
  15. #endif /* STM32F446xx */

  16. #if defined(STM32F40_41xxx) || defined(STM32F427_437xx) || defined(STM32F429_439xx)
  17. || defined(STM32F401xx) || defined(STM32F410xx) || defined(STM32F411xE)
  18.     || defined(STM32F469_479xx)
  19. #define RCC_SYSCLKSource_HSI             ((uint32_t)0x00000000)
  20. #define RCC_SYSCLKSource_HSE             ((uint32_t)0x00000001)
  21. #define RCC_SYSCLKSource_PLLCLK          ((uint32_t)0x00000002)
  22. #define IS_RCC_SYSCLK_SOURCE(SOURCE) (((SOURCE) == RCC_SYSCLKSource_HSI) || \
  23.                                       ((SOURCE) == RCC_SYSCLKSource_HSE) || \
  24.                                       ((SOURCE) == RCC_SYSCLKSource_PLLCLK))
  25. #endif /* STM32F40_41xxx || STM32F427_437xx || STM32F429_439xx || STM32F401xx
  26. || STM32F410xx || STM32F411xE || STM32F469_479xx */
复制代码

RCC_AHB_Clock_Source
  1. /** @defgroup RCC_AHB_Clock_Source
  2.   * @{
  3.   */
  4. #define RCC_SYSCLK_Div1                  ((uint32_t)0x00000000)
  5. #define RCC_SYSCLK_Div2                  ((uint32_t)0x00000080)
  6. #define RCC_SYSCLK_Div4                  ((uint32_t)0x00000090)
  7. #define RCC_SYSCLK_Div8                  ((uint32_t)0x000000A0)
  8. #define RCC_SYSCLK_Div16                 ((uint32_t)0x000000B0)
  9. #define RCC_SYSCLK_Div64                 ((uint32_t)0x000000C0)
  10. #define RCC_SYSCLK_Div128                ((uint32_t)0x000000D0)
  11. #define RCC_SYSCLK_Div256                ((uint32_t)0x000000E0)
  12. #define RCC_SYSCLK_Div512                ((uint32_t)0x000000F0)
  13. #define IS_RCC_HCLK(HCLK) (((HCLK) == RCC_SYSCLK_Div1) || ((HCLK) == RCC_SYSCLK_Div2) || \
  14.                            ((HCLK) == RCC_SYSCLK_Div4) || ((HCLK) == RCC_SYSCLK_Div8) || \
  15.                            ((HCLK) == RCC_SYSCLK_Div16) || ((HCLK) == RCC_SYSCLK_Div64) || \
  16.                            ((HCLK) == RCC_SYSCLK_Div128) || ((HCLK) == RCC_SYSCLK_Div256) || \
  17.                            ((HCLK) == RCC_SYSCLK_Div512))
复制代码

RCC_APB1_APB2_Clock_Source
  1. /** @defgroup RCC_APB1_APB2_Clock_Source
  2.   * @{
  3.   */
  4. #define RCC_HCLK_Div1                    ((uint32_t)0x00000000)
  5. #define RCC_HCLK_Div2                    ((uint32_t)0x00001000)
  6. #define RCC_HCLK_Div4                    ((uint32_t)0x00001400)
  7. #define RCC_HCLK_Div8                    ((uint32_t)0x00001800)
  8. #define RCC_HCLK_Div16                   ((uint32_t)0x00001C00)
  9. #define IS_RCC_PCLK(PCLK) (((PCLK) == RCC_HCLK_Div1) || ((PCLK) == RCC_HCLK_Div2) || \
  10.                            ((PCLK) == RCC_HCLK_Div4) || ((PCLK) == RCC_HCLK_Div8) || \
  11.                            ((PCLK) == RCC_HCLK_Div16))
复制代码

RCC_Interrupt_Source

  1. /** @defgroup RCC_Interrupt_Source
  2.   * @{
  3.   */
  4. #define RCC_IT_LSIRDY                    ((uint8_t)0x01)
  5. #define RCC_IT_LSERDY                    ((uint8_t)0x02)
  6. #define RCC_IT_HSIRDY                    ((uint8_t)0x04)
  7. #define RCC_IT_HSERDY                    ((uint8_t)0x08)
  8. #define RCC_IT_PLLRDY                    ((uint8_t)0x10)
  9. #define RCC_IT_PLLI2SRDY                 ((uint8_t)0x20)
  10. #define RCC_IT_PLLSAIRDY                 ((uint8_t)0x40)
  11. #define RCC_IT_CSS                       ((uint8_t)0x80)

  12. #define IS_RCC_IT(IT) ((((IT) & (uint8_t)0x80) == 0x00) && ((IT) != 0x00))
  13. #define IS_RCC_GET_IT(IT) (((IT) == RCC_IT_LSIRDY) || ((IT) == RCC_IT_LSERDY) || \
  14.                            ((IT) == RCC_IT_HSIRDY) || ((IT) == RCC_IT_HSERDY) || \
  15.                            ((IT) == RCC_IT_PLLRDY) || ((IT) == RCC_IT_CSS) || \
  16.                            ((IT) == RCC_IT_PLLSAIRDY) || ((IT) == RCC_IT_PLLI2SRDY))
  17. #define IS_RCC_CLEAR_IT(IT)((IT) != 0x00)
复制代码

RCC_LSE_Configuration
  1. /** @defgroup RCC_LSE_Configuration
  2.   * @{
  3.   */
  4. #define RCC_LSE_OFF                      ((uint8_t)0x00)
  5. #define RCC_LSE_ON                       ((uint8_t)0x01)
  6. #define RCC_LSE_Bypass                   ((uint8_t)0x04)
  7. #define IS_RCC_LSE(LSE) (((LSE) == RCC_LSE_OFF) || ((LSE) == RCC_LSE_ON) || \
  8.                          ((LSE) == RCC_LSE_Bypass))
复制代码

RCC_RTC_Clock_Source

  1. /** @defgroup RCC_RTC_Clock_Source
  2.   * @{
  3.   */
  4. #define RCC_RTCCLKSource_LSE             ((uint32_t)0x00000100)
  5. #define RCC_RTCCLKSource_LSI             ((uint32_t)0x00000200)
  6. #define RCC_RTCCLKSource_HSE_Div2        ((uint32_t)0x00020300)
  7. #define RCC_RTCCLKSource_HSE_Div3        ((uint32_t)0x00030300)
  8. #define RCC_RTCCLKSource_HSE_Div4        ((uint32_t)0x00040300)
  9. #define RCC_RTCCLKSource_HSE_Div5        ((uint32_t)0x00050300)
  10. #define RCC_RTCCLKSource_HSE_Div6        ((uint32_t)0x00060300)
  11. #define RCC_RTCCLKSource_HSE_Div7        ((uint32_t)0x00070300)
  12. #define RCC_RTCCLKSource_HSE_Div8        ((uint32_t)0x00080300)
  13. #define RCC_RTCCLKSource_HSE_Div9        ((uint32_t)0x00090300)
  14. #define RCC_RTCCLKSource_HSE_Div10       ((uint32_t)0x000A0300)
  15. #define RCC_RTCCLKSource_HSE_Div11       ((uint32_t)0x000B0300)
  16. #define RCC_RTCCLKSource_HSE_Div12       ((uint32_t)0x000C0300)
  17. #define RCC_RTCCLKSource_HSE_Div13       ((uint32_t)0x000D0300)
  18. #define RCC_RTCCLKSource_HSE_Div14       ((uint32_t)0x000E0300)
  19. #define RCC_RTCCLKSource_HSE_Div15       ((uint32_t)0x000F0300)
  20. #define RCC_RTCCLKSource_HSE_Div16       ((uint32_t)0x00100300)
  21. #define RCC_RTCCLKSource_HSE_Div17       ((uint32_t)0x00110300)
  22. #define RCC_RTCCLKSource_HSE_Div18       ((uint32_t)0x00120300)
  23. #define RCC_RTCCLKSource_HSE_Div19       ((uint32_t)0x00130300)
  24. #define RCC_RTCCLKSource_HSE_Div20       ((uint32_t)0x00140300)
  25. #define RCC_RTCCLKSource_HSE_Div21       ((uint32_t)0x00150300)
  26. #define RCC_RTCCLKSource_HSE_Div22       ((uint32_t)0x00160300)
  27. #define RCC_RTCCLKSource_HSE_Div23       ((uint32_t)0x00170300)
  28. #define RCC_RTCCLKSource_HSE_Div24       ((uint32_t)0x00180300)
  29. #define RCC_RTCCLKSource_HSE_Div25       ((uint32_t)0x00190300)
  30. #define RCC_RTCCLKSource_HSE_Div26       ((uint32_t)0x001A0300)
  31. #define RCC_RTCCLKSource_HSE_Div27       ((uint32_t)0x001B0300)
  32. #define RCC_RTCCLKSource_HSE_Div28       ((uint32_t)0x001C0300)
  33. #define RCC_RTCCLKSource_HSE_Div29       ((uint32_t)0x001D0300)
  34. #define RCC_RTCCLKSource_HSE_Div30       ((uint32_t)0x001E0300)
  35. #define RCC_RTCCLKSource_HSE_Div31       ((uint32_t)0x001F0300)
  36. #define IS_RCC_RTCCLK_SOURCE(SOURCE) (((SOURCE) == RCC_RTCCLKSource_LSE) || \
  37.                                       ((SOURCE) == RCC_RTCCLKSource_LSI) || \
  38.                                       ((SOURCE) == RCC_RTCCLKSource_HSE_Div2) || \
  39.                                       ((SOURCE) == RCC_RTCCLKSource_HSE_Div3) || \
  40.                                       ((SOURCE) == RCC_RTCCLKSource_HSE_Div4) || \
  41.                                       ((SOURCE) == RCC_RTCCLKSource_HSE_Div5) || \
  42.                                       ((SOURCE) == RCC_RTCCLKSource_HSE_Div6) || \
  43.                                       ((SOURCE) == RCC_RTCCLKSource_HSE_Div7) || \
  44.                                       ((SOURCE) == RCC_RTCCLKSource_HSE_Div8) || \
  45.                                       ((SOURCE) == RCC_RTCCLKSource_HSE_Div9) || \
  46.                                       ((SOURCE) == RCC_RTCCLKSource_HSE_Div10) || \
  47.                                       ((SOURCE) == RCC_RTCCLKSource_HSE_Div11) || \
  48.                                       ((SOURCE) == RCC_RTCCLKSource_HSE_Div12) || \
  49.                                       ((SOURCE) == RCC_RTCCLKSource_HSE_Div13) || \
  50.                                       ((SOURCE) == RCC_RTCCLKSource_HSE_Div14) || \
  51.                                       ((SOURCE) == RCC_RTCCLKSource_HSE_Div15) || \
  52.                                       ((SOURCE) == RCC_RTCCLKSource_HSE_Div16) || \
  53.                                       ((SOURCE) == RCC_RTCCLKSource_HSE_Div17) || \
  54.                                       ((SOURCE) == RCC_RTCCLKSource_HSE_Div18) || \
  55.                                       ((SOURCE) == RCC_RTCCLKSource_HSE_Div19) || \
  56.                                       ((SOURCE) == RCC_RTCCLKSource_HSE_Div20) || \
  57.                                       ((SOURCE) == RCC_RTCCLKSource_HSE_Div21) || \
  58.                                       ((SOURCE) == RCC_RTCCLKSource_HSE_Div22) || \
  59.                                       ((SOURCE) == RCC_RTCCLKSource_HSE_Div23) || \
  60.                                       ((SOURCE) == RCC_RTCCLKSource_HSE_Div24) || \
  61.                                       ((SOURCE) == RCC_RTCCLKSource_HSE_Div25) || \
  62.                                       ((SOURCE) == RCC_RTCCLKSource_HSE_Div26) || \
  63.                                       ((SOURCE) == RCC_RTCCLKSource_HSE_Div27) || \
  64.                                       ((SOURCE) == RCC_RTCCLKSource_HSE_Div28) || \
  65.                                       ((SOURCE) == RCC_RTCCLKSource_HSE_Div29) || \
  66.                                       ((SOURCE) == RCC_RTCCLKSource_HSE_Div30) || \
  67.                                       ((SOURCE) == RCC_RTCCLKSource_HSE_Div31))
复制代码

RCC_SAI_BlockA_Clock_Source

  1. /** @defgroup RCC_SAI_BlockA_Clock_Source
  2.   * @{
  3.   */
  4. #define RCC_SAIACLKSource_PLLSAI             ((uint32_t)0x00000000)
  5. #define RCC_SAIACLKSource_PLLI2S             ((uint32_t)0x00100000)
  6. #define RCC_SAIACLKSource_Ext                ((uint32_t)0x00200000)

  7. #define IS_RCC_SAIACLK_SOURCE(SOURCE) (((SOURCE) == RCC_SAIACLKSource_PLLI2S) ||\
  8.                                        ((SOURCE) == RCC_SAIACLKSource_PLLSAI) ||\
  9.                                        ((SOURCE) == RCC_SAIACLKSource_Ext))
复制代码


RCC_SAI_BlockB_Clock_Source
  1. /** @defgroup RCC_SAI_BlockB_Clock_Source
  2.   * @{
  3.   */
  4. #define RCC_SAIBCLKSource_PLLSAI             ((uint32_t)0x00000000)
  5. #define RCC_SAIBCLKSource_PLLI2S             ((uint32_t)0x00400000)
  6. #define RCC_SAIBCLKSource_Ext                ((uint32_t)0x00800000)

  7. #define IS_RCC_SAIBCLK_SOURCE(SOURCE) (((SOURCE) == RCC_SAIBCLKSource_PLLI2S) ||\
  8.                                        ((SOURCE) == RCC_SAIBCLKSource_PLLSAI) ||\
  9.                                        ((SOURCE) == RCC_SAIBCLKSource_Ext))
复制代码

RCC_TIM_PRescaler_Selection
  1. /** @defgroup RCC_TIM_PRescaler_Selection
  2.   * @{
  3.   */
  4. #define RCC_TIMPrescDesactivated             ((uint8_t)0x00)
  5. #define RCC_TIMPrescActivated                ((uint8_t)0x01)

  6. #define IS_RCC_TIMCLK_PRESCALER(VALUE) (((VALUE) == RCC_TIMPrescDesactivated)
  7. || ((VALUE) == RCC_TIMPrescActivated))
复制代码

RCC_AHB1_Peripherals

  1. /** @defgroup RCC_AHB1_Peripherals
  2.   * @{
  3.   */
  4. #define RCC_AHB1Periph_GPIOA             ((uint32_t)0x00000001)
  5. #define RCC_AHB1Periph_GPIOB             ((uint32_t)0x00000002)
  6. #define RCC_AHB1Periph_GPIOC             ((uint32_t)0x00000004)
  7. #define RCC_AHB1Periph_GPIOD             ((uint32_t)0x00000008)
  8. #define RCC_AHB1Periph_GPIOE             ((uint32_t)0x00000010)
  9. #define RCC_AHB1Periph_GPIOF             ((uint32_t)0x00000020)
  10. #define RCC_AHB1Periph_GPIOG             ((uint32_t)0x00000040)
  11. #define RCC_AHB1Periph_GPIOH             ((uint32_t)0x00000080)
  12. #define RCC_AHB1Periph_GPIOI             ((uint32_t)0x00000100)
  13. #define RCC_AHB1Periph_GPIOJ             ((uint32_t)0x00000200)
  14. #define RCC_AHB1Periph_GPIOK             ((uint32_t)0x00000400)
  15. #define RCC_AHB1Periph_CRC               ((uint32_t)0x00001000)
  16. #define RCC_AHB1Periph_FLITF             ((uint32_t)0x00008000)
  17. #define RCC_AHB1Periph_SRAM1             ((uint32_t)0x00010000)
  18. #define RCC_AHB1Periph_SRAM2             ((uint32_t)0x00020000)
  19. #define RCC_AHB1Periph_BKPSRAM           ((uint32_t)0x00040000)
  20. #define RCC_AHB1Periph_SRAM3             ((uint32_t)0x00080000)
  21. #define RCC_AHB1Periph_CCMDATARAMEN      ((uint32_t)0x00100000)
  22. #define RCC_AHB1Periph_DMA1              ((uint32_t)0x00200000)
  23. #define RCC_AHB1Periph_DMA2              ((uint32_t)0x00400000)
  24. #define RCC_AHB1Periph_DMA2D             ((uint32_t)0x00800000)
  25. #define RCC_AHB1Periph_ETH_MAC           ((uint32_t)0x02000000)
  26. #define RCC_AHB1Periph_ETH_MAC_Tx        ((uint32_t)0x04000000)
  27. #define RCC_AHB1Periph_ETH_MAC_Rx        ((uint32_t)0x08000000)
  28. #define RCC_AHB1Periph_ETH_MAC_PTP       ((uint32_t)0x10000000)
  29. #define RCC_AHB1Periph_OTG_HS            ((uint32_t)0x20000000)
  30. #define RCC_AHB1Periph_OTG_HS_ULPI       ((uint32_t)0x40000000)

  31. #define IS_RCC_AHB1_CLOCK_PERIPH(PERIPH)
  32.         ((((PERIPH) & 0x010BE800) == 0x00) && ((PERIPH) != 0x00))
  33. #define IS_RCC_AHB1_RESET_PERIPH(PERIPH)
  34.         ((((PERIPH) & 0x51FE800) == 0x00) && ((PERIPH) != 0x00))
  35. #define IS_RCC_AHB1_LPMODE_PERIPH(PERIPH)
  36.         ((((PERIPH) & 0x01106800) == 0x00) && ((PERIPH) != 0x00))
复制代码

RCC_AHB2_Peripherals
  1. /** @defgroup RCC_AHB2_Peripherals
  2.   * @{
  3.   */  
  4. #define RCC_AHB2Periph_DCMI              ((uint32_t)0x00000001)
  5. #define RCC_AHB2Periph_CRYP              ((uint32_t)0x00000010)
  6. #define RCC_AHB2Periph_HASH              ((uint32_t)0x00000020)
  7. #define RCC_AHB2Periph_OTG_FS            ((uint32_t)0x00000080)
  8. #define IS_RCC_AHB2_PERIPH(PERIPH)
  9.         ((((PERIPH) & 0xFFFFFF0E) == 0x00) && ((PERIPH) != 0x00))
复制代码

RCC_APB1_Peripherals

  1. /** @defgroup RCC_APB1_Peripherals
  2.   * @{
  3.   */
  4. #define RCC_APB1Periph_TIM2              ((uint32_t)0x00000001)
  5. #define RCC_APB1Periph_TIM3              ((uint32_t)0x00000002)
  6. #define RCC_APB1Periph_TIM4              ((uint32_t)0x00000004)
  7. #define RCC_APB1Periph_TIM5              ((uint32_t)0x00000008)
  8. #define RCC_APB1Periph_TIM6              ((uint32_t)0x00000010)
  9. #define RCC_APB1Periph_TIM7              ((uint32_t)0x00000020)
  10. #define RCC_APB1Periph_TIM12             ((uint32_t)0x00000040)
  11. #define RCC_APB1Periph_TIM13             ((uint32_t)0x00000080)
  12. #define RCC_APB1Periph_TIM14             ((uint32_t)0x00000100)
  13. #if defined(STM32F410xx) || defined(STM32F413_423xx)
  14. #define RCC_APB1Periph_LPTIM1            ((uint32_t)0x00000200)
  15. #endif /* STM32F410xx || STM32F413_423xx */
  16. #define RCC_APB1Periph_WWDG              ((uint32_t)0x00000800)
  17. #define RCC_APB1Periph_SPI2              ((uint32_t)0x00004000)
  18. #define RCC_APB1Periph_SPI3              ((uint32_t)0x00008000)
  19. #if defined(STM32F446xx)
  20. #define RCC_APB1Periph_SPDIFRX           ((uint32_t)0x00010000)
  21. #endif /* STM32F446xx */
  22. #define RCC_APB1Periph_USART2            ((uint32_t)0x00020000)
  23. #define RCC_APB1Periph_USART3            ((uint32_t)0x00040000)
  24. #define RCC_APB1Periph_UART4             ((uint32_t)0x00080000)
  25. #define RCC_APB1Periph_UART5             ((uint32_t)0x00100000)
  26. #define RCC_APB1Periph_I2C1              ((uint32_t)0x00200000)
  27. #define RCC_APB1Periph_I2C2              ((uint32_t)0x00400000)
  28. #define RCC_APB1Periph_I2C3              ((uint32_t)0x00800000)
  29. #if defined(STM32F410xx) || defined(STM32F412xG)
  30. || defined(STM32F413_423xx) || defined(STM32F446xx)
  31. #define RCC_APB1Periph_FMPI2C1           ((uint32_t)0x01000000)
  32. #endif /* STM32F410xx || STM32F446xx || STM32F413_423xx*/
  33. #define RCC_APB1Periph_CAN1              ((uint32_t)0x02000000)
  34. #define RCC_APB1Periph_CAN2              ((uint32_t)0x04000000)
  35. #if defined(STM32F413_423xx)
  36. #define RCC_APB1Periph_CAN3              ((uint32_t)0x08000000)
  37. #endif /* STM32F413_423xx */
  38. #if defined(STM32F446xx)
  39. #define RCC_APB1Periph_CEC               ((uint32_t)0x08000000)
  40. #endif /* STM32F446xx */
  41. #define RCC_APB1Periph_PWR               ((uint32_t)0x10000000)
  42. #define RCC_APB1Periph_DAC               ((uint32_t)0x20000000)
  43. #define RCC_APB1Periph_UART7             ((uint32_t)0x40000000)
  44. #define RCC_APB1Periph_UART8             ((uint32_t)0x80000000)
  45. #define IS_RCC_APB1_PERIPH(PERIPH)
  46.     ((((PERIPH) & 0x00003600) == 0x00) && ((PERIPH) != 0x00))
复制代码

RCC_APB2_Peripherals
  1. /** @defgroup RCC_APB2_Peripherals
  2.   * @{
  3.   */
  4. #define RCC_APB2Periph_TIM1              ((uint32_t)0x00000001)
  5. #define RCC_APB2Periph_TIM8              ((uint32_t)0x00000002)
  6. #define RCC_APB2Periph_USART1            ((uint32_t)0x00000010)
  7. #define RCC_APB2Periph_USART6            ((uint32_t)0x00000020)
  8. #define RCC_APB2Periph_ADC               ((uint32_t)0x00000100)
  9. #define RCC_APB2Periph_ADC1              ((uint32_t)0x00000100)
  10. #define RCC_APB2Periph_ADC2              ((uint32_t)0x00000200)
  11. #define RCC_APB2Periph_ADC3              ((uint32_t)0x00000400)
  12. #define RCC_APB2Periph_SDIO              ((uint32_t)0x00000800)
  13. #define RCC_APB2Periph_SPI1              ((uint32_t)0x00001000)
  14. #define RCC_APB2Periph_SPI4              ((uint32_t)0x00002000)
  15. #define RCC_APB2Periph_SYSCFG            ((uint32_t)0x00004000)
  16. #define RCC_APB2Periph_EXTIT             ((uint32_t)0x00008000)
  17. #define RCC_APB2Periph_TIM9              ((uint32_t)0x00010000)
  18. #define RCC_APB2Periph_TIM10             ((uint32_t)0x00020000)
  19. #define RCC_APB2Periph_TIM11             ((uint32_t)0x00040000)
  20. #define RCC_APB2Periph_SPI5              ((uint32_t)0x00100000)
  21. #define RCC_APB2Periph_SPI6              ((uint32_t)0x00200000)
  22. #define RCC_APB2Periph_SAI1              ((uint32_t)0x00400000)
  23. #if defined(STM32F446xx) || defined(STM32F469_479xx)
  24. #define RCC_APB2Periph_SAI2              ((uint32_t)0x00800000)
  25. #endif /* STM32F446xx || STM32F469_479xx */
  26. #define RCC_APB2Periph_LTDC              ((uint32_t)0x04000000)
  27. #if defined(STM32F469_479xx)
  28. #define RCC_APB2Periph_DSI               ((uint32_t)0x08000000)
  29. #endif /* STM32F469_479xx */
  30. #if defined(STM32F412xG) || defined(STM32F413_423xx)
  31. #define RCC_APB2Periph_DFSDM1            ((uint32_t)0x01000000)
  32. #endif /* STM32F412xG || STM32F413_423xx */
  33. #if defined(STM32F413_423xx)
  34. #define RCC_APB2Periph_DFSDM2            ((uint32_t)0x02000000)
  35. #define RCC_APB2Periph_UART9             ((uint32_t)0x02000040)
  36. #define RCC_APB2Periph_UART10            ((uint32_t)0x00000080)
  37. #endif /* STM32F413_423xx */

  38. /* Legacy Defines */
  39. #define RCC_APB2Periph_DFSDM              RCC_APB2Periph_DFSDM1

  40. #define IS_RCC_APB2_PERIPH(PERIPH)
  41.         ((((PERIPH) & 0xF008000C) == 0x00) && ((PERIPH) != 0x00))
  42. #define IS_RCC_APB2_RESET_PERIPH(PERIPH)
  43.         ((((PERIPH) & 0xF208860C) == 0x00) && ((PERIPH) != 0x00))
复制代码

RCC_MCO1_Clock_Source_Prescaler
  1. /** @defgroup RCC_MCO1_Clock_Source_Prescaler
  2.   * @{
  3.   */
  4. #define RCC_MCO1Source_HSI               ((uint32_t)0x00000000)
  5. #define RCC_MCO1Source_LSE               ((uint32_t)0x00200000)
  6. #define RCC_MCO1Source_HSE               ((uint32_t)0x00400000)
  7. #define RCC_MCO1Source_PLLCLK            ((uint32_t)0x00600000)
  8. #define RCC_MCO1Div_1                    ((uint32_t)0x00000000)
  9. #define RCC_MCO1Div_2                    ((uint32_t)0x04000000)
  10. #define RCC_MCO1Div_3                    ((uint32_t)0x05000000)
  11. #define RCC_MCO1Div_4                    ((uint32_t)0x06000000)
  12. #define RCC_MCO1Div_5                    ((uint32_t)0x07000000)
  13. #define IS_RCC_MCO1SOURCE(SOURCE) (((SOURCE) == RCC_MCO1Source_HSI)
  14. || ((SOURCE) == RCC_MCO1Source_LSE) || \
  15. ((SOURCE) == RCC_MCO1Source_HSE) || ((SOURCE) == RCC_MCO1Source_PLLCLK))
  16.                                    
  17. #define IS_RCC_MCO1DIV(DIV) (((DIV) == RCC_MCO1Div_1) || ((DIV) == RCC_MCO1Div_2) || \
  18.                              ((DIV) == RCC_MCO1Div_3) || ((DIV) == RCC_MCO1Div_4) || \
  19.                              ((DIV) == RCC_MCO1Div_5))
复制代码

RCC_MCO2_Clock_Source_Prescaler
  1. /** @defgroup RCC_MCO2_Clock_Source_Prescaler
  2.   * @{
  3.   */
  4. #define RCC_MCO2Source_SYSCLK            ((uint32_t)0x00000000)
  5. #define RCC_MCO2Source_PLLI2SCLK         ((uint32_t)0x40000000)
  6. #define RCC_MCO2Source_HSE               ((uint32_t)0x80000000)
  7. #define RCC_MCO2Source_PLLCLK            ((uint32_t)0xC0000000)
  8. #define RCC_MCO2Div_1                    ((uint32_t)0x00000000)
  9. #define RCC_MCO2Div_2                    ((uint32_t)0x20000000)
  10. #define RCC_MCO2Div_3                    ((uint32_t)0x28000000)
  11. #define RCC_MCO2Div_4                    ((uint32_t)0x30000000)
  12. #define RCC_MCO2Div_5                    ((uint32_t)0x38000000)
  13. #define IS_RCC_MCO2SOURCE(SOURCE) (((SOURCE) == RCC_MCO2Source_SYSCLK)
  14. || ((SOURCE) == RCC_MCO2Source_PLLI2SCLK)|| \
  15.                                    ((SOURCE) == RCC_MCO2Source_HSE)
  16.     || ((SOURCE) == RCC_MCO2Source_PLLCLK))
  17.                                    
  18. #define IS_RCC_MCO2DIV(DIV) (((DIV) == RCC_MCO2Div_1) || ((DIV) == RCC_MCO2Div_2) || \
  19.                              ((DIV) == RCC_MCO2Div_3) || ((DIV) == RCC_MCO2Div_4) || \
  20.                              ((DIV) == RCC_MCO2Div_5))        
复制代码

RCC_Flag
  1. /** @defgroup RCC_Flag
  2.   * @{
  3.   */
  4. #define RCC_FLAG_HSIRDY                  ((uint8_t)0x21)
  5. #define RCC_FLAG_HSERDY                  ((uint8_t)0x31)
  6. #define RCC_FLAG_PLLRDY                  ((uint8_t)0x39)
  7. #define RCC_FLAG_PLLI2SRDY               ((uint8_t)0x3B)
  8. #define RCC_FLAG_PLLSAIRDY               ((uint8_t)0x3D)
  9. #define RCC_FLAG_LSERDY                  ((uint8_t)0x41)
  10. #define RCC_FLAG_LSIRDY                  ((uint8_t)0x61)
  11. #define RCC_FLAG_BORRST                  ((uint8_t)0x79)
  12. #define RCC_FLAG_PINRST                  ((uint8_t)0x7A)
  13. #define RCC_FLAG_PORRST                  ((uint8_t)0x7B)
  14. #define RCC_FLAG_SFTRST                  ((uint8_t)0x7C)
  15. #define RCC_FLAG_IWDGRST                 ((uint8_t)0x7D)
  16. #define RCC_FLAG_WWDGRST                 ((uint8_t)0x7E)
  17. #define RCC_FLAG_LPWRRST                 ((uint8_t)0x7F)

  18. #define IS_RCC_FLAG(FLAG) (((FLAG) == RCC_FLAG_HSIRDY)   || ((FLAG) == RCC_FLAG_HSERDY) || \
  19.                            ((FLAG) == RCC_FLAG_PLLRDY)   || ((FLAG) == RCC_FLAG_LSERDY) || \
  20.                            ((FLAG) == RCC_FLAG_LSIRDY)   || ((FLAG) == RCC_FLAG_BORRST) || \
  21.                            ((FLAG) == RCC_FLAG_PINRST)   || ((FLAG) == RCC_FLAG_PORRST) || \
  22.                            ((FLAG) == RCC_FLAG_SFTRST)   || ((FLAG) == RCC_FLAG_IWDGRST)|| \
  23.                            ((FLAG) == RCC_FLAG_WWDGRST)  || ((FLAG) == RCC_FLAG_LPWRRST)|| \
  24.                            ((FLAG) == RCC_FLAG_PLLI2SRDY)|| ((FLAG) == RCC_FLAG_PLLSAIRDY))

  25. #define IS_RCC_CALIBRATION_VALUE(VALUE) ((VALUE) <= 0x1F)
复制代码

03. 相关函数

  1. /* Function used to set the RCC clock configuration to the default reset state */
  2. void        RCC_DeInit(void);

  3. /* Internal/external clocks, PLL, CSS and MCO configuration functions *********/
  4. void        RCC_HSEConfig(uint8_t RCC_HSE);
  5. ErrorStatus RCC_WaitForHSEStartUp(void);
  6. void        RCC_AdjustHSICalibrationValue(uint8_t HSICalibrationValue);
  7. void        RCC_HSICmd(FunctionalState NewState);
  8. void        RCC_LSEConfig(uint8_t RCC_LSE);
  9. void        RCC_LSICmd(FunctionalState NewState);

  10. void        RCC_PLLCmd(FunctionalState NewState);

  11. void        RCC_PLLConfig(uint32_t RCC_PLLSource, uint32_t PLLM, uint32_t PLLN,
  12.                           uint32_t PLLP, uint32_t PLLQ);

  13. void        RCC_PLLI2SCmd(FunctionalState NewState);

  14. void        RCC_PLLI2SConfig(uint32_t PLLI2SN, uint32_t PLLI2SR);


  15. void        RCC_PLLSAICmd(FunctionalState NewState);

  16. void        RCC_PLLSAIConfig(uint32_t PLLSAIN, uint32_t PLLSAIQ, uint32_t PLLSAIR);
  17. void        RCC_ClockSecuritySystemCmd(FunctionalState NewState);
  18. void        RCC_MCO1Config(uint32_t RCC_MCO1Source, uint32_t RCC_MCO1Div);
  19. void        RCC_MCO2Config(uint32_t RCC_MCO2Source, uint32_t RCC_MCO2Div);


  20. /* System, AHB and APB busses clocks configuration functions ******************/
  21. void        RCC_SYSCLKConfig(uint32_t RCC_SYSCLKSource);
  22. uint8_t     RCC_GetSYSCLKSource(void);
  23. void        RCC_HCLKConfig(uint32_t RCC_SYSCLK);
  24. void        RCC_PCLK1Config(uint32_t RCC_HCLK);
  25. void        RCC_PCLK2Config(uint32_t RCC_HCLK);
  26. void        RCC_GetClocksFreq(RCC_ClocksTypeDef* RCC_Clocks);

  27. /* Peripheral clocks configuration functions **********************************/
  28. void        RCC_RTCCLKConfig(uint32_t RCC_RTCCLKSource);
  29. void        RCC_RTCCLKCmd(FunctionalState NewState);
  30. void        RCC_BackupResetCmd(FunctionalState NewState);


  31. void        RCC_I2SCLKConfig(uint32_t RCC_I2SCLKSource);


  32. void        RCC_SAIBlockACLKConfig(uint32_t RCC_SAIBlockACLKSource);
  33. void        RCC_SAIBlockBCLKConfig(uint32_t RCC_SAIBlockBCLKSource);


  34. void        RCC_SAIPLLI2SClkDivConfig(uint32_t RCC_PLLI2SDivQ);
  35. void        RCC_SAIPLLSAIClkDivConfig(uint32_t RCC_PLLSAIDivQ);


  36. void        RCC_LTDCCLKDivConfig(uint32_t RCC_PLLSAIDivR);
  37. void        RCC_TIMCLKPresConfig(uint32_t RCC_TIMCLKPrescaler);

  38. void        RCC_AHB1PeriphClockCmd(uint32_t RCC_AHB1Periph, FunctionalState NewState);
  39. void        RCC_AHB2PeriphClockCmd(uint32_t RCC_AHB2Periph, FunctionalState NewState);
  40. void        RCC_AHB3PeriphClockCmd(uint32_t RCC_AHB3Periph, FunctionalState NewState);
  41. void        RCC_APB1PeriphClockCmd(uint32_t RCC_APB1Periph, FunctionalState NewState);
  42. void        RCC_APB2PeriphClockCmd(uint32_t RCC_APB2Periph, FunctionalState NewState);

  43. void        RCC_AHB1PeriphResetCmd(uint32_t RCC_AHB1Periph, FunctionalState NewState);
  44. void        RCC_AHB2PeriphResetCmd(uint32_t RCC_AHB2Periph, FunctionalState NewState);
  45. void        RCC_AHB3PeriphResetCmd(uint32_t RCC_AHB3Periph, FunctionalState NewState);
  46. void        RCC_APB1PeriphResetCmd(uint32_t RCC_APB1Periph, FunctionalState NewState);
  47. void        RCC_APB2PeriphResetCmd(uint32_t RCC_APB2Periph, FunctionalState NewState);

  48. void        RCC_AHB1PeriphClockLPModeCmd(uint32_t RCC_AHB1Periph, FunctionalState NewState);
  49. void        RCC_AHB2PeriphClockLPModeCmd(uint32_t RCC_AHB2Periph, FunctionalState NewState);
  50. void        RCC_AHB3PeriphClockLPModeCmd(uint32_t RCC_AHB3Periph, FunctionalState NewState);
  51. void        RCC_APB1PeriphClockLPModeCmd(uint32_t RCC_APB1Periph, FunctionalState NewState);
  52. void        RCC_APB2PeriphClockLPModeCmd(uint32_t RCC_APB2Periph, FunctionalState NewState);


  53. /* Interrupts and flags management functions **********************************/
  54. void        RCC_ITConfig(uint8_t RCC_IT, FunctionalState NewState);
  55. FlagStatus  RCC_GetFlagStatus(uint8_t RCC_FLAG);
  56. void        RCC_ClearFlag(void);
  57. ITStatus    RCC_GetITStatus(uint8_t RCC_IT);
  58. void        RCC_ClearITPendingBit(uint8_t RCC_IT);
复制代码


04. 结构体封装
  1. /**
  2.   * @brief Reset and Clock Control
  3.   */

  4. typedef struct
  5. {
  6.   __IO uint32_t CR;            /*!< RCC clock control register,                                  Address offset: 0x00 */
  7.   __IO uint32_t PLLCFGR;       /*!< RCC PLL configuration register,                              Address offset: 0x04 */
  8.   __IO uint32_t CFGR;          /*!< RCC clock configuration register,                            Address offset: 0x08 */
  9.   __IO uint32_t CIR;           /*!< RCC clock interrupt register,                                Address offset: 0x0C */
  10.   __IO uint32_t AHB1RSTR;      /*!< RCC AHB1 peripheral reset register,                          Address offset: 0x10 */
  11.   __IO uint32_t AHB2RSTR;      /*!< RCC AHB2 peripheral reset register,                          Address offset: 0x14 */
  12.   __IO uint32_t AHB3RSTR;      /*!< RCC AHB3 peripheral reset register,                          Address offset: 0x18 */
  13.   uint32_t      RESERVED0;     /*!< Reserved, 0x1C                                                                    */
  14.   __IO uint32_t APB1RSTR;      /*!< RCC APB1 peripheral reset register,                          Address offset: 0x20 */
  15.   __IO uint32_t APB2RSTR;      /*!< RCC APB2 peripheral reset register,                          Address offset: 0x24 */
  16.   uint32_t      RESERVED1[2];  /*!< Reserved, 0x28-0x2C                                                               */
  17.   __IO uint32_t AHB1ENR;       /*!< RCC AHB1 peripheral clock register,                          Address offset: 0x30 */
  18.   __IO uint32_t AHB2ENR;       /*!< RCC AHB2 peripheral clock register,                          Address offset: 0x34 */
  19.   __IO uint32_t AHB3ENR;       /*!< RCC AHB3 peripheral clock register,                          Address offset: 0x38 */
  20.   uint32_t      RESERVED2;     /*!< Reserved, 0x3C                                                                    */
  21.   __IO uint32_t APB1ENR;       /*!< RCC APB1 peripheral clock enable register,                   Address offset: 0x40 */
  22.   __IO uint32_t APB2ENR;       /*!< RCC APB2 peripheral clock enable register,                   Address offset: 0x44 */
  23.   uint32_t      RESERVED3[2];  /*!< Reserved, 0x48-0x4C                                                               */
  24.   __IO uint32_t AHB1LPENR;     /*!< RCC AHB1 peripheral clock enable in low power mode register, Address offset: 0x50 */
  25.   __IO uint32_t AHB2LPENR;     /*!< RCC AHB2 peripheral clock enable in low power mode register, Address offset: 0x54 */
  26.   __IO uint32_t AHB3LPENR;     /*!< RCC AHB3 peripheral clock enable in low power mode register, Address offset: 0x58 */
  27.   uint32_t      RESERVED4;     /*!< Reserved, 0x5C                                                                    */
  28.   __IO uint32_t APB1LPENR;     /*!< RCC APB1 peripheral clock enable in low power mode register, Address offset: 0x60 */
  29.   __IO uint32_t APB2LPENR;     /*!< RCC APB2 peripheral clock enable in low power mode register, Address offset: 0x64 */
  30.   uint32_t      RESERVED5[2];  /*!< Reserved, 0x68-0x6C                                                               */
  31.   __IO uint32_t BDCR;          /*!< RCC Backup domain control register,                          Address offset: 0x70 */
  32.   __IO uint32_t CSR;           /*!< RCC clock control & status register,                         Address offset: 0x74 */
  33.   uint32_t      RESERVED6[2];  /*!< Reserved, 0x78-0x7C                                                               */
  34.   __IO uint32_t SSCGR;         /*!< RCC spread spectrum clock generation register,               Address offset: 0x80 */
  35.   __IO uint32_t PLLI2SCFGR;    /*!< RCC PLLI2S configuration register,                           Address offset: 0x84 */
  36.   __IO uint32_t PLLSAICFGR;    /*!< RCC PLLSAI configuration register,                           Address offset: 0x88 */
  37.   __IO uint32_t DCKCFGR;       /*!< RCC Dedicated Clocks configuration register,                 Address offset: 0x8C */
  38.   __IO uint32_t CKGATENR;      /*!< RCC Clocks Gated Enable Register,                            Address offset: 0x90 */ /* Only for STM32F412xG, STM32413_423xx and STM32F446xx devices */
  39.   __IO uint32_t DCKCFGR2;      /*!< RCC Dedicated Clocks configuration register 2,               Address offset: 0x94 */ /* Only for STM32F410xx, STM32F412xG, STM32413_423xx and STM32F446xx devices */

  40. } RCC_TypeDef;
复制代码


05. 其它
  1. /******************************************************************************/
  2. /*                                                                            */
  3. /*                         Reset and Clock Control                            */
  4. /*                                                                            */
  5. /******************************************************************************/
  6. /********************  Bit definition for RCC_CR register  ********************/
  7. #define  RCC_CR_HSION                        ((uint32_t)0x00000001)
  8. #define  RCC_CR_HSIRDY                       ((uint32_t)0x00000002)

  9. #define  RCC_CR_HSITRIM                      ((uint32_t)0x000000F8)
  10. #define  RCC_CR_HSITRIM_0                    ((uint32_t)0x00000008)/*!<Bit 0 */
  11. #define  RCC_CR_HSITRIM_1                    ((uint32_t)0x00000010)/*!<Bit 1 */
  12. #define  RCC_CR_HSITRIM_2                    ((uint32_t)0x00000020)/*!<Bit 2 */
  13. #define  RCC_CR_HSITRIM_3                    ((uint32_t)0x00000040)/*!<Bit 3 */
  14. #define  RCC_CR_HSITRIM_4                    ((uint32_t)0x00000080)/*!<Bit 4 */

  15. #define  RCC_CR_HSICAL                       ((uint32_t)0x0000FF00)
  16. #define  RCC_CR_HSICAL_0                     ((uint32_t)0x00000100)/*!<Bit 0 */
  17. #define  RCC_CR_HSICAL_1                     ((uint32_t)0x00000200)/*!<Bit 1 */
  18. #define  RCC_CR_HSICAL_2                     ((uint32_t)0x00000400)/*!<Bit 2 */
  19. #define  RCC_CR_HSICAL_3                     ((uint32_t)0x00000800)/*!<Bit 3 */
  20. #define  RCC_CR_HSICAL_4                     ((uint32_t)0x00001000)/*!<Bit 4 */
  21. #define  RCC_CR_HSICAL_5                     ((uint32_t)0x00002000)/*!<Bit 5 */
  22. #define  RCC_CR_HSICAL_6                     ((uint32_t)0x00004000)/*!<Bit 6 */
  23. #define  RCC_CR_HSICAL_7                     ((uint32_t)0x00008000)/*!<Bit 7 */

  24. #define  RCC_CR_HSEON                        ((uint32_t)0x00010000)
  25. #define  RCC_CR_HSERDY                       ((uint32_t)0x00020000)
  26. #define  RCC_CR_HSEBYP                       ((uint32_t)0x00040000)
  27. #define  RCC_CR_CSSON                        ((uint32_t)0x00080000)
  28. #define  RCC_CR_PLLON                        ((uint32_t)0x01000000)
  29. #define  RCC_CR_PLLRDY                       ((uint32_t)0x02000000)
  30. #define  RCC_CR_PLLI2SON                     ((uint32_t)0x04000000)
  31. #define  RCC_CR_PLLI2SRDY                    ((uint32_t)0x08000000)
  32. #define  RCC_CR_PLLSAION                     ((uint32_t)0x10000000)
  33. #define  RCC_CR_PLLSAIRDY                    ((uint32_t)0x20000000)

  34. /********************  Bit definition for RCC_PLLCFGR register  ***************/
  35. #define  RCC_PLLCFGR_PLLM                    ((uint32_t)0x0000003F)
  36. #define  RCC_PLLCFGR_PLLM_0                  ((uint32_t)0x00000001)
  37. #define  RCC_PLLCFGR_PLLM_1                  ((uint32_t)0x00000002)
  38. #define  RCC_PLLCFGR_PLLM_2                  ((uint32_t)0x00000004)
  39. #define  RCC_PLLCFGR_PLLM_3                  ((uint32_t)0x00000008)
  40. #define  RCC_PLLCFGR_PLLM_4                  ((uint32_t)0x00000010)
  41. #define  RCC_PLLCFGR_PLLM_5                  ((uint32_t)0x00000020)

  42. #define  RCC_PLLCFGR_PLLN                     ((uint32_t)0x00007FC0)
  43. #define  RCC_PLLCFGR_PLLN_0                   ((uint32_t)0x00000040)
  44. #define  RCC_PLLCFGR_PLLN_1                   ((uint32_t)0x00000080)
  45. #define  RCC_PLLCFGR_PLLN_2                   ((uint32_t)0x00000100)
  46. #define  RCC_PLLCFGR_PLLN_3                   ((uint32_t)0x00000200)
  47. #define  RCC_PLLCFGR_PLLN_4                   ((uint32_t)0x00000400)
  48. #define  RCC_PLLCFGR_PLLN_5                   ((uint32_t)0x00000800)
  49. #define  RCC_PLLCFGR_PLLN_6                   ((uint32_t)0x00001000)
  50. #define  RCC_PLLCFGR_PLLN_7                   ((uint32_t)0x00002000)
  51. #define  RCC_PLLCFGR_PLLN_8                   ((uint32_t)0x00004000)

  52. #define  RCC_PLLCFGR_PLLP                    ((uint32_t)0x00030000)
  53. #define  RCC_PLLCFGR_PLLP_0                  ((uint32_t)0x00010000)
  54. #define  RCC_PLLCFGR_PLLP_1                  ((uint32_t)0x00020000)

  55. #define  RCC_PLLCFGR_PLLSRC                  ((uint32_t)0x00400000)
  56. #define  RCC_PLLCFGR_PLLSRC_HSE              ((uint32_t)0x00400000)
  57. #define  RCC_PLLCFGR_PLLSRC_HSI              ((uint32_t)0x00000000)

  58. #define  RCC_PLLCFGR_PLLQ                    ((uint32_t)0x0F000000)
  59. #define  RCC_PLLCFGR_PLLQ_0                  ((uint32_t)0x01000000)
  60. #define  RCC_PLLCFGR_PLLQ_1                  ((uint32_t)0x02000000)
  61. #define  RCC_PLLCFGR_PLLQ_2                  ((uint32_t)0x04000000)
  62. #define  RCC_PLLCFGR_PLLQ_3                  ((uint32_t)0x08000000)

  63. #if defined(STM32F412xG) || defined(STM32F413_423xx) || defined(STM32F446xx) || defined(STM32F469_479xx)
  64. #define  RCC_PLLCFGR_PLLR                    ((uint32_t)0x70000000)
  65. #define  RCC_PLLCFGR_PLLR_0                  ((uint32_t)0x10000000)
  66. #define  RCC_PLLCFGR_PLLR_1                  ((uint32_t)0x20000000)
  67. #define  RCC_PLLCFGR_PLLR_2                  ((uint32_t)0x40000000)
  68. #endif /* STM32F412xG || STM32F413_423xx || STM32F446xx || STM32F469_479xx */

  69. /********************  Bit definition for RCC_CFGR register  ******************/
  70. /*!< SW configuration */
  71. #define  RCC_CFGR_SW                         ((uint32_t)0x00000003)        /*!< SW[1:0] bits (System clock Switch) */
  72. #define  RCC_CFGR_SW_0                       ((uint32_t)0x00000001)        /*!< Bit 0 */
  73. #define  RCC_CFGR_SW_1                       ((uint32_t)0x00000002)        /*!< Bit 1 */

  74. #define  RCC_CFGR_SW_HSI                     ((uint32_t)0x00000000)        /*!< HSI selected as system clock */
  75. #define  RCC_CFGR_SW_HSE                     ((uint32_t)0x00000001)        /*!< HSE selected as system clock */
  76. #define  RCC_CFGR_SW_PLL                     ((uint32_t)0x00000002)        /*!< PLL/PLLP selected as system clock */
  77. #if defined(STM32F412xG) || defined(STM32F413_423xx) || defined(STM32F446xx) || defined(STM32F469_479xx)
  78. #define  RCC_CFGR_SW_PLLR                    ((uint32_t)0x00000003)        /*!< PLL/PLLR selected as system clock */
  79. #endif /* STM32F412xG || STM32F413_423xx || STM32F446xx || STM32F469_479xx */

  80. /*!< SWS configuration */
  81. #define  RCC_CFGR_SWS                        ((uint32_t)0x0000000C)        /*!< SWS[1:0] bits (System Clock Switch Status) */
  82. #define  RCC_CFGR_SWS_0                      ((uint32_t)0x00000004)        /*!< Bit 0 */
  83. #define  RCC_CFGR_SWS_1                      ((uint32_t)0x00000008)        /*!< Bit 1 */

  84. #define  RCC_CFGR_SWS_HSI                    ((uint32_t)0x00000000)        /*!< HSI oscillator used as system clock */
  85. #define  RCC_CFGR_SWS_HSE                    ((uint32_t)0x00000004)        /*!< HSE oscillator used as system clock */
  86. #define  RCC_CFGR_SWS_PLL                    ((uint32_t)0x00000008)        /*!< PLL/PLLP used as system clock       */
  87. #if defined(STM32F412xG) || defined(STM32F413_423xx) || defined(STM32F469_479xx) || defined(STM32F446xx)
  88. #define  RCC_CFGR_SWS_PLLR                   ((uint32_t)0x0000000C)        /*!< PLL/PLLR used as system clock       */
  89. #endif /* STM32F412xG || STM32F413_423xx || STM32F446xx || STM32F469_479xx */

  90. /*!< HPRE configuration */
  91. #define  RCC_CFGR_HPRE                       ((uint32_t)0x000000F0)        /*!< HPRE[3:0] bits (AHB prescaler) */
  92. #define  RCC_CFGR_HPRE_0                     ((uint32_t)0x00000010)        /*!< Bit 0 */
  93. #define  RCC_CFGR_HPRE_1                     ((uint32_t)0x00000020)        /*!< Bit 1 */
  94. #define  RCC_CFGR_HPRE_2                     ((uint32_t)0x00000040)        /*!< Bit 2 */
  95. #define  RCC_CFGR_HPRE_3                     ((uint32_t)0x00000080)        /*!< Bit 3 */

  96. #define  RCC_CFGR_HPRE_DIV1                  ((uint32_t)0x00000000)        /*!< SYSCLK not divided */
  97. #define  RCC_CFGR_HPRE_DIV2                  ((uint32_t)0x00000080)        /*!< SYSCLK divided by 2 */
  98. #define  RCC_CFGR_HPRE_DIV4                  ((uint32_t)0x00000090)        /*!< SYSCLK divided by 4 */
  99. #define  RCC_CFGR_HPRE_DIV8                  ((uint32_t)0x000000A0)        /*!< SYSCLK divided by 8 */
  100. #define  RCC_CFGR_HPRE_DIV16                 ((uint32_t)0x000000B0)        /*!< SYSCLK divided by 16 */
  101. #define  RCC_CFGR_HPRE_DIV64                 ((uint32_t)0x000000C0)        /*!< SYSCLK divided by 64 */
  102. #define  RCC_CFGR_HPRE_DIV128                ((uint32_t)0x000000D0)        /*!< SYSCLK divided by 128 */
  103. #define  RCC_CFGR_HPRE_DIV256                ((uint32_t)0x000000E0)        /*!< SYSCLK divided by 256 */
  104. #define  RCC_CFGR_HPRE_DIV512                ((uint32_t)0x000000F0)        /*!< SYSCLK divided by 512 */

  105. #if defined(STM32F410xx)
  106. /*!< MCO1EN configuration */
  107. #define  RCC_CFGR_MCO1EN                     ((uint32_t)0x00000100)        /*!< MCO1EN bit */
  108. /*!< MCO1EN configuration */
  109. #define  RCC_CFGR_MCO2EN                     ((uint32_t)0x00000200)        /*!< MCO2EN bit */
  110. #endif /* STM32F410xx */
  111. /*!< PPRE1 configuration */
  112. #define  RCC_CFGR_PPRE1                      ((uint32_t)0x00001C00)        /*!< PRE1[2:0] bits (APB1 prescaler) */
  113. #define  RCC_CFGR_PPRE1_0                    ((uint32_t)0x00000400)        /*!< Bit 0 */
  114. #define  RCC_CFGR_PPRE1_1                    ((uint32_t)0x00000800)        /*!< Bit 1 */
  115. #define  RCC_CFGR_PPRE1_2                    ((uint32_t)0x00001000)        /*!< Bit 2 */

  116. #define  RCC_CFGR_PPRE1_DIV1                 ((uint32_t)0x00000000)        /*!< HCLK not divided */
  117. #define  RCC_CFGR_PPRE1_DIV2                 ((uint32_t)0x00001000)        /*!< HCLK divided by 2 */
  118. #define  RCC_CFGR_PPRE1_DIV4                 ((uint32_t)0x00001400)        /*!< HCLK divided by 4 */
  119. #define  RCC_CFGR_PPRE1_DIV8                 ((uint32_t)0x00001800)        /*!< HCLK divided by 8 */
  120. #define  RCC_CFGR_PPRE1_DIV16                ((uint32_t)0x00001C00)        /*!< HCLK divided by 16 */

  121. /*!< PPRE2 configuration */
  122. #define  RCC_CFGR_PPRE2                      ((uint32_t)0x0000E000)        /*!< PRE2[2:0] bits (APB2 prescaler) */
  123. #define  RCC_CFGR_PPRE2_0                    ((uint32_t)0x00002000)        /*!< Bit 0 */
  124. #define  RCC_CFGR_PPRE2_1                    ((uint32_t)0x00004000)        /*!< Bit 1 */
  125. #define  RCC_CFGR_PPRE2_2                    ((uint32_t)0x00008000)        /*!< Bit 2 */

  126. #define  RCC_CFGR_PPRE2_DIV1                 ((uint32_t)0x00000000)        /*!< HCLK not divided */
  127. #define  RCC_CFGR_PPRE2_DIV2                 ((uint32_t)0x00008000)        /*!< HCLK divided by 2 */
  128. #define  RCC_CFGR_PPRE2_DIV4                 ((uint32_t)0x0000A000)        /*!< HCLK divided by 4 */
  129. #define  RCC_CFGR_PPRE2_DIV8                 ((uint32_t)0x0000C000)        /*!< HCLK divided by 8 */
  130. #define  RCC_CFGR_PPRE2_DIV16                ((uint32_t)0x0000E000)        /*!< HCLK divided by 16 */

  131. /*!< RTCPRE configuration */
  132. #define  RCC_CFGR_RTCPRE                     ((uint32_t)0x001F0000)
  133. #define  RCC_CFGR_RTCPRE_0                   ((uint32_t)0x00010000)
  134. #define  RCC_CFGR_RTCPRE_1                   ((uint32_t)0x00020000)
  135. #define  RCC_CFGR_RTCPRE_2                   ((uint32_t)0x00040000)
  136. #define  RCC_CFGR_RTCPRE_3                   ((uint32_t)0x00080000)
  137. #define  RCC_CFGR_RTCPRE_4                   ((uint32_t)0x00100000)

  138. /*!< MCO1 configuration */
  139. #define  RCC_CFGR_MCO1                       ((uint32_t)0x00600000)
  140. #define  RCC_CFGR_MCO1_0                     ((uint32_t)0x00200000)
  141. #define  RCC_CFGR_MCO1_1                     ((uint32_t)0x00400000)

  142. #define  RCC_CFGR_I2SSRC                     ((uint32_t)0x00800000)

  143. #define  RCC_CFGR_MCO1PRE                    ((uint32_t)0x07000000)
  144. #define  RCC_CFGR_MCO1PRE_0                  ((uint32_t)0x01000000)
  145. #define  RCC_CFGR_MCO1PRE_1                  ((uint32_t)0x02000000)
  146. #define  RCC_CFGR_MCO1PRE_2                  ((uint32_t)0x04000000)

  147. #define  RCC_CFGR_MCO2PRE                    ((uint32_t)0x38000000)
  148. #define  RCC_CFGR_MCO2PRE_0                  ((uint32_t)0x08000000)
  149. #define  RCC_CFGR_MCO2PRE_1                  ((uint32_t)0x10000000)
  150. #define  RCC_CFGR_MCO2PRE_2                  ((uint32_t)0x20000000)

  151. #define  RCC_CFGR_MCO2                       ((uint32_t)0xC0000000)
  152. #define  RCC_CFGR_MCO2_0                     ((uint32_t)0x40000000)
  153. #define  RCC_CFGR_MCO2_1                     ((uint32_t)0x80000000)

  154. /********************  Bit definition for RCC_CIR register  *******************/
  155. #define  RCC_CIR_LSIRDYF                     ((uint32_t)0x00000001)
  156. #define  RCC_CIR_LSERDYF                     ((uint32_t)0x00000002)
  157. #define  RCC_CIR_HSIRDYF                     ((uint32_t)0x00000004)
  158. #define  RCC_CIR_HSERDYF                     ((uint32_t)0x00000008)
  159. #define  RCC_CIR_PLLRDYF                     ((uint32_t)0x00000010)
  160. #define  RCC_CIR_PLLI2SRDYF                  ((uint32_t)0x00000020)
  161. #define  RCC_CIR_PLLSAIRDYF                  ((uint32_t)0x00000040)
  162. #define  RCC_CIR_CSSF                        ((uint32_t)0x00000080)
  163. #define  RCC_CIR_LSIRDYIE                    ((uint32_t)0x00000100)
  164. #define  RCC_CIR_LSERDYIE                    ((uint32_t)0x00000200)
  165. #define  RCC_CIR_HSIRDYIE                    ((uint32_t)0x00000400)
  166. #define  RCC_CIR_HSERDYIE                    ((uint32_t)0x00000800)
  167. #define  RCC_CIR_PLLRDYIE                    ((uint32_t)0x00001000)
  168. #define  RCC_CIR_PLLI2SRDYIE                 ((uint32_t)0x00002000)
  169. #define  RCC_CIR_PLLSAIRDYIE                 ((uint32_t)0x00004000)
  170. #define  RCC_CIR_LSIRDYC                     ((uint32_t)0x00010000)
  171. #define  RCC_CIR_LSERDYC                     ((uint32_t)0x00020000)
  172. #define  RCC_CIR_HSIRDYC                     ((uint32_t)0x00040000)
  173. #define  RCC_CIR_HSERDYC                     ((uint32_t)0x00080000)
  174. #define  RCC_CIR_PLLRDYC                     ((uint32_t)0x00100000)
  175. #define  RCC_CIR_PLLI2SRDYC                  ((uint32_t)0x00200000)
  176. #define  RCC_CIR_PLLSAIRDYC                  ((uint32_t)0x00400000)
  177. #define  RCC_CIR_CSSC                        ((uint32_t)0x00800000)

  178. /********************  Bit definition for RCC_AHB1RSTR register  **************/
  179. #define  RCC_AHB1RSTR_GPIOARST               ((uint32_t)0x00000001)
  180. #define  RCC_AHB1RSTR_GPIOBRST               ((uint32_t)0x00000002)
  181. #define  RCC_AHB1RSTR_GPIOCRST               ((uint32_t)0x00000004)
  182. #define  RCC_AHB1RSTR_GPIODRST               ((uint32_t)0x00000008)
  183. #define  RCC_AHB1RSTR_GPIOERST               ((uint32_t)0x00000010)
  184. #define  RCC_AHB1RSTR_GPIOFRST               ((uint32_t)0x00000020)
  185. #define  RCC_AHB1RSTR_GPIOGRST               ((uint32_t)0x00000040)
  186. #define  RCC_AHB1RSTR_GPIOHRST               ((uint32_t)0x00000080)
  187. #define  RCC_AHB1RSTR_GPIOIRST               ((uint32_t)0x00000100)
  188. #define  RCC_AHB1RSTR_GPIOJRST               ((uint32_t)0x00000200)
  189. #define  RCC_AHB1RSTR_GPIOKRST               ((uint32_t)0x00000400)
  190. #define  RCC_AHB1RSTR_CRCRST                 ((uint32_t)0x00001000)
  191. #define  RCC_AHB1RSTR_DMA1RST                ((uint32_t)0x00200000)
  192. #define  RCC_AHB1RSTR_DMA2RST                ((uint32_t)0x00400000)
  193. #define  RCC_AHB1RSTR_DMA2DRST               ((uint32_t)0x00800000)
  194. #define  RCC_AHB1RSTR_ETHMACRST              ((uint32_t)0x02000000)
  195. #define  RCC_AHB1RSTR_OTGHRST                ((uint32_t)0x10000000)

  196. /********************  Bit definition for RCC_AHB2RSTR register  **************/
  197. #define  RCC_AHB2RSTR_DCMIRST                ((uint32_t)0x00000001)
  198. #define  RCC_AHB2RSTR_CRYPRST                ((uint32_t)0x00000010)
  199. #define  RCC_AHB2RSTR_HASHRST                ((uint32_t)0x00000020)
  200. /* maintained for legacy purpose */
  201. #define  RCC_AHB2RSTR_HSAHRST                RCC_AHB2RSTR_HASHRST
  202. #define  RCC_AHB2RSTR_RNGRST                 ((uint32_t)0x00000040)
  203. #define  RCC_AHB2RSTR_OTGFSRST               ((uint32_t)0x00000080)

  204. /********************  Bit definition for RCC_AHB3RSTR register  **************/
  205. #if defined(STM32F40_41xxx) || defined(STM32F412xG) || defined(STM32F413_423xx)
  206. #define  RCC_AHB3RSTR_FSMCRST                ((uint32_t)0x00000001)
  207. #endif /* STM32F40_41xxx || STM32F412xG || STM32F413_423xx */

  208. #if defined(STM32F427_437xx) || defined(STM32F429_439xx) || defined(STM32F446xx) || defined(STM32F469_479xx)
  209. #define  RCC_AHB3RSTR_FMCRST                ((uint32_t)0x00000001)
  210. #endif /* STM32F427_437xx ||  STM32F429_439xx || STM32F446xx || STM32F469_479xx */
  211. #if defined(STM32F412xG) || defined(STM32F413_423xx) || defined(STM32F446xx) || defined(STM32F469_479xx)
  212. #define  RCC_AHB3RSTR_QSPIRST               ((uint32_t)0x00000002)
  213. #endif /* STM32F412xG || STM32F413_423xx || STM32F446xx || STM32F469_479xx */

  214. /********************  Bit definition for RCC_APB1RSTR register  **************/
  215. #define  RCC_APB1RSTR_TIM2RST                ((uint32_t)0x00000001)
  216. #define  RCC_APB1RSTR_TIM3RST                ((uint32_t)0x00000002)
  217. #define  RCC_APB1RSTR_TIM4RST                ((uint32_t)0x00000004)
  218. #define  RCC_APB1RSTR_TIM5RST                ((uint32_t)0x00000008)
  219. #define  RCC_APB1RSTR_TIM6RST                ((uint32_t)0x00000010)
  220. #define  RCC_APB1RSTR_TIM7RST                ((uint32_t)0x00000020)
  221. #define  RCC_APB1RSTR_TIM12RST               ((uint32_t)0x00000040)
  222. #define  RCC_APB1RSTR_TIM13RST               ((uint32_t)0x00000080)
  223. #define  RCC_APB1RSTR_TIM14RST               ((uint32_t)0x00000100)
  224. #if defined(STM32F410xx) || defined(STM32F413_423xx)
  225. #define  RCC_APB1RSTR_LPTIM1RST              ((uint32_t)0x00000200)
  226. #endif /* STM32F410xx || STM32F413_423xx */
  227. #define  RCC_APB1RSTR_WWDGRST                ((uint32_t)0x00000800)
  228. #define  RCC_APB1RSTR_SPI2RST                ((uint32_t)0x00004000)
  229. #define  RCC_APB1RSTR_SPI3RST                ((uint32_t)0x00008000)
  230. #if defined(STM32F446xx)
  231. #define  RCC_APB1RSTR_SPDIFRXRST             ((uint32_t)0x00010000)
  232. #endif /* STM32F446xx */
  233. #define  RCC_APB1RSTR_USART2RST              ((uint32_t)0x00020000)
  234. #define  RCC_APB1RSTR_USART3RST              ((uint32_t)0x00040000)
  235. #define  RCC_APB1RSTR_UART4RST               ((uint32_t)0x00080000)
  236. #define  RCC_APB1RSTR_UART5RST               ((uint32_t)0x00100000)
  237. #define  RCC_APB1RSTR_I2C1RST                ((uint32_t)0x00200000)
  238. #define  RCC_APB1RSTR_I2C2RST                ((uint32_t)0x00400000)
  239. #define  RCC_APB1RSTR_I2C3RST                ((uint32_t)0x00800000)
  240. #if defined(STM32F410xx) || defined(STM32F412xG) || defined(STM32F413_423xx) || defined(STM32F446xx)
  241. #define  RCC_APB1RSTR_FMPI2C1RST             ((uint32_t)0x01000000)
  242. #endif /* STM32F410xx || STM32F412xG || STM32F413_423xx || STM32F446xx */
  243. #define  RCC_APB1RSTR_CAN1RST                ((uint32_t)0x02000000)
  244. #define  RCC_APB1RSTR_CAN2RST                ((uint32_t)0x04000000)
  245. #if defined(STM32F446xx)
  246. #define  RCC_APB1RSTR_CECRST                 ((uint32_t)0x08000000)
  247. #endif /* STM32F446xx */
  248. #define  RCC_APB1RSTR_PWRRST                 ((uint32_t)0x10000000)
  249. #define  RCC_APB1RSTR_DACRST                 ((uint32_t)0x20000000)
  250. #define  RCC_APB1RSTR_UART7RST               ((uint32_t)0x40000000)
  251. #define  RCC_APB1RSTR_UART8RST               ((uint32_t)0x80000000)

  252. /********************  Bit definition for RCC_APB2RSTR register  **************/
  253. #define  RCC_APB2RSTR_TIM1RST                ((uint32_t)0x00000001)
  254. #define  RCC_APB2RSTR_TIM8RST                ((uint32_t)0x00000002)
  255. #define  RCC_APB2RSTR_USART1RST              ((uint32_t)0x00000010)
  256. #define  RCC_APB2RSTR_USART6RST              ((uint32_t)0x00000020)
  257. #define  RCC_APB2RSTR_UART9RST               ((uint32_t)0x00000040)
  258. #define  RCC_APB2RSTR_UART10RST              ((uint32_t)0x00000080)
  259. #define  RCC_APB2RSTR_ADCRST                 ((uint32_t)0x00000100)
  260. #define  RCC_APB2RSTR_SDIORST                ((uint32_t)0x00000800)
  261. #define  RCC_APB2RSTR_SPI1RST                ((uint32_t)0x00001000)
  262. #define  RCC_APB2RSTR_SPI4RST                ((uint32_t)0x00002000)
  263. #define  RCC_APB2RSTR_SYSCFGRST              ((uint32_t)0x00004000)
  264. #define  RCC_APB2RSTR_TIM9RST                ((uint32_t)0x00010000)
  265. #define  RCC_APB2RSTR_TIM10RST               ((uint32_t)0x00020000)
  266. #define  RCC_APB2RSTR_TIM11RST               ((uint32_t)0x00040000)
  267. #define  RCC_APB2RSTR_SPI5RST                ((uint32_t)0x00100000)
  268. #define  RCC_APB2RSTR_SPI6RST                ((uint32_t)0x00200000)
  269. #define  RCC_APB2RSTR_SAI1RST                ((uint32_t)0x00400000)
  270. #if defined(STM32F446xx)
  271. #define  RCC_APB2RSTR_SAI2RST                ((uint32_t)0x00800000)
  272. #endif /* STM32F446xx */
  273. #define  RCC_APB2RSTR_LTDCRST                ((uint32_t)0x04000000)
  274. #if defined(STM32F469_479xx)
  275. #define  RCC_APB2RSTR_DSIRST                 ((uint32_t)0x08000000)
  276. #endif /* STM32F469_479xx */
  277. #if defined(STM32F412xG) || defined(STM32F413_423xx)
  278. #define  RCC_APB2RSTR_DFSDM1RST              ((uint32_t)0x01000000)
  279. #endif /* STM32F412xG || STM32F413_423xx */

  280. #if defined(STM32F413_423xx)
  281. #define  RCC_APB2RSTR_DFSDM2RST              ((uint32_t)0x02000000)
  282. #endif /* STM32F413_423xx */
  283. /* Old definitions, maintained for legacy purpose */
  284. #define  RCC_APB2RSTR_SPI1                   RCC_APB2RSTR_SPI1RST
  285. #define  RCC_APB2RSTR_DFSDMRST               RCC_APB2RSTR_DFSDM1RST

  286. /********************  Bit definition for RCC_AHB1ENR register  ***************/
  287. #define  RCC_AHB1ENR_GPIOAEN                 ((uint32_t)0x00000001)
  288. #define  RCC_AHB1ENR_GPIOBEN                 ((uint32_t)0x00000002)
  289. #define  RCC_AHB1ENR_GPIOCEN                 ((uint32_t)0x00000004)
  290. #define  RCC_AHB1ENR_GPIODEN                 ((uint32_t)0x00000008)
  291. #define  RCC_AHB1ENR_GPIOEEN                 ((uint32_t)0x00000010)
  292. #define  RCC_AHB1ENR_GPIOFEN                 ((uint32_t)0x00000020)
  293. #define  RCC_AHB1ENR_GPIOGEN                 ((uint32_t)0x00000040)
  294. #define  RCC_AHB1ENR_GPIOHEN                 ((uint32_t)0x00000080)
  295. #define  RCC_AHB1ENR_GPIOIEN                 ((uint32_t)0x00000100)
  296. #define  RCC_AHB1ENR_GPIOJEN                 ((uint32_t)0x00000200)
  297. #define  RCC_AHB1ENR_GPIOKEN                 ((uint32_t)0x00000400)
  298. #define  RCC_AHB1ENR_CRCEN                   ((uint32_t)0x00001000)
  299. #define  RCC_AHB1ENR_BKPSRAMEN               ((uint32_t)0x00040000)
  300. #define  RCC_AHB1ENR_CCMDATARAMEN            ((uint32_t)0x00100000)
  301. #define  RCC_AHB1ENR_DMA1EN                  ((uint32_t)0x00200000)
  302. #define  RCC_AHB1ENR_DMA2EN                  ((uint32_t)0x00400000)
  303. #define  RCC_AHB1ENR_DMA2DEN                 ((uint32_t)0x00800000)
  304. #define  RCC_AHB1ENR_ETHMACEN                ((uint32_t)0x02000000)
  305. #define  RCC_AHB1ENR_ETHMACTXEN              ((uint32_t)0x04000000)
  306. #define  RCC_AHB1ENR_ETHMACRXEN              ((uint32_t)0x08000000)
  307. #define  RCC_AHB1ENR_ETHMACPTPEN             ((uint32_t)0x10000000)
  308. #define  RCC_AHB1ENR_OTGHSEN                 ((uint32_t)0x20000000)
  309. #define  RCC_AHB1ENR_OTGHSULPIEN             ((uint32_t)0x40000000)

  310. /********************  Bit definition for RCC_AHB2ENR register  ***************/
  311. #define  RCC_AHB2ENR_DCMIEN                  ((uint32_t)0x00000001)
  312. #define  RCC_AHB2ENR_CRYPEN                  ((uint32_t)0x00000010)
  313. #define  RCC_AHB2ENR_HASHEN                  ((uint32_t)0x00000020)
  314. #define  RCC_AHB2ENR_RNGEN                   ((uint32_t)0x00000040)
  315. #define  RCC_AHB2ENR_OTGFSEN                 ((uint32_t)0x00000080)

  316. /********************  Bit definition for RCC_AHB3ENR register  ***************/

  317. #if defined(STM32F40_41xxx) || defined(STM32F412xG) || defined(STM32F413_423xx)
  318. #define  RCC_AHB3ENR_FSMCEN                  ((uint32_t)0x00000001)
  319. #endif /* STM32F40_41xxx || STM32F412xG || STM32F413_423xx */

  320. #if defined(STM32F427_437xx) || defined(STM32F429_439xx) || defined(STM32F446xx) || defined(STM32F469_479xx)
  321. #define  RCC_AHB3ENR_FMCEN                  ((uint32_t)0x00000001)
  322. #endif /* STM32F427_437xx ||  STM32F429_439xx || STM32F446xx || STM32F469_479xx */

  323. #if defined(STM32F412xG) || defined(STM32F413_423xx) || defined(STM32F446xx) || defined(STM32F469_479xx)
  324. #define  RCC_AHB3ENR_QSPIEN                 ((uint32_t)0x00000002)
  325. #endif /* STM32F412xG || STM32F413_423xx || STM32F446xx || STM32F469_479xx */

  326. /********************  Bit definition for RCC_APB1ENR register  ***************/
  327. #define  RCC_APB1ENR_TIM2EN                  ((uint32_t)0x00000001)
  328. #define  RCC_APB1ENR_TIM3EN                  ((uint32_t)0x00000002)
  329. #define  RCC_APB1ENR_TIM4EN                  ((uint32_t)0x00000004)
  330. #define  RCC_APB1ENR_TIM5EN                  ((uint32_t)0x00000008)
  331. #define  RCC_APB1ENR_TIM6EN                  ((uint32_t)0x00000010)
  332. #define  RCC_APB1ENR_TIM7EN                  ((uint32_t)0x00000020)
  333. #define  RCC_APB1ENR_TIM12EN                 ((uint32_t)0x00000040)
  334. #define  RCC_APB1ENR_TIM13EN                 ((uint32_t)0x00000080)
  335. #define  RCC_APB1ENR_TIM14EN                 ((uint32_t)0x00000100)
  336. #if defined(STM32F410xx) || defined(STM32F413_423xx)
  337. #define  RCC_APB1ENR_LPTIM1EN                ((uint32_t)0x00000200)
  338. #endif /* STM32F410xx || STM32F413_423xx */
  339. #define  RCC_APB1ENR_WWDGEN                  ((uint32_t)0x00000800)
  340. #define  RCC_APB1ENR_SPI2EN                  ((uint32_t)0x00004000)
  341. #define  RCC_APB1ENR_SPI3EN                  ((uint32_t)0x00008000)
  342. #if defined(STM32F446xx)
  343. #define  RCC_APB1ENR_SPDIFRXEN               ((uint32_t)0x00010000)
  344. #endif /* STM32F446xx */
  345. #define  RCC_APB1ENR_USART2EN                ((uint32_t)0x00020000)
  346. #define  RCC_APB1ENR_USART3EN                ((uint32_t)0x00040000)
  347. #define  RCC_APB1ENR_UART4EN                 ((uint32_t)0x00080000)
  348. #define  RCC_APB1ENR_UART5EN                 ((uint32_t)0x00100000)
  349. #define  RCC_APB1ENR_I2C1EN                  ((uint32_t)0x00200000)
  350. #define  RCC_APB1ENR_I2C2EN                  ((uint32_t)0x00400000)
  351. #define  RCC_APB1ENR_I2C3EN                  ((uint32_t)0x00800000)
  352. #if defined(STM32F410xx) || defined(STM32F412xG) || defined(STM32F413_423xx) || defined(STM32F446xx)
  353. #define  RCC_APB1ENR_FMPI2C1EN               ((uint32_t)0x01000000)
  354. #endif /* STM32F410xx || STM32F412xG || STM32F413_423xx || STM32F446xx */
  355. #define  RCC_APB1ENR_CAN1EN                  ((uint32_t)0x02000000)
  356. #define  RCC_APB1ENR_CAN2EN                  ((uint32_t)0x04000000)
  357. #if defined(STM32F446xx)
  358. #define  RCC_APB1ENR_CECEN                   ((uint32_t)0x08000000)
  359. #endif /* STM32F446xx */
  360. #define  RCC_APB1ENR_PWREN                   ((uint32_t)0x10000000)
  361. #define  RCC_APB1ENR_DACEN                   ((uint32_t)0x20000000)
  362. #define  RCC_APB1ENR_UART7EN                 ((uint32_t)0x40000000)
  363. #define  RCC_APB1ENR_UART8EN                 ((uint32_t)0x80000000)

  364. /********************  Bit definition for RCC_APB2ENR register  ***************/
  365. #define  RCC_APB2ENR_TIM1EN                  ((uint32_t)0x00000001)
  366. #define  RCC_APB2ENR_TIM8EN                  ((uint32_t)0x00000002)
  367. #define  RCC_APB2ENR_USART1EN                ((uint32_t)0x00000010)
  368. #define  RCC_APB2ENR_USART6EN                ((uint32_t)0x00000020)
  369. #define  RCC_APB2ENR_UART9EN                 ((uint32_t)0x00000040)
  370. #define  RCC_APB2ENR_UART10EN                ((uint32_t)0x00000080)
  371. #define  RCC_APB2ENR_ADC1EN                  ((uint32_t)0x00000100)
  372. #define  RCC_APB2ENR_ADC2EN                  ((uint32_t)0x00000200)
  373. #define  RCC_APB2ENR_ADC3EN                  ((uint32_t)0x00000400)
  374. #define  RCC_APB2ENR_SDIOEN                  ((uint32_t)0x00000800)
  375. #define  RCC_APB2ENR_SPI1EN                  ((uint32_t)0x00001000)
  376. #define  RCC_APB2ENR_SPI4EN                  ((uint32_t)0x00002000)
  377. #define  RCC_APB2ENR_SYSCFGEN                ((uint32_t)0x00004000)
  378. #define  RCC_APB2ENR_EXTIEN                  ((uint32_t)0x00008000)
  379. #define  RCC_APB2ENR_TIM9EN                  ((uint32_t)0x00010000)
  380. #define  RCC_APB2ENR_TIM10EN                 ((uint32_t)0x00020000)
  381. #define  RCC_APB2ENR_TIM11EN                 ((uint32_t)0x00040000)
  382. #define  RCC_APB2ENR_SPI5EN                  ((uint32_t)0x00100000)
  383. #define  RCC_APB2ENR_SPI6EN                  ((uint32_t)0x00200000)
  384. #define  RCC_APB2ENR_SAI1EN                  ((uint32_t)0x00400000)
  385. #if defined(STM32F446xx)
  386. #define  RCC_APB2ENR_SAI2EN                  ((uint32_t)0x00800000)
  387. #endif /* STM32F446xx */
  388. #define  RCC_APB2ENR_LTDCEN                  ((uint32_t)0x04000000)
  389. #if defined(STM32F469_479xx)
  390. #define  RCC_APB2ENR_DSIEN                   ((uint32_t)0x08000000)
  391. #endif /* STM32F469_479xx */
  392. #if defined(STM32F412xG) || defined(STM32F413_423xx)
  393. #define  RCC_APB2ENR_DFSDM1EN                ((uint32_t)0x01000000)
  394. #endif /* STM32F412xG || STM32F413_423xx */
  395. #if defined(STM32F413_423xx)
  396. #define  RCC_APB2ENR_DFSDM2EN                ((uint32_t)0x02000000)
  397. #endif /* STM32F413_423xx */
  398. /********************  Bit definition for RCC_AHB1LPENR register  *************/
  399. #define  RCC_AHB1LPENR_GPIOALPEN             ((uint32_t)0x00000001)
  400. #define  RCC_AHB1LPENR_GPIOBLPEN             ((uint32_t)0x00000002)
  401. #define  RCC_AHB1LPENR_GPIOCLPEN             ((uint32_t)0x00000004)
  402. #define  RCC_AHB1LPENR_GPIODLPEN             ((uint32_t)0x00000008)
  403. #define  RCC_AHB1LPENR_GPIOELPEN             ((uint32_t)0x00000010)
  404. #define  RCC_AHB1LPENR_GPIOFLPEN             ((uint32_t)0x00000020)
  405. #define  RCC_AHB1LPENR_GPIOGLPEN             ((uint32_t)0x00000040)
  406. #define  RCC_AHB1LPENR_GPIOHLPEN             ((uint32_t)0x00000080)
  407. #define  RCC_AHB1LPENR_GPIOILPEN             ((uint32_t)0x00000100)
  408. #define  RCC_AHB1LPENR_GPIOJLPEN             ((uint32_t)0x00000200)
  409. #define  RCC_AHB1LPENR_GPIOKLPEN             ((uint32_t)0x00000400)
  410. #define  RCC_AHB1LPENR_CRCLPEN               ((uint32_t)0x00001000)
  411. #define  RCC_AHB1LPENR_FLITFLPEN             ((uint32_t)0x00008000)
  412. #define  RCC_AHB1LPENR_SRAM1LPEN             ((uint32_t)0x00010000)
  413. #define  RCC_AHB1LPENR_SRAM2LPEN             ((uint32_t)0x00020000)
  414. #define  RCC_AHB1LPENR_BKPSRAMLPEN           ((uint32_t)0x00040000)
  415. #define  RCC_AHB1LPENR_SRAM3LPEN             ((uint32_t)0x00080000)
  416. #define  RCC_AHB1LPENR_DMA1LPEN              ((uint32_t)0x00200000)
  417. #define  RCC_AHB1LPENR_DMA2LPEN              ((uint32_t)0x00400000)
  418. #define  RCC_AHB1LPENR_DMA2DLPEN             ((uint32_t)0x00800000)
  419. #define  RCC_AHB1LPENR_ETHMACLPEN            ((uint32_t)0x02000000)
  420. #define  RCC_AHB1LPENR_ETHMACTXLPEN          ((uint32_t)0x04000000)
  421. #define  RCC_AHB1LPENR_ETHMACRXLPEN          ((uint32_t)0x08000000)
  422. #define  RCC_AHB1LPENR_ETHMACPTPLPEN         ((uint32_t)0x10000000)
  423. #define  RCC_AHB1LPENR_OTGHSLPEN             ((uint32_t)0x20000000)
  424. #define  RCC_AHB1LPENR_OTGHSULPILPEN         ((uint32_t)0x40000000)

  425. /********************  Bit definition for RCC_AHB2LPENR register  *************/
  426. #define  RCC_AHB2LPENR_DCMILPEN              ((uint32_t)0x00000001)
  427. #define  RCC_AHB2LPENR_CRYPLPEN              ((uint32_t)0x00000010)
  428. #define  RCC_AHB2LPENR_HASHLPEN              ((uint32_t)0x00000020)
  429. #define  RCC_AHB2LPENR_RNGLPEN               ((uint32_t)0x00000040)
  430. #define  RCC_AHB2LPENR_OTGFSLPEN             ((uint32_t)0x00000080)

  431. /********************  Bit definition for RCC_AHB3LPENR register  *************/
  432. #if defined(STM32F40_41xxx) || defined(STM32F412xG) || defined(STM32F413_423xx)
  433. #define  RCC_AHB3LPENR_FSMCLPEN              ((uint32_t)0x00000001)
  434. #endif /* STM32F40_41xxx || STM32F412xG || STM32F413_423xx */

  435. #if defined(STM32F427_437xx) || defined(STM32F429_439xx) || defined(STM32F446xx) || defined(STM32F469_479xx)
  436. #define  RCC_AHB3LPENR_FMCLPEN              ((uint32_t)0x00000001)
  437. #endif /* STM32F427_437xx ||  STM32F429_439xx  || STM32F446xx || STM32F469_479xx */
  438. #if defined(STM32F412xG) || defined(STM32F413_423xx) || defined(STM32F446xx) || defined(STM32F469_479xx)
  439. #define  RCC_AHB3LPENR_QSPILPEN             ((uint32_t)0x00000002)
  440. #endif /* STM32F412xG || STM32F413_423xx || STM32F469_479xx || STM32F446xx */

  441. /********************  Bit definition for RCC_APB1LPENR register  *************/
  442. #define  RCC_APB1LPENR_TIM2LPEN              ((uint32_t)0x00000001)
  443. #define  RCC_APB1LPENR_TIM3LPEN              ((uint32_t)0x00000002)
  444. #define  RCC_APB1LPENR_TIM4LPEN              ((uint32_t)0x00000004)
  445. #define  RCC_APB1LPENR_TIM5LPEN              ((uint32_t)0x00000008)
  446. #define  RCC_APB1LPENR_TIM6LPEN              ((uint32_t)0x00000010)
  447. #define  RCC_APB1LPENR_TIM7LPEN              ((uint32_t)0x00000020)
  448. #define  RCC_APB1LPENR_TIM12LPEN             ((uint32_t)0x00000040)
  449. #define  RCC_APB1LPENR_TIM13LPEN             ((uint32_t)0x00000080)
  450. #define  RCC_APB1LPENR_TIM14LPEN             ((uint32_t)0x00000100)
  451. #if defined(STM32F410xx) || defined(STM32F413_423xx)
  452. #define  RCC_APB1LPENR_LPTIM1LPEN            ((uint32_t)0x00000200)
  453. #endif /* STM32F410xx || STM32F413_423xx */
  454. #define  RCC_APB1LPENR_WWDGLPEN              ((uint32_t)0x00000800)
  455. #define  RCC_APB1LPENR_SPI2LPEN              ((uint32_t)0x00004000)
  456. #define  RCC_APB1LPENR_SPI3LPEN              ((uint32_t)0x00008000)
  457. #if defined(STM32F446xx)
  458. #define  RCC_APB1LPENR_SPDIFRXLPEN           ((uint32_t)0x00010000)
  459. #endif /* STM32F446xx */
  460. #define  RCC_APB1LPENR_USART2LPEN            ((uint32_t)0x00020000)
  461. #define  RCC_APB1LPENR_USART3LPEN            ((uint32_t)0x00040000)
  462. #define  RCC_APB1LPENR_UART4LPEN             ((uint32_t)0x00080000)
  463. #define  RCC_APB1LPENR_UART5LPEN             ((uint32_t)0x00100000)
  464. #define  RCC_APB1LPENR_I2C1LPEN              ((uint32_t)0x00200000)
  465. #define  RCC_APB1LPENR_I2C2LPEN              ((uint32_t)0x00400000)
  466. #define  RCC_APB1LPENR_I2C3LPEN              ((uint32_t)0x00800000)
  467. #if defined(STM32F410xx) || defined(STM32F412xG) || defined(STM32F413_423xx) || defined(STM32F446xx)
  468. #define  RCC_APB1LPENR_FMPI2C1LPEN           ((uint32_t)0x01000000)
  469. #endif /* STM32F410xx || STM32F412xG || STM32F413_423xx || STM32F446xx */
  470. #define  RCC_APB1LPENR_CAN1LPEN              ((uint32_t)0x02000000)
  471. #define  RCC_APB1LPENR_CAN2LPEN              ((uint32_t)0x04000000)
  472. #if defined(STM32F446xx)
  473. #define  RCC_APB1LPENR_CECLPEN               ((uint32_t)0x08000000)
  474. #endif /* STM32F446xx */
  475. #define  RCC_APB1LPENR_PWRLPEN               ((uint32_t)0x10000000)
  476. #define  RCC_APB1LPENR_DACLPEN               ((uint32_t)0x20000000)
  477. #define  RCC_APB1LPENR_UART7LPEN             ((uint32_t)0x40000000)
  478. #define  RCC_APB1LPENR_UART8LPEN             ((uint32_t)0x80000000)

  479. /********************  Bit definition for RCC_APB2LPENR register  *************/
  480. #define  RCC_APB2LPENR_TIM1LPEN              ((uint32_t)0x00000001)
  481. #define  RCC_APB2LPENR_TIM8LPEN              ((uint32_t)0x00000002)
  482. #define  RCC_APB2LPENR_USART1LPEN            ((uint32_t)0x00000010)
  483. #define  RCC_APB2LPENR_USART6LPEN            ((uint32_t)0x00000020)
  484. #define  RCC_APB2LPENR_UART9LPEN             ((uint32_t)0x00000040)
  485. #define  RCC_APB2LPENR_UART10LPEN            ((uint32_t)0x00000080)
  486. #define  RCC_APB2LPENR_ADC1LPEN              ((uint32_t)0x00000100)
  487. #define  RCC_APB2LPENR_ADC2PEN               ((uint32_t)0x00000200)
  488. #define  RCC_APB2LPENR_ADC3LPEN              ((uint32_t)0x00000400)
  489. #define  RCC_APB2LPENR_SDIOLPEN              ((uint32_t)0x00000800)
  490. #define  RCC_APB2LPENR_SPI1LPEN              ((uint32_t)0x00001000)
  491. #define  RCC_APB2LPENR_SPI4LPEN              ((uint32_t)0x00002000)
  492. #define  RCC_APB2LPENR_SYSCFGLPEN            ((uint32_t)0x00004000)
  493. #define  RCC_APB2LPENR_TIM9LPEN              ((uint32_t)0x00010000)
  494. #define  RCC_APB2LPENR_TIM10LPEN             ((uint32_t)0x00020000)
  495. #define  RCC_APB2LPENR_TIM11LPEN             ((uint32_t)0x00040000)
  496. #define  RCC_APB2LPENR_SPI5LPEN              ((uint32_t)0x00100000)
  497. #define  RCC_APB2LPENR_SPI6LPEN              ((uint32_t)0x00200000)
  498. #define  RCC_APB2LPENR_SAI1LPEN              ((uint32_t)0x00400000)
  499. #if defined(STM32F446xx)
  500. #define  RCC_APB2LPENR_SAI2LPEN              ((uint32_t)0x00800000)
  501. #endif /* STM32F446xx */
  502. #define  RCC_APB2LPENR_LTDCLPEN              ((uint32_t)0x04000000)
  503. #if defined(STM32F469_479xx)
  504. #define  RCC_APB2LPENR_DSILPEN               ((uint32_t)0x08000000)
  505. #endif /* STM32F469_479xx */
  506. #if defined(STM32F412xG) || defined(STM32F413_423xx)
  507. #define  RCC_APB2LPENR_DFSDM1LPEN            ((uint32_t)0x01000000)
  508. #endif /* STM32F412xG || STM32F413_423xx */
  509. #if defined(STM32F413_423xx)
  510. #define  RCC_APB2LPENR_DFSDM2LPEN            ((uint32_t)0x02000000)
  511. #endif /* STM32F413_423xx */

  512. /********************  Bit definition for RCC_BDCR register  ******************/
  513. #define  RCC_BDCR_LSEON                      ((uint32_t)0x00000001)
  514. #define  RCC_BDCR_LSERDY                     ((uint32_t)0x00000002)
  515. #define  RCC_BDCR_LSEBYP                     ((uint32_t)0x00000004)
  516. #define  RCC_BDCR_LSEMOD                     ((uint32_t)0x00000008)

  517. #define  RCC_BDCR_RTCSEL                    ((uint32_t)0x00000300)
  518. #define  RCC_BDCR_RTCSEL_0                  ((uint32_t)0x00000100)
  519. #define  RCC_BDCR_RTCSEL_1                  ((uint32_t)0x00000200)

  520. #define  RCC_BDCR_RTCEN                      ((uint32_t)0x00008000)
  521. #define  RCC_BDCR_BDRST                      ((uint32_t)0x00010000)

  522. /********************  Bit definition for RCC_CSR register  *******************/
  523. #define  RCC_CSR_LSION                       ((uint32_t)0x00000001)
  524. #define  RCC_CSR_LSIRDY                      ((uint32_t)0x00000002)
  525. #define  RCC_CSR_RMVF                        ((uint32_t)0x01000000)
  526. #define  RCC_CSR_BORRSTF                     ((uint32_t)0x02000000)
  527. #define  RCC_CSR_PADRSTF                     ((uint32_t)0x04000000)
  528. #define  RCC_CSR_PORRSTF                     ((uint32_t)0x08000000)
  529. #define  RCC_CSR_SFTRSTF                     ((uint32_t)0x10000000)
  530. #define  RCC_CSR_WDGRSTF                     ((uint32_t)0x20000000)
  531. #define  RCC_CSR_WWDGRSTF                    ((uint32_t)0x40000000)
  532. #define  RCC_CSR_LPWRRSTF                    ((uint32_t)0x80000000)

  533. /********************  Bit definition for RCC_SSCGR register  *****************/
  534. #define  RCC_SSCGR_MODPER                    ((uint32_t)0x00001FFF)
  535. #define  RCC_SSCGR_INCSTEP                   ((uint32_t)0x0FFFE000)
  536. #define  RCC_SSCGR_SPREADSEL                 ((uint32_t)0x40000000)
  537. #define  RCC_SSCGR_SSCGEN                    ((uint32_t)0x80000000)

  538. /********************  Bit definition for RCC_PLLI2SCFGR register  ************/
  539. #define  RCC_PLLI2SCFGR_PLLI2SM              ((uint32_t)0x0000003F)
  540. #define  RCC_PLLI2SCFGR_PLLI2SM_0            ((uint32_t)0x00000001)
  541. #define  RCC_PLLI2SCFGR_PLLI2SM_1            ((uint32_t)0x00000002)
  542. #define  RCC_PLLI2SCFGR_PLLI2SM_2            ((uint32_t)0x00000004)
  543. #define  RCC_PLLI2SCFGR_PLLI2SM_3            ((uint32_t)0x00000008)
  544. #define  RCC_PLLI2SCFGR_PLLI2SM_4            ((uint32_t)0x00000010)
  545. #define  RCC_PLLI2SCFGR_PLLI2SM_5            ((uint32_t)0x00000020)

  546. #define  RCC_PLLI2SCFGR_PLLI2SN              ((uint32_t)0x00007FC0)
  547. #define  RCC_PLLI2SCFGR_PLLI2SN_0            ((uint32_t)0x00000040)
  548. #define  RCC_PLLI2SCFGR_PLLI2SN_1            ((uint32_t)0x00000080)
  549. #define  RCC_PLLI2SCFGR_PLLI2SN_2            ((uint32_t)0x00000100)
  550. #define  RCC_PLLI2SCFGR_PLLI2SN_3            ((uint32_t)0x00000200)
  551. #define  RCC_PLLI2SCFGR_PLLI2SN_4            ((uint32_t)0x00000400)
  552. #define  RCC_PLLI2SCFGR_PLLI2SN_5            ((uint32_t)0x00000800)
  553. #define  RCC_PLLI2SCFGR_PLLI2SN_6            ((uint32_t)0x00001000)
  554. #define  RCC_PLLI2SCFGR_PLLI2SN_7            ((uint32_t)0x00002000)
  555. #define  RCC_PLLI2SCFGR_PLLI2SN_8            ((uint32_t)0x00004000)

  556. #if defined(STM32F412xG) || defined(STM32F413_423xx)
  557. #define  RCC_PLLI2SCFGR_PLLI2SSRC            ((uint32_t)0x00400000)
  558. #endif /* STM32F412xG || STM32F413_423xx */

  559. #if defined(STM32F446xx)
  560. #define  RCC_PLLI2SCFGR_PLLI2SP              ((uint32_t)0x00030000)
  561. #define  RCC_PLLI2SCFGR_PLLI2SP_0            ((uint32_t)0x00010000)
  562. #define  RCC_PLLI2SCFGR_PLLI2SP_1            ((uint32_t)0x00020000)
  563. #endif /* STM32F446xx */

  564. #define  RCC_PLLI2SCFGR_PLLI2SQ              ((uint32_t)0x0F000000)
  565. #define  RCC_PLLI2SCFGR_PLLI2SQ_0            ((uint32_t)0x01000000)
  566. #define  RCC_PLLI2SCFGR_PLLI2SQ_1            ((uint32_t)0x02000000)
  567. #define  RCC_PLLI2SCFGR_PLLI2SQ_2            ((uint32_t)0x04000000)
  568. #define  RCC_PLLI2SCFGR_PLLI2SQ_3            ((uint32_t)0x08000000)

  569. #define  RCC_PLLI2SCFGR_PLLI2SR              ((uint32_t)0x70000000)
  570. #define  RCC_PLLI2SCFGR_PLLI2SR_0            ((uint32_t)0x10000000)
  571. #define  RCC_PLLI2SCFGR_PLLI2SR_1            ((uint32_t)0x20000000)
  572. #define  RCC_PLLI2SCFGR_PLLI2SR_2            ((uint32_t)0x40000000)

  573. /********************  Bit definition for RCC_PLLSAICFGR register  ************/
  574. #if defined(STM32F446xx)
  575. #define  RCC_PLLSAICFGR_PLLSAIM              ((uint32_t)0x0000003F)
  576. #define  RCC_PLLSAICFGR_PLLSAIM_0            ((uint32_t)0x00000001)
  577. #define  RCC_PLLSAICFGR_PLLSAIM_1            ((uint32_t)0x00000002)
  578. #define  RCC_PLLSAICFGR_PLLSAIM_2            ((uint32_t)0x00000004)
  579. #define  RCC_PLLSAICFGR_PLLSAIM_3            ((uint32_t)0x00000008)
  580. #define  RCC_PLLSAICFGR_PLLSAIM_4            ((uint32_t)0x00000010)
  581. #define  RCC_PLLSAICFGR_PLLSAIM_5            ((uint32_t)0x00000020)
  582. #endif /* STM32F446xx */

  583. #define  RCC_PLLSAICFGR_PLLSAIN              ((uint32_t)0x00007FC0)
  584. #define  RCC_PLLSAICFGR_PLLSAIN_0            ((uint32_t)0x00000040)
  585. #define  RCC_PLLSAICFGR_PLLSAIN_1            ((uint32_t)0x00000080)
  586. #define  RCC_PLLSAICFGR_PLLSAIN_2            ((uint32_t)0x00000100)
  587. #define  RCC_PLLSAICFGR_PLLSAIN_3            ((uint32_t)0x00000200)
  588. #define  RCC_PLLSAICFGR_PLLSAIN_4            ((uint32_t)0x00000400)
  589. #define  RCC_PLLSAICFGR_PLLSAIN_5            ((uint32_t)0x00000800)
  590. #define  RCC_PLLSAICFGR_PLLSAIN_6            ((uint32_t)0x00001000)
  591. #define  RCC_PLLSAICFGR_PLLSAIN_7            ((uint32_t)0x00002000)
  592. #define  RCC_PLLSAICFGR_PLLSAIN_8            ((uint32_t)0x00004000)

  593. #if defined(STM32F446xx) || defined(STM32F469_479xx)  
  594. #define  RCC_PLLSAICFGR_PLLSAIP              ((uint32_t)0x00030000)
  595. #define  RCC_PLLSAICFGR_PLLSAIP_0            ((uint32_t)0x00010000)
  596. #define  RCC_PLLSAICFGR_PLLSAIP_1            ((uint32_t)0x00020000)
  597. #endif /* STM32F446xx || STM32F469_479xx */

  598. #define  RCC_PLLSAICFGR_PLLSAIQ              ((uint32_t)0x0F000000)
  599. #define  RCC_PLLSAICFGR_PLLSAIQ_0            ((uint32_t)0x01000000)
  600. #define  RCC_PLLSAICFGR_PLLSAIQ_1            ((uint32_t)0x02000000)
  601. #define  RCC_PLLSAICFGR_PLLSAIQ_2            ((uint32_t)0x04000000)
  602. #define  RCC_PLLSAICFGR_PLLSAIQ_3            ((uint32_t)0x08000000)

  603. #define  RCC_PLLSAICFGR_PLLSAIR              ((uint32_t)0x70000000)
  604. #define  RCC_PLLSAICFGR_PLLSAIR_0            ((uint32_t)0x10000000)
  605. #define  RCC_PLLSAICFGR_PLLSAIR_1            ((uint32_t)0x20000000)
  606. #define  RCC_PLLSAICFGR_PLLSAIR_2            ((uint32_t)0x40000000)

  607. /********************  Bit definition for RCC_DCKCFGR register  ***************/
  608. #define  RCC_DCKCFGR_PLLI2SDIVQ              ((uint32_t)0x0000001F)
  609. #define  RCC_DCKCFGR_PLLSAIDIVQ              ((uint32_t)0x00001F00)
  610. #define  RCC_DCKCFGR_PLLSAIDIVR              ((uint32_t)0x00030000)

  611. #if defined(STM32F412xG) || defined(STM32F413_423xx)
  612. #define  RCC_DCKCFGR_CKDFSDM1SEL             ((uint32_t)0x80000000)
  613. #define  RCC_DCKCFGR_CKDFSDM1ASEL            ((uint32_t)0x00008000)
  614. #endif /* STM32F412xG || STM32F413_423xx */

  615. #if defined(STM32F413_423xx)
  616. #define  RCC_DCKCFGR_PLLI2SDIVR              ((uint32_t)0x0000001F)
  617. #define  RCC_DCKCFGR_PLLI2SDIVR_0            ((uint32_t)0x00000001)
  618. #define  RCC_DCKCFGR_PLLI2SDIVR_1            ((uint32_t)0x00000002)
  619. #define  RCC_DCKCFGR_PLLI2SDIVR_2            ((uint32_t)0x00000004)
  620. #define  RCC_DCKCFGR_PLLI2SDIVR_3            ((uint32_t)0x00000008)
  621. #define  RCC_DCKCFGR_PLLI2SDIVR_4            ((uint32_t)0x00000010)

  622. #define  RCC_DCKCFGR_PLLDIVR                 ((uint32_t)0x00001F00)
  623. #define  RCC_DCKCFGR_PLLDIVR_0               ((uint32_t)0x00000100)
  624. #define  RCC_DCKCFGR_PLLDIVR_1               ((uint32_t)0x00000200)
  625. #define  RCC_DCKCFGR_PLLDIVR_2               ((uint32_t)0x00000400)
  626. #define  RCC_DCKCFGR_PLLDIVR_3               ((uint32_t)0x00000800)
  627. #define  RCC_DCKCFGR_PLLDIVR_4               ((uint32_t)0x00001000)
  628. #define  RCC_DCKCFGR_CKDFSDM2ASEL            ((uint32_t)0x00004000)
  629. #endif /* STM32F413_423xx */

  630. #define  RCC_DCKCFGR_SAI1ASRC                ((uint32_t)0x00300000)
  631. #define  RCC_DCKCFGR_SAI1ASRC_0              ((uint32_t)0x00100000)
  632. #define  RCC_DCKCFGR_SAI1ASRC_1              ((uint32_t)0x00200000)
  633. #if defined(STM32F446xx)
  634. #define  RCC_DCKCFGR_SAI1SRC                 ((uint32_t)0x00300000)
  635. #define  RCC_DCKCFGR_SAI1SRC_0               ((uint32_t)0x00100000)
  636. #define  RCC_DCKCFGR_SAI1SRC_1               ((uint32_t)0x00200000)
  637. #endif /* STM32F446xx */

  638. #define  RCC_DCKCFGR_SAI1BSRC                ((uint32_t)0x00C00000)
  639. #define  RCC_DCKCFGR_SAI1BSRC_0              ((uint32_t)0x00400000)
  640. #define  RCC_DCKCFGR_SAI1BSRC_1              ((uint32_t)0x00800000)
  641. #if defined(STM32F446xx)
  642. #define  RCC_DCKCFGR_SAI2SRC                 ((uint32_t)0x00C00000)
  643. #define  RCC_DCKCFGR_SAI2SRC_0               ((uint32_t)0x00400000)
  644. #define  RCC_DCKCFGR_SAI2SRC_1               ((uint32_t)0x00800000)
  645. #endif /* STM32F446xx */

  646. #define  RCC_DCKCFGR_TIMPRE                  ((uint32_t)0x01000000)
  647. #if defined(STM32F469_479xx)
  648. #define  RCC_DCKCFGR_CK48MSEL                ((uint32_t)0x08000000)
  649. #define  RCC_DCKCFGR_SDIOSEL                 ((uint32_t)0x10000000)
  650. #define  RCC_DCKCFGR_DSISEL                  ((uint32_t)0x20000000)
  651. #endif /* STM32F469_479xx */

  652. #if defined(STM32F412xG) || defined(STM32F413_423xx) || defined(STM32F446xx)
  653. #define  RCC_DCKCFGR_I2S1SRC                 ((uint32_t)0x06000000)
  654. #define  RCC_DCKCFGR_I2S1SRC_0               ((uint32_t)0x02000000)
  655. #define  RCC_DCKCFGR_I2S1SRC_1               ((uint32_t)0x04000000)
  656. #define  RCC_DCKCFGR_I2S2SRC                 ((uint32_t)0x18000000)
  657. #define  RCC_DCKCFGR_I2S2SRC_0               ((uint32_t)0x08000000)
  658. #define  RCC_DCKCFGR_I2S2SRC_1               ((uint32_t)0x10000000)

  659. /********************  Bit definition for RCC_CKGATENR register  ***************/
  660. #define  RCC_CKGATENR_AHB2APB1_CKEN          ((uint32_t)0x00000001)
  661. #define  RCC_CKGATENR_AHB2APB2_CKEN          ((uint32_t)0x00000002)
  662. #define  RCC_CKGATENR_CM4DBG_CKEN            ((uint32_t)0x00000004)
  663. #define  RCC_CKGATENR_SPARE_CKEN             ((uint32_t)0x00000008)
  664. #define  RCC_CKGATENR_SRAM_CKEN              ((uint32_t)0x00000010)
  665. #define  RCC_CKGATENR_FLITF_CKEN             ((uint32_t)0x00000020)
  666. #define  RCC_CKGATENR_RCC_CKEN               ((uint32_t)0x00000040)
  667. #if defined(STM32F412xG) || defined(STM32F413_423xx)
  668. #define  RCC_CKGATENR_RCC_EVTCTL             ((uint32_t)0x00000080)
  669. #endif /* STM32F412xG || STM32F413_423xx */

  670. /********************  Bit definition for RCC_DCKCFGR2 register  ***************/
  671. #define  RCC_DCKCFGR2_FMPI2C1SEL             ((uint32_t)0x00C00000)
  672. #define  RCC_DCKCFGR2_FMPI2C1SEL_0           ((uint32_t)0x00400000)
  673. #define  RCC_DCKCFGR2_FMPI2C1SEL_1           ((uint32_t)0x00800000)
  674. #define  RCC_DCKCFGR2_CECSEL                 ((uint32_t)0x04000000)
  675. #define  RCC_DCKCFGR2_CK48MSEL               ((uint32_t)0x08000000)
  676. #define  RCC_DCKCFGR2_SDIOSEL                ((uint32_t)0x10000000)
  677. #if defined(STM32F446xx)
  678. #define  RCC_DCKCFGR2_SPDIFRXSEL             ((uint32_t)0x20000000)
  679. #endif /* STM32F446xx */
  680. #if defined(STM32F413_423xx)
  681. #define  RCC_DCKCFGR2_LPTIM1SEL              ((uint32_t)0xC0000000)
  682. #define  RCC_DCKCFGR2_LPTIM1SEL_0            ((uint32_t)0x40000000)
  683. #define  RCC_DCKCFGR2_LPTIM1SEL_1            ((uint32_t)0x80000000)
  684. #endif /* STM32F413_423xx */
  685. #endif /* STM32F412xG || STM32F413_423xx || STM32F446xx */

  686. #if defined(STM32F410xx)
  687. #define  RCC_DCKCFGR_I2SSRC                  ((uint32_t)0x06000000)
  688. #define  RCC_DCKCFGR_I2SSRC_0                ((uint32_t)0x02000000)
  689. #define  RCC_DCKCFGR_I2SSRC_1                ((uint32_t)0x04000000)
  690. #endif /* STM32F410xx */

  691. #if defined(STM32F410xx)
  692. /********************  Bit definition for RCC_DCKCFGR2 register  **************/
  693. #define  RCC_DCKCFGR2_FMPI2C1SEL             ((uint32_t)0x00C00000)
  694. #define  RCC_DCKCFGR2_FMPI2C1SEL_0           ((uint32_t)0x00400000)
  695. #define  RCC_DCKCFGR2_FMPI2C1SEL_1           ((uint32_t)0x00800000)
  696. #define  RCC_DCKCFGR2_LPTIM1SEL              ((uint32_t)0xC0000000)
  697. #define  RCC_DCKCFGR2_LPTIM1SEL_0            ((uint32_t)0x40000000)
  698. #define  RCC_DCKCFGR2_LPTIM1SEL_1            ((uint32_t)0x80000000)
  699. #endif /* STM32F410xx */
复制代码


收藏 评论0 发布时间:2022-6-10 20:14

举报

0个回答

所属标签

相似技术帖

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
st-img 微信公众号
st-img 手机版