Subversion Repositories EDIS_Ignition

Rev

Rev 2 | Blame | Compare with Previous | Last modification | View Log | Download | RSS feed

  1. /**
  2.   ******************************************************************************
  3.   * @file    stm32f1xx_hal_rcc_ex.h
  4.   * @author  MCD Application Team
  5.   * @brief   Header file of RCC HAL Extension module.
  6.   ******************************************************************************
  7.   * @attention
  8.   *
  9.   * Copyright (c) 2016 STMicroelectronics.
  10.   * All rights reserved.
  11.   *
  12.   * This software is licensed under terms that can be found in the LICENSE file in
  13.   * the root directory of this software component.
  14.   * If no LICENSE file comes with this software, it is provided AS-IS.
  15.   ******************************************************************************
  16.   */
  17.  
  18. /* Define to prevent recursive inclusion -------------------------------------*/
  19. #ifndef __STM32F1xx_HAL_RCC_EX_H
  20. #define __STM32F1xx_HAL_RCC_EX_H
  21.  
  22. #ifdef __cplusplus
  23. extern "C" {
  24. #endif
  25.  
  26. /* Includes ------------------------------------------------------------------*/
  27. #include "stm32f1xx_hal_def.h"
  28.  
  29. /** @addtogroup STM32F1xx_HAL_Driver
  30.   * @{
  31.   */
  32.  
  33. /** @addtogroup RCCEx
  34.   * @{
  35.   */
  36.  
  37. /** @addtogroup RCCEx_Private_Constants
  38.  * @{
  39.  */
  40.  
  41. #if defined(STM32F105xC) || defined(STM32F107xC)
  42.  
  43. /* Alias word address of PLLI2SON bit */
  44. #define PLLI2SON_BITNUMBER           RCC_CR_PLL3ON_Pos
  45. #define RCC_CR_PLLI2SON_BB           ((uint32_t)(PERIPH_BB_BASE + (RCC_CR_OFFSET_BB * 32U) + (PLLI2SON_BITNUMBER * 4U)))
  46. /* Alias word address of PLL2ON bit */
  47. #define PLL2ON_BITNUMBER             RCC_CR_PLL2ON_Pos
  48. #define RCC_CR_PLL2ON_BB             ((uint32_t)(PERIPH_BB_BASE + (RCC_CR_OFFSET_BB * 32U) + (PLL2ON_BITNUMBER * 4U)))
  49.  
  50. #define PLLI2S_TIMEOUT_VALUE         100U  /* 100 ms */
  51. #define PLL2_TIMEOUT_VALUE           100U  /* 100 ms */
  52.  
  53. #endif /* STM32F105xC || STM32F107xC */
  54.  
  55.  
  56. #define CR_REG_INDEX                 ((uint8_t)1)
  57.  
  58. /**
  59.   * @}
  60.   */
  61.  
  62. /** @addtogroup RCCEx_Private_Macros
  63.  * @{
  64.  */
  65.  
  66. #if defined(STM32F105xC) || defined(STM32F107xC)
  67. #define IS_RCC_PREDIV1_SOURCE(__SOURCE__) (((__SOURCE__) == RCC_PREDIV1_SOURCE_HSE) || \
  68.                                            ((__SOURCE__) == RCC_PREDIV1_SOURCE_PLL2))
  69. #endif /* STM32F105xC || STM32F107xC */
  70.  
  71. #if defined(STM32F105xC) || defined(STM32F107xC) || defined(STM32F100xB)\
  72.  || defined(STM32F100xE)
  73. #define IS_RCC_HSE_PREDIV(__DIV__) (((__DIV__) == RCC_HSE_PREDIV_DIV1)  || ((__DIV__) == RCC_HSE_PREDIV_DIV2)  || \
  74.                                     ((__DIV__) == RCC_HSE_PREDIV_DIV3)  || ((__DIV__) == RCC_HSE_PREDIV_DIV4)  || \
  75.                                     ((__DIV__) == RCC_HSE_PREDIV_DIV5)  || ((__DIV__) == RCC_HSE_PREDIV_DIV6)  || \
  76.                                     ((__DIV__) == RCC_HSE_PREDIV_DIV7)  || ((__DIV__) == RCC_HSE_PREDIV_DIV8)  || \
  77.                                     ((__DIV__) == RCC_HSE_PREDIV_DIV9)  || ((__DIV__) == RCC_HSE_PREDIV_DIV10) || \
  78.                                     ((__DIV__) == RCC_HSE_PREDIV_DIV11) || ((__DIV__) == RCC_HSE_PREDIV_DIV12) || \
  79.                                     ((__DIV__) == RCC_HSE_PREDIV_DIV13) || ((__DIV__) == RCC_HSE_PREDIV_DIV14) || \
  80.                                     ((__DIV__) == RCC_HSE_PREDIV_DIV15) || ((__DIV__) == RCC_HSE_PREDIV_DIV16))
  81.  
  82. #else
  83. #define IS_RCC_HSE_PREDIV(__DIV__) (((__DIV__) == RCC_HSE_PREDIV_DIV1)  || ((__DIV__) == RCC_HSE_PREDIV_DIV2))
  84. #endif /* STM32F105xC || STM32F107xC || STM32F100xB || STM32F100xE */
  85.  
  86. #if defined(STM32F105xC) || defined(STM32F107xC)
  87. #define IS_RCC_PLL_MUL(__MUL__) (((__MUL__) == RCC_PLL_MUL4)  || ((__MUL__) == RCC_PLL_MUL5) || \
  88.                                  ((__MUL__) == RCC_PLL_MUL6)  || ((__MUL__) == RCC_PLL_MUL7) || \
  89.                                  ((__MUL__) == RCC_PLL_MUL8)  || ((__MUL__) == RCC_PLL_MUL9) || \
  90.                                  ((__MUL__) == RCC_PLL_MUL6_5))
  91.  
  92. #define IS_RCC_MCO1SOURCE(__SOURCE__) (((__SOURCE__) == RCC_MCO1SOURCE_SYSCLK)  || ((__SOURCE__) == RCC_MCO1SOURCE_HSI) \
  93.                                     || ((__SOURCE__) == RCC_MCO1SOURCE_HSE)     || ((__SOURCE__) == RCC_MCO1SOURCE_PLLCLK) \
  94.                                     || ((__SOURCE__) == RCC_MCO1SOURCE_PLL2CLK) || ((__SOURCE__) == RCC_MCO1SOURCE_PLL3CLK) \
  95.                                     || ((__SOURCE__) == RCC_MCO1SOURCE_PLL3CLK_DIV2) || ((__SOURCE__) == RCC_MCO1SOURCE_EXT_HSE) \
  96.                                     || ((__SOURCE__) == RCC_MCO1SOURCE_NOCLOCK))
  97.  
  98. #else
  99. #define IS_RCC_PLL_MUL(__MUL__) (((__MUL__) == RCC_PLL_MUL2)  || ((__MUL__) == RCC_PLL_MUL3)  || \
  100.                                  ((__MUL__) == RCC_PLL_MUL4)  || ((__MUL__) == RCC_PLL_MUL5)  || \
  101.                                  ((__MUL__) == RCC_PLL_MUL6)  || ((__MUL__) == RCC_PLL_MUL7)  || \
  102.                                  ((__MUL__) == RCC_PLL_MUL8)  || ((__MUL__) == RCC_PLL_MUL9)  || \
  103.                                  ((__MUL__) == RCC_PLL_MUL10) || ((__MUL__) == RCC_PLL_MUL11) || \
  104.                                  ((__MUL__) == RCC_PLL_MUL12) || ((__MUL__) == RCC_PLL_MUL13) || \
  105.                                  ((__MUL__) == RCC_PLL_MUL14) || ((__MUL__) == RCC_PLL_MUL15) || \
  106.                                  ((__MUL__) == RCC_PLL_MUL16))
  107.  
  108. #define IS_RCC_MCO1SOURCE(__SOURCE__) (((__SOURCE__) == RCC_MCO1SOURCE_SYSCLK)  || ((__SOURCE__) == RCC_MCO1SOURCE_HSI) \
  109.                                     || ((__SOURCE__) == RCC_MCO1SOURCE_HSE)     || ((__SOURCE__) == RCC_MCO1SOURCE_PLLCLK) \
  110.                                     || ((__SOURCE__) == RCC_MCO1SOURCE_NOCLOCK))
  111.  
  112. #endif /* STM32F105xC || STM32F107xC*/
  113.  
  114. #define IS_RCC_ADCPLLCLK_DIV(__ADCCLK__) (((__ADCCLK__) == RCC_ADCPCLK2_DIV2)  || ((__ADCCLK__) == RCC_ADCPCLK2_DIV4)   || \
  115.                                           ((__ADCCLK__) == RCC_ADCPCLK2_DIV6)  || ((__ADCCLK__) == RCC_ADCPCLK2_DIV8))
  116.  
  117. #if defined(STM32F105xC) || defined(STM32F107xC)
  118. #define IS_RCC_I2S2CLKSOURCE(__SOURCE__) (((__SOURCE__) == RCC_I2S2CLKSOURCE_SYSCLK)  || ((__SOURCE__) == RCC_I2S2CLKSOURCE_PLLI2S_VCO))
  119.  
  120. #define IS_RCC_I2S3CLKSOURCE(__SOURCE__) (((__SOURCE__) == RCC_I2S3CLKSOURCE_SYSCLK)  || ((__SOURCE__) == RCC_I2S3CLKSOURCE_PLLI2S_VCO))
  121.  
  122. #define IS_RCC_USBPLLCLK_DIV(__USBCLK__) (((__USBCLK__) == RCC_USBCLKSOURCE_PLL_DIV2)  || ((__USBCLK__) == RCC_USBCLKSOURCE_PLL_DIV3))
  123.  
  124. #define IS_RCC_PLLI2S_MUL(__MUL__) (((__MUL__) == RCC_PLLI2S_MUL8)   || ((__MUL__) == RCC_PLLI2S_MUL9)  || \
  125.                                     ((__MUL__) == RCC_PLLI2S_MUL10)  || ((__MUL__) == RCC_PLLI2S_MUL11)  || \
  126.                                     ((__MUL__) == RCC_PLLI2S_MUL12)  || ((__MUL__) == RCC_PLLI2S_MUL13)  || \
  127.                                     ((__MUL__) == RCC_PLLI2S_MUL14)  || ((__MUL__) == RCC_PLLI2S_MUL16)  || \
  128.                                     ((__MUL__) == RCC_PLLI2S_MUL20))
  129.  
  130. #define IS_RCC_HSE_PREDIV2(__DIV__) (((__DIV__) == RCC_HSE_PREDIV2_DIV1)  || ((__DIV__) == RCC_HSE_PREDIV2_DIV2)  || \
  131.                                      ((__DIV__) == RCC_HSE_PREDIV2_DIV3)  || ((__DIV__) == RCC_HSE_PREDIV2_DIV4)  || \
  132.                                      ((__DIV__) == RCC_HSE_PREDIV2_DIV5)  || ((__DIV__) == RCC_HSE_PREDIV2_DIV6)  || \
  133.                                      ((__DIV__) == RCC_HSE_PREDIV2_DIV7)  || ((__DIV__) == RCC_HSE_PREDIV2_DIV8)  || \
  134.                                      ((__DIV__) == RCC_HSE_PREDIV2_DIV9)  || ((__DIV__) == RCC_HSE_PREDIV2_DIV10) || \
  135.                                      ((__DIV__) == RCC_HSE_PREDIV2_DIV11) || ((__DIV__) == RCC_HSE_PREDIV2_DIV12) || \
  136.                                      ((__DIV__) == RCC_HSE_PREDIV2_DIV13) || ((__DIV__) == RCC_HSE_PREDIV2_DIV14) || \
  137.                                      ((__DIV__) == RCC_HSE_PREDIV2_DIV15) || ((__DIV__) == RCC_HSE_PREDIV2_DIV16))
  138.  
  139. #define IS_RCC_PLL2(__PLL__) (((__PLL__) == RCC_PLL2_NONE) || ((__PLL__) == RCC_PLL2_OFF) || \
  140.                               ((__PLL__) == RCC_PLL2_ON))
  141.  
  142. #define IS_RCC_PLL2_MUL(__MUL__) (((__MUL__) == RCC_PLL2_MUL8)  || ((__MUL__) == RCC_PLL2_MUL9)  || \
  143.                                   ((__MUL__) == RCC_PLL2_MUL10)  || ((__MUL__) == RCC_PLL2_MUL11)  || \
  144.                                   ((__MUL__) == RCC_PLL2_MUL12)  || ((__MUL__) == RCC_PLL2_MUL13)  || \
  145.                                   ((__MUL__) == RCC_PLL2_MUL14)  || ((__MUL__) == RCC_PLL2_MUL16)  || \
  146.                                   ((__MUL__) == RCC_PLL2_MUL20))
  147.  
  148. #define IS_RCC_PERIPHCLOCK(__SELECTION__)  \
  149.                ((((__SELECTION__) & RCC_PERIPHCLK_RTC)  == RCC_PERIPHCLK_RTC)  || \
  150.                 (((__SELECTION__) & RCC_PERIPHCLK_ADC)  == RCC_PERIPHCLK_ADC)  || \
  151.                 (((__SELECTION__) & RCC_PERIPHCLK_I2S2)  == RCC_PERIPHCLK_I2S2)  || \
  152.                 (((__SELECTION__) & RCC_PERIPHCLK_I2S3)   == RCC_PERIPHCLK_I2S3)   || \
  153.                 (((__SELECTION__) & RCC_PERIPHCLK_USB)   == RCC_PERIPHCLK_USB))
  154.  
  155. #elif defined(STM32F103xE) || defined(STM32F103xG)
  156.  
  157. #define IS_RCC_I2S2CLKSOURCE(__SOURCE__) ((__SOURCE__) == RCC_I2S2CLKSOURCE_SYSCLK)
  158.  
  159. #define IS_RCC_I2S3CLKSOURCE(__SOURCE__) ((__SOURCE__) == RCC_I2S3CLKSOURCE_SYSCLK)
  160.  
  161. #define IS_RCC_PERIPHCLOCK(__SELECTION__)  \
  162.                ((((__SELECTION__) & RCC_PERIPHCLK_RTC)  == RCC_PERIPHCLK_RTC)  || \
  163.                 (((__SELECTION__) & RCC_PERIPHCLK_ADC)  == RCC_PERIPHCLK_ADC)  || \
  164.                 (((__SELECTION__) & RCC_PERIPHCLK_I2S2) == RCC_PERIPHCLK_I2S2)  || \
  165.                 (((__SELECTION__) & RCC_PERIPHCLK_I2S3) == RCC_PERIPHCLK_I2S3)   || \
  166.                 (((__SELECTION__) & RCC_PERIPHCLK_USB)  == RCC_PERIPHCLK_USB))
  167.  
  168.  
  169. #elif defined(STM32F102x6) || defined(STM32F102xB) || defined(STM32F103x6)\
  170.  || defined(STM32F103xB)
  171.  
  172. #define IS_RCC_PERIPHCLOCK(__SELECTION__)  \
  173.                ((((__SELECTION__) & RCC_PERIPHCLK_RTC) == RCC_PERIPHCLK_RTC)  || \
  174.                 (((__SELECTION__) & RCC_PERIPHCLK_ADC) == RCC_PERIPHCLK_ADC)  || \
  175.                 (((__SELECTION__) & RCC_PERIPHCLK_USB) == RCC_PERIPHCLK_USB))
  176.  
  177. #else
  178.  
  179. #define IS_RCC_PERIPHCLOCK(__SELECTION__)  \
  180.                ((((__SELECTION__) & RCC_PERIPHCLK_RTC)  == RCC_PERIPHCLK_RTC)  || \
  181.                 (((__SELECTION__) & RCC_PERIPHCLK_ADC)  == RCC_PERIPHCLK_ADC))
  182.  
  183. #endif /* STM32F105xC || STM32F107xC */
  184.  
  185. #if defined(STM32F102x6) || defined(STM32F102xB) || defined(STM32F103x6)\
  186.  || defined(STM32F103xB) || defined(STM32F103xE) || defined(STM32F103xG)
  187.  
  188. #define IS_RCC_USBPLLCLK_DIV(__USBCLK__) (((__USBCLK__) == RCC_USBCLKSOURCE_PLL)  || ((__USBCLK__) == RCC_USBCLKSOURCE_PLL_DIV1_5))
  189.  
  190. #endif /* STM32F102x6 || STM32F102xB || STM32F103x6 || STM32F103xB || STM32F103xE || STM32F103xG */
  191.  
  192. /**
  193.   * @}
  194.   */
  195.  
  196. /* Exported types ------------------------------------------------------------*/
  197.  
  198. /** @defgroup RCCEx_Exported_Types RCCEx Exported Types
  199.   * @{
  200.   */
  201.  
  202. #if defined(STM32F105xC) || defined(STM32F107xC)
  203. /**
  204.   * @brief  RCC PLL2 configuration structure definition
  205.   */
  206. typedef struct
  207. {
  208.   uint32_t PLL2State;     /*!< The new state of the PLL2.
  209.                               This parameter can be a value of @ref RCCEx_PLL2_Config */
  210.  
  211.   uint32_t PLL2MUL;         /*!< PLL2MUL: Multiplication factor for PLL2 VCO input clock
  212.                               This parameter must be a value of @ref RCCEx_PLL2_Multiplication_Factor*/
  213.  
  214. #if defined(STM32F105xC) || defined(STM32F107xC)
  215.   uint32_t HSEPrediv2Value;       /*!<  The Prediv2 factor value.
  216.                                        This parameter can be a value of @ref RCCEx_Prediv2_Factor */
  217.  
  218. #endif /* STM32F105xC || STM32F107xC */
  219. } RCC_PLL2InitTypeDef;
  220.  
  221. #endif /* STM32F105xC || STM32F107xC */
  222.  
  223. /**
  224.   * @brief  RCC Internal/External Oscillator (HSE, HSI, LSE and LSI) configuration structure definition
  225.   */
  226. typedef struct
  227. {
  228.   uint32_t OscillatorType;       /*!< The oscillators to be configured.
  229.                                        This parameter can be a value of @ref RCC_Oscillator_Type */
  230.  
  231. #if defined(STM32F105xC) || defined(STM32F107xC)
  232.   uint32_t Prediv1Source;       /*!<  The Prediv1 source value.
  233.                                        This parameter can be a value of @ref RCCEx_Prediv1_Source */
  234. #endif /* STM32F105xC || STM32F107xC */
  235.  
  236.   uint32_t HSEState;              /*!< The new state of the HSE.
  237.                                        This parameter can be a value of @ref RCC_HSE_Config */
  238.  
  239.   uint32_t HSEPredivValue;       /*!<  The Prediv1 factor value (named PREDIV1 or PLLXTPRE in RM)
  240.                                        This parameter can be a value of @ref RCCEx_Prediv1_Factor */
  241.  
  242.   uint32_t LSEState;              /*!<  The new state of the LSE.
  243.                                         This parameter can be a value of @ref RCC_LSE_Config */
  244.  
  245.   uint32_t HSIState;              /*!< The new state of the HSI.
  246.                                        This parameter can be a value of @ref RCC_HSI_Config */
  247.  
  248.   uint32_t HSICalibrationValue;   /*!< The HSI calibration trimming value (default is RCC_HSICALIBRATION_DEFAULT).
  249.                                        This parameter must be a number between Min_Data = 0x00 and Max_Data = 0x1F */
  250.  
  251.   uint32_t LSIState;              /*!<  The new state of the LSI.
  252.                                         This parameter can be a value of @ref RCC_LSI_Config */
  253.  
  254.   RCC_PLLInitTypeDef PLL;         /*!< PLL structure parameters */
  255.  
  256. #if defined(STM32F105xC) || defined(STM32F107xC)
  257.   RCC_PLL2InitTypeDef PLL2;         /*!< PLL2 structure parameters */
  258. #endif /* STM32F105xC || STM32F107xC */
  259. } RCC_OscInitTypeDef;
  260.  
  261. #if defined(STM32F105xC) || defined(STM32F107xC)
  262. /**
  263.   * @brief  RCC PLLI2S configuration structure definition
  264.   */
  265. typedef struct
  266. {
  267.   uint32_t PLLI2SMUL;         /*!< PLLI2SMUL: Multiplication factor for PLLI2S VCO input clock
  268.                               This parameter must be a value of @ref RCCEx_PLLI2S_Multiplication_Factor*/
  269.  
  270. #if defined(STM32F105xC) || defined(STM32F107xC)
  271.   uint32_t HSEPrediv2Value;       /*!<  The Prediv2 factor value.
  272.                                        This parameter can be a value of @ref RCCEx_Prediv2_Factor */
  273.  
  274. #endif /* STM32F105xC || STM32F107xC */
  275. } RCC_PLLI2SInitTypeDef;
  276. #endif /* STM32F105xC || STM32F107xC */
  277.  
  278. /**
  279.   * @brief  RCC extended clocks structure definition
  280.   */
  281. typedef struct
  282. {
  283.   uint32_t PeriphClockSelection;      /*!< The Extended Clock to be configured.
  284.                                        This parameter can be a value of @ref RCCEx_Periph_Clock_Selection */
  285.  
  286.   uint32_t RTCClockSelection;         /*!< specifies the RTC clock source.
  287.                                        This parameter can be a value of @ref RCC_RTC_Clock_Source */
  288.  
  289.   uint32_t AdcClockSelection;         /*!< ADC clock source
  290.                                        This parameter can be a value of @ref RCCEx_ADC_Prescaler */
  291.  
  292. #if defined(STM32F103xE) || defined(STM32F103xG) || defined(STM32F105xC)\
  293.  || defined(STM32F107xC)
  294.   uint32_t I2s2ClockSelection;         /*!< I2S2 clock source
  295.                                        This parameter can be a value of @ref RCCEx_I2S2_Clock_Source */
  296.  
  297.   uint32_t I2s3ClockSelection;         /*!< I2S3 clock source
  298.                                        This parameter can be a value of @ref RCCEx_I2S3_Clock_Source */
  299.  
  300. #if defined(STM32F105xC) || defined(STM32F107xC)
  301.   RCC_PLLI2SInitTypeDef PLLI2S;  /*!< PLL I2S structure parameters
  302.                                       This parameter will be used only when PLLI2S is selected as Clock Source I2S2 or I2S3 */
  303.  
  304. #endif /* STM32F105xC || STM32F107xC */
  305. #endif /* STM32F103xE || STM32F103xG || STM32F105xC || STM32F107xC */
  306.  
  307. #if defined(STM32F102x6) || defined(STM32F102xB) || defined(STM32F103x6)\
  308.  || defined(STM32F103xB) || defined(STM32F103xE) || defined(STM32F103xG)\
  309.  || defined(STM32F105xC) || defined(STM32F107xC)
  310.   uint32_t UsbClockSelection;         /*!< USB clock source
  311.                                        This parameter can be a value of @ref RCCEx_USB_Prescaler */
  312.  
  313. #endif /* STM32F102x6 || STM32F102xB || STM32F103x6 || STM32F103xB || STM32F103xE || STM32F103xG || STM32F105xC || STM32F107xC */
  314. } RCC_PeriphCLKInitTypeDef;
  315.  
  316. /**
  317.   * @}
  318.   */
  319.  
  320. /* Exported constants --------------------------------------------------------*/
  321.  
  322. /** @defgroup RCCEx_Exported_Constants RCCEx Exported Constants
  323.   * @{
  324.   */
  325.  
  326. /** @defgroup RCCEx_Periph_Clock_Selection Periph Clock Selection
  327.   * @{
  328.   */
  329. #define RCC_PERIPHCLK_RTC           0x00000001U
  330. #define RCC_PERIPHCLK_ADC           0x00000002U
  331. #if defined(STM32F101xE) || defined(STM32F101xG) || defined(STM32F103xE)\
  332.  || defined(STM32F103xG) || defined(STM32F105xC) || defined(STM32F107xC)
  333. #define RCC_PERIPHCLK_I2S2          0x00000004U
  334. #define RCC_PERIPHCLK_I2S3          0x00000008U
  335. #endif /* STM32F101xE || STM32F101xG || STM32F103xE || STM32F103xG || STM32F105xC || STM32F107xC */
  336. #if defined(STM32F102x6) || defined(STM32F102xB) || defined(STM32F103x6)\
  337.  || defined(STM32F103xB) || defined(STM32F103xE) || defined(STM32F103xG)\
  338.  || defined(STM32F105xC) || defined(STM32F107xC)
  339. #define RCC_PERIPHCLK_USB          0x00000010U
  340. #endif /* STM32F102x6 || STM32F102xB || STM32F103x6 || STM32F103xB || STM32F103xE || STM32F103xG || STM32F105xC || STM32F107xC */
  341.  
  342. /**
  343.   * @}
  344.   */
  345.  
  346. /** @defgroup RCCEx_ADC_Prescaler ADC Prescaler
  347.   * @{
  348.   */
  349. #define RCC_ADCPCLK2_DIV2              RCC_CFGR_ADCPRE_DIV2
  350. #define RCC_ADCPCLK2_DIV4              RCC_CFGR_ADCPRE_DIV4
  351. #define RCC_ADCPCLK2_DIV6              RCC_CFGR_ADCPRE_DIV6
  352. #define RCC_ADCPCLK2_DIV8              RCC_CFGR_ADCPRE_DIV8
  353.  
  354. /**
  355.   * @}
  356.   */
  357.  
  358. #if defined(STM32F103xE) || defined(STM32F103xG) || defined(STM32F105xC)\
  359.  || defined(STM32F107xC)
  360. /** @defgroup RCCEx_I2S2_Clock_Source I2S2 Clock Source
  361.   * @{
  362.   */
  363. #define RCC_I2S2CLKSOURCE_SYSCLK              0x00000000U
  364. #if defined(STM32F105xC) || defined(STM32F107xC)
  365. #define RCC_I2S2CLKSOURCE_PLLI2S_VCO          RCC_CFGR2_I2S2SRC
  366. #endif /* STM32F105xC || STM32F107xC */
  367.  
  368. /**
  369.   * @}
  370.   */
  371.  
  372. /** @defgroup RCCEx_I2S3_Clock_Source I2S3 Clock Source
  373.   * @{
  374.   */
  375. #define RCC_I2S3CLKSOURCE_SYSCLK              0x00000000U
  376. #if defined(STM32F105xC) || defined(STM32F107xC)
  377. #define RCC_I2S3CLKSOURCE_PLLI2S_VCO          RCC_CFGR2_I2S3SRC
  378. #endif /* STM32F105xC || STM32F107xC */
  379.  
  380. /**
  381.   * @}
  382.   */
  383.  
  384. #endif /* STM32F103xE || STM32F103xG || STM32F105xC || STM32F107xC */
  385.  
  386. #if defined(STM32F102x6) || defined(STM32F102xB) || defined(STM32F103x6)\
  387.  || defined(STM32F103xB) || defined(STM32F103xE) || defined(STM32F103xG)
  388.  
  389. /** @defgroup RCCEx_USB_Prescaler USB Prescaler
  390.   * @{
  391.   */
  392. #define RCC_USBCLKSOURCE_PLL              RCC_CFGR_USBPRE
  393. #define RCC_USBCLKSOURCE_PLL_DIV1_5       0x00000000U
  394.  
  395. /**
  396.   * @}
  397.   */
  398.  
  399. #endif /* STM32F102x6 || STM32F102xB || STM32F103x6 || STM32F103xB || STM32F103xE || STM32F103xG */
  400.  
  401.  
  402. #if defined(STM32F105xC) || defined(STM32F107xC)
  403. /** @defgroup RCCEx_USB_Prescaler USB Prescaler
  404.   * @{
  405.   */
  406. #define RCC_USBCLKSOURCE_PLL_DIV2              RCC_CFGR_OTGFSPRE
  407. #define RCC_USBCLKSOURCE_PLL_DIV3              0x00000000U
  408.  
  409. /**
  410.   * @}
  411.   */
  412.  
  413. /** @defgroup RCCEx_PLLI2S_Multiplication_Factor PLLI2S Multiplication Factor
  414.   * @{
  415.   */
  416.  
  417. #define RCC_PLLI2S_MUL8                   RCC_CFGR2_PLL3MUL8   /*!< PLLI2S input clock * 8 */
  418. #define RCC_PLLI2S_MUL9                   RCC_CFGR2_PLL3MUL9   /*!< PLLI2S input clock * 9 */
  419. #define RCC_PLLI2S_MUL10                  RCC_CFGR2_PLL3MUL10  /*!< PLLI2S input clock * 10 */
  420. #define RCC_PLLI2S_MUL11                  RCC_CFGR2_PLL3MUL11  /*!< PLLI2S input clock * 11 */
  421. #define RCC_PLLI2S_MUL12                  RCC_CFGR2_PLL3MUL12  /*!< PLLI2S input clock * 12 */
  422. #define RCC_PLLI2S_MUL13                  RCC_CFGR2_PLL3MUL13  /*!< PLLI2S input clock * 13 */
  423. #define RCC_PLLI2S_MUL14                  RCC_CFGR2_PLL3MUL14  /*!< PLLI2S input clock * 14 */
  424. #define RCC_PLLI2S_MUL16                  RCC_CFGR2_PLL3MUL16  /*!< PLLI2S input clock * 16 */
  425. #define RCC_PLLI2S_MUL20                  RCC_CFGR2_PLL3MUL20  /*!< PLLI2S input clock * 20 */
  426.  
  427. /**
  428.   * @}
  429.   */
  430. #endif /* STM32F105xC || STM32F107xC */
  431.  
  432. #if defined(STM32F105xC) || defined(STM32F107xC)
  433. /** @defgroup RCCEx_Prediv1_Source Prediv1 Source
  434.   * @{
  435.   */
  436.  
  437. #define RCC_PREDIV1_SOURCE_HSE           RCC_CFGR2_PREDIV1SRC_HSE
  438. #define RCC_PREDIV1_SOURCE_PLL2          RCC_CFGR2_PREDIV1SRC_PLL2
  439.  
  440. /**
  441.   * @}
  442.   */
  443. #endif /* STM32F105xC || STM32F107xC */
  444.  
  445. /** @defgroup RCCEx_Prediv1_Factor HSE Prediv1 Factor
  446.   * @{
  447.   */
  448.  
  449. #define RCC_HSE_PREDIV_DIV1              0x00000000U
  450.  
  451. #if defined(STM32F105xC) || defined(STM32F107xC) || defined(STM32F100xB)\
  452.  || defined(STM32F100xE)
  453. #define RCC_HSE_PREDIV_DIV2              RCC_CFGR2_PREDIV1_DIV2
  454. #define RCC_HSE_PREDIV_DIV3              RCC_CFGR2_PREDIV1_DIV3
  455. #define RCC_HSE_PREDIV_DIV4              RCC_CFGR2_PREDIV1_DIV4
  456. #define RCC_HSE_PREDIV_DIV5              RCC_CFGR2_PREDIV1_DIV5
  457. #define RCC_HSE_PREDIV_DIV6              RCC_CFGR2_PREDIV1_DIV6
  458. #define RCC_HSE_PREDIV_DIV7              RCC_CFGR2_PREDIV1_DIV7
  459. #define RCC_HSE_PREDIV_DIV8              RCC_CFGR2_PREDIV1_DIV8
  460. #define RCC_HSE_PREDIV_DIV9              RCC_CFGR2_PREDIV1_DIV9
  461. #define RCC_HSE_PREDIV_DIV10             RCC_CFGR2_PREDIV1_DIV10
  462. #define RCC_HSE_PREDIV_DIV11             RCC_CFGR2_PREDIV1_DIV11
  463. #define RCC_HSE_PREDIV_DIV12             RCC_CFGR2_PREDIV1_DIV12
  464. #define RCC_HSE_PREDIV_DIV13             RCC_CFGR2_PREDIV1_DIV13
  465. #define RCC_HSE_PREDIV_DIV14             RCC_CFGR2_PREDIV1_DIV14
  466. #define RCC_HSE_PREDIV_DIV15             RCC_CFGR2_PREDIV1_DIV15
  467. #define RCC_HSE_PREDIV_DIV16             RCC_CFGR2_PREDIV1_DIV16
  468. #else
  469. #define RCC_HSE_PREDIV_DIV2              RCC_CFGR_PLLXTPRE
  470. #endif /* STM32F105xC || STM32F107xC || STM32F100xB || STM32F100xE */
  471.  
  472. /**
  473.   * @}
  474.   */
  475.  
  476. #if defined(STM32F105xC) || defined(STM32F107xC)
  477. /** @defgroup RCCEx_Prediv2_Factor HSE Prediv2 Factor
  478.   * @{
  479.   */
  480.  
  481. #define RCC_HSE_PREDIV2_DIV1                RCC_CFGR2_PREDIV2_DIV1   /*!< PREDIV2 input clock not divided */
  482. #define RCC_HSE_PREDIV2_DIV2                RCC_CFGR2_PREDIV2_DIV2   /*!< PREDIV2 input clock divided by 2 */
  483. #define RCC_HSE_PREDIV2_DIV3                RCC_CFGR2_PREDIV2_DIV3   /*!< PREDIV2 input clock divided by 3 */
  484. #define RCC_HSE_PREDIV2_DIV4                RCC_CFGR2_PREDIV2_DIV4   /*!< PREDIV2 input clock divided by 4 */
  485. #define RCC_HSE_PREDIV2_DIV5                RCC_CFGR2_PREDIV2_DIV5   /*!< PREDIV2 input clock divided by 5 */
  486. #define RCC_HSE_PREDIV2_DIV6                RCC_CFGR2_PREDIV2_DIV6   /*!< PREDIV2 input clock divided by 6 */
  487. #define RCC_HSE_PREDIV2_DIV7                RCC_CFGR2_PREDIV2_DIV7   /*!< PREDIV2 input clock divided by 7 */
  488. #define RCC_HSE_PREDIV2_DIV8                RCC_CFGR2_PREDIV2_DIV8   /*!< PREDIV2 input clock divided by 8 */
  489. #define RCC_HSE_PREDIV2_DIV9                RCC_CFGR2_PREDIV2_DIV9   /*!< PREDIV2 input clock divided by 9 */
  490. #define RCC_HSE_PREDIV2_DIV10               RCC_CFGR2_PREDIV2_DIV10  /*!< PREDIV2 input clock divided by 10 */
  491. #define RCC_HSE_PREDIV2_DIV11               RCC_CFGR2_PREDIV2_DIV11  /*!< PREDIV2 input clock divided by 11 */
  492. #define RCC_HSE_PREDIV2_DIV12               RCC_CFGR2_PREDIV2_DIV12  /*!< PREDIV2 input clock divided by 12 */
  493. #define RCC_HSE_PREDIV2_DIV13               RCC_CFGR2_PREDIV2_DIV13  /*!< PREDIV2 input clock divided by 13 */
  494. #define RCC_HSE_PREDIV2_DIV14               RCC_CFGR2_PREDIV2_DIV14  /*!< PREDIV2 input clock divided by 14 */
  495. #define RCC_HSE_PREDIV2_DIV15               RCC_CFGR2_PREDIV2_DIV15  /*!< PREDIV2 input clock divided by 15 */
  496. #define RCC_HSE_PREDIV2_DIV16               RCC_CFGR2_PREDIV2_DIV16  /*!< PREDIV2 input clock divided by 16 */
  497.  
  498. /**
  499.   * @}
  500.   */
  501.  
  502. /** @defgroup RCCEx_PLL2_Config PLL Config
  503.   * @{
  504.   */
  505. #define RCC_PLL2_NONE                      0x00000000U
  506. #define RCC_PLL2_OFF                       0x00000001U
  507. #define RCC_PLL2_ON                        0x00000002U
  508.  
  509. /**
  510.   * @}
  511.   */
  512.  
  513. /** @defgroup RCCEx_PLL2_Multiplication_Factor PLL2 Multiplication Factor
  514.   * @{
  515.   */
  516.  
  517. #define RCC_PLL2_MUL8                   RCC_CFGR2_PLL2MUL8   /*!< PLL2 input clock * 8 */
  518. #define RCC_PLL2_MUL9                   RCC_CFGR2_PLL2MUL9   /*!< PLL2 input clock * 9 */
  519. #define RCC_PLL2_MUL10                  RCC_CFGR2_PLL2MUL10  /*!< PLL2 input clock * 10 */
  520. #define RCC_PLL2_MUL11                  RCC_CFGR2_PLL2MUL11  /*!< PLL2 input clock * 11 */
  521. #define RCC_PLL2_MUL12                  RCC_CFGR2_PLL2MUL12  /*!< PLL2 input clock * 12 */
  522. #define RCC_PLL2_MUL13                  RCC_CFGR2_PLL2MUL13  /*!< PLL2 input clock * 13 */
  523. #define RCC_PLL2_MUL14                  RCC_CFGR2_PLL2MUL14  /*!< PLL2 input clock * 14 */
  524. #define RCC_PLL2_MUL16                  RCC_CFGR2_PLL2MUL16  /*!< PLL2 input clock * 16 */
  525. #define RCC_PLL2_MUL20                  RCC_CFGR2_PLL2MUL20  /*!< PLL2 input clock * 20 */
  526.  
  527. /**
  528.   * @}
  529.   */
  530.  
  531. #endif /* STM32F105xC || STM32F107xC */
  532.  
  533. /** @defgroup RCCEx_PLL_Multiplication_Factor PLL Multiplication Factor
  534.   * @{
  535.   */
  536.  
  537. #if defined(STM32F105xC) || defined(STM32F107xC)
  538. #else
  539. #define RCC_PLL_MUL2                    RCC_CFGR_PLLMULL2
  540. #define RCC_PLL_MUL3                    RCC_CFGR_PLLMULL3
  541. #endif /* STM32F105xC || STM32F107xC */
  542. #define RCC_PLL_MUL4                    RCC_CFGR_PLLMULL4
  543. #define RCC_PLL_MUL5                    RCC_CFGR_PLLMULL5
  544. #define RCC_PLL_MUL6                    RCC_CFGR_PLLMULL6
  545. #define RCC_PLL_MUL7                    RCC_CFGR_PLLMULL7
  546. #define RCC_PLL_MUL8                    RCC_CFGR_PLLMULL8
  547. #define RCC_PLL_MUL9                    RCC_CFGR_PLLMULL9
  548. #if defined(STM32F105xC) || defined(STM32F107xC)
  549. #define RCC_PLL_MUL6_5                  RCC_CFGR_PLLMULL6_5
  550. #else
  551. #define RCC_PLL_MUL10                   RCC_CFGR_PLLMULL10
  552. #define RCC_PLL_MUL11                   RCC_CFGR_PLLMULL11
  553. #define RCC_PLL_MUL12                   RCC_CFGR_PLLMULL12
  554. #define RCC_PLL_MUL13                   RCC_CFGR_PLLMULL13
  555. #define RCC_PLL_MUL14                   RCC_CFGR_PLLMULL14
  556. #define RCC_PLL_MUL15                   RCC_CFGR_PLLMULL15
  557. #define RCC_PLL_MUL16                   RCC_CFGR_PLLMULL16
  558. #endif /* STM32F105xC || STM32F107xC */
  559.  
  560. /**
  561.   * @}
  562.   */
  563.  
  564. /** @defgroup RCCEx_MCO1_Clock_Source MCO1 Clock Source
  565.   * @{
  566.   */
  567. #define RCC_MCO1SOURCE_NOCLOCK           ((uint32_t)RCC_CFGR_MCO_NOCLOCK)
  568. #define RCC_MCO1SOURCE_SYSCLK            ((uint32_t)RCC_CFGR_MCO_SYSCLK)
  569. #define RCC_MCO1SOURCE_HSI               ((uint32_t)RCC_CFGR_MCO_HSI)
  570. #define RCC_MCO1SOURCE_HSE               ((uint32_t)RCC_CFGR_MCO_HSE)
  571. #define RCC_MCO1SOURCE_PLLCLK            ((uint32_t)RCC_CFGR_MCO_PLLCLK_DIV2)
  572. #if defined(STM32F105xC) || defined(STM32F107xC)
  573. #define RCC_MCO1SOURCE_PLL2CLK           ((uint32_t)RCC_CFGR_MCO_PLL2CLK)
  574. #define RCC_MCO1SOURCE_PLL3CLK_DIV2      ((uint32_t)RCC_CFGR_MCO_PLL3CLK_DIV2)
  575. #define RCC_MCO1SOURCE_EXT_HSE           ((uint32_t)RCC_CFGR_MCO_EXT_HSE)
  576. #define RCC_MCO1SOURCE_PLL3CLK           ((uint32_t)RCC_CFGR_MCO_PLL3CLK)
  577. #endif /* STM32F105xC || STM32F107xC*/
  578. /**
  579.   * @}
  580.   */
  581.  
  582. #if defined(STM32F105xC) || defined(STM32F107xC)
  583. /** @defgroup RCCEx_Interrupt RCCEx Interrupt
  584.   * @{
  585.   */
  586. #define RCC_IT_PLL2RDY                   ((uint8_t)RCC_CIR_PLL2RDYF)
  587. #define RCC_IT_PLLI2SRDY                 ((uint8_t)RCC_CIR_PLL3RDYF)
  588. /**
  589.   * @}
  590.   */
  591.  
  592. /** @defgroup RCCEx_Flag RCCEx Flag
  593.   *        Elements values convention: 0XXYYYYYb
  594.   *           - YYYYY  : Flag position in the register
  595.   *           - XX  : Register index
  596.   *                 - 01: CR register
  597.   * @{
  598.   */
  599. /* Flags in the CR register */
  600. #define RCC_FLAG_PLL2RDY                  ((uint8_t)((CR_REG_INDEX << 5U) | RCC_CR_PLL2RDY_Pos))
  601. #define RCC_FLAG_PLLI2SRDY                ((uint8_t)((CR_REG_INDEX << 5U) | RCC_CR_PLL3RDY_Pos))
  602. /**
  603.   * @}
  604.   */
  605. #endif /* STM32F105xC || STM32F107xC*/
  606.  
  607. /**
  608.   * @}
  609.   */
  610.  
  611. /* Exported macro ------------------------------------------------------------*/
  612. /** @defgroup RCCEx_Exported_Macros RCCEx Exported Macros
  613.  * @{
  614.  */
  615.  
  616. /** @defgroup RCCEx_Peripheral_Clock_Enable_Disable Peripheral Clock Enable Disable
  617.   * @brief  Enable or disable the AHB1 peripheral clock.
  618.   * @note   After reset, the peripheral clock (used for registers read/write access)
  619.   *         is disabled and the application software has to enable this clock before
  620.   *         using it.
  621.   * @{
  622.   */
  623.  
  624. #if defined(STM32F101xE) || defined(STM32F103xE) || defined(STM32F101xG)\
  625.  || defined(STM32F103xG) || defined(STM32F105xC) || defined  (STM32F107xC)\
  626.  || defined  (STM32F100xE)
  627. #define __HAL_RCC_DMA2_CLK_ENABLE()   do { \
  628.                                         __IO uint32_t tmpreg; \
  629.                                         SET_BIT(RCC->AHBENR, RCC_AHBENR_DMA2EN);\
  630.                                         /* Delay after an RCC peripheral clock enabling */ \
  631.                                         tmpreg = READ_BIT(RCC->AHBENR, RCC_AHBENR_DMA2EN);\
  632.                                         UNUSED(tmpreg); \
  633.                                       } while(0U)
  634.  
  635. #define __HAL_RCC_DMA2_CLK_DISABLE()        (RCC->AHBENR &= ~(RCC_AHBENR_DMA2EN))
  636. #endif /* STM32F101xE || STM32F103xE || STM32F101xG || STM32F103xG || STM32F105xC || STM32F107xC || STM32F100xE */
  637.  
  638. #if defined(STM32F101xE) || defined(STM32F103xE) || defined(STM32F101xG)\
  639.  || defined(STM32F103xG) || defined  (STM32F100xE)
  640. #define __HAL_RCC_FSMC_CLK_ENABLE()   do { \
  641.                                         __IO uint32_t tmpreg; \
  642.                                         SET_BIT(RCC->AHBENR, RCC_AHBENR_FSMCEN);\
  643.                                         /* Delay after an RCC peripheral clock enabling */ \
  644.                                         tmpreg = READ_BIT(RCC->AHBENR, RCC_AHBENR_FSMCEN);\
  645.                                         UNUSED(tmpreg); \
  646.                                       } while(0U)
  647.  
  648. #define __HAL_RCC_FSMC_CLK_DISABLE()        (RCC->AHBENR &= ~(RCC_AHBENR_FSMCEN))
  649. #endif /* STM32F101xE || STM32F103xE || STM32F101xG || STM32F103xG || STM32F100xE */
  650.  
  651. #if defined(STM32F103xE) || defined(STM32F103xG)
  652. #define __HAL_RCC_SDIO_CLK_ENABLE()   do { \
  653.                                         __IO uint32_t tmpreg; \
  654.                                         SET_BIT(RCC->AHBENR, RCC_AHBENR_SDIOEN);\
  655.                                         /* Delay after an RCC peripheral clock enabling */ \
  656.                                         tmpreg = READ_BIT(RCC->AHBENR, RCC_AHBENR_SDIOEN);\
  657.                                         UNUSED(tmpreg); \
  658.                                       } while(0U)
  659.  
  660.  
  661. #define __HAL_RCC_SDIO_CLK_DISABLE()        (RCC->AHBENR &= ~(RCC_AHBENR_SDIOEN))
  662. #endif /* STM32F103xE || STM32F103xG */
  663.  
  664. #if defined(STM32F105xC) || defined(STM32F107xC)
  665. #define __HAL_RCC_USB_OTG_FS_CLK_ENABLE()   do { \
  666.                                         __IO uint32_t tmpreg; \
  667.                                         SET_BIT(RCC->AHBENR, RCC_AHBENR_OTGFSEN);\
  668.                                         /* Delay after an RCC peripheral clock enabling */ \
  669.                                         tmpreg = READ_BIT(RCC->AHBENR, RCC_AHBENR_OTGFSEN);\
  670.                                         UNUSED(tmpreg); \
  671.                                       } while(0U)
  672.  
  673.  
  674. #define __HAL_RCC_USB_OTG_FS_CLK_DISABLE()       (RCC->AHBENR &= ~(RCC_AHBENR_OTGFSEN))
  675. #endif /* STM32F105xC || STM32F107xC*/
  676.  
  677. #if defined(STM32F107xC)
  678. #define __HAL_RCC_ETHMAC_CLK_ENABLE()   do { \
  679.                                         __IO uint32_t tmpreg; \
  680.                                         SET_BIT(RCC->AHBENR, RCC_AHBENR_ETHMACEN);\
  681.                                         /* Delay after an RCC peripheral clock enabling */ \
  682.                                         tmpreg = READ_BIT(RCC->AHBENR, RCC_AHBENR_ETHMACEN);\
  683.                                         UNUSED(tmpreg); \
  684.                                       } while(0U)
  685.  
  686. #define __HAL_RCC_ETHMACTX_CLK_ENABLE()   do { \
  687.                                         __IO uint32_t tmpreg; \
  688.                                         SET_BIT(RCC->AHBENR, RCC_AHBENR_ETHMACTXEN);\
  689.                                         /* Delay after an RCC peripheral clock enabling */ \
  690.                                         tmpreg = READ_BIT(RCC->AHBENR, RCC_AHBENR_ETHMACTXEN);\
  691.                                         UNUSED(tmpreg); \
  692.                                       } while(0U)
  693.  
  694. #define __HAL_RCC_ETHMACRX_CLK_ENABLE()   do { \
  695.                                         __IO uint32_t tmpreg; \
  696.                                         SET_BIT(RCC->AHBENR, RCC_AHBENR_ETHMACRXEN);\
  697.                                         /* Delay after an RCC peripheral clock enabling */ \
  698.                                         tmpreg = READ_BIT(RCC->AHBENR, RCC_AHBENR_ETHMACRXEN);\
  699.                                         UNUSED(tmpreg); \
  700.                                       } while(0U)
  701.  
  702. #define __HAL_RCC_ETHMAC_CLK_DISABLE()      (RCC->AHBENR &= ~(RCC_AHBENR_ETHMACEN))
  703. #define __HAL_RCC_ETHMACTX_CLK_DISABLE()    (RCC->AHBENR &= ~(RCC_AHBENR_ETHMACTXEN))
  704. #define __HAL_RCC_ETHMACRX_CLK_DISABLE()    (RCC->AHBENR &= ~(RCC_AHBENR_ETHMACRXEN))
  705.  
  706. /**
  707.   * @brief  Enable ETHERNET clock.
  708.   */
  709. #define __HAL_RCC_ETH_CLK_ENABLE() do {                                     \
  710.                                         __HAL_RCC_ETHMAC_CLK_ENABLE();      \
  711.                                         __HAL_RCC_ETHMACTX_CLK_ENABLE();    \
  712.                                         __HAL_RCC_ETHMACRX_CLK_ENABLE();    \
  713.                                       } while(0U)
  714. /**
  715.   * @brief  Disable ETHERNET clock.
  716.   */
  717. #define __HAL_RCC_ETH_CLK_DISABLE()  do {                                      \
  718.                                           __HAL_RCC_ETHMACTX_CLK_DISABLE();    \
  719.                                           __HAL_RCC_ETHMACRX_CLK_DISABLE();    \
  720.                                           __HAL_RCC_ETHMAC_CLK_DISABLE();      \
  721.                                         } while(0U)
  722.  
  723. #endif /* STM32F107xC*/
  724.  
  725. /**
  726.   * @}
  727.   */
  728.  
  729. /** @defgroup RCCEx_AHB1_Peripheral_Clock_Enable_Disable_Status AHB1 Peripheral Clock Enable Disable Status
  730.   * @brief  Get the enable or disable status of the AHB1 peripheral clock.
  731.   * @note   After reset, the peripheral clock (used for registers read/write access)
  732.   *         is disabled and the application software has to enable this clock before
  733.   *         using it.
  734.   * @{
  735.   */
  736.  
  737. #if defined(STM32F101xE) || defined(STM32F103xE) || defined(STM32F101xG)\
  738.  || defined(STM32F103xG) || defined(STM32F105xC) || defined  (STM32F107xC)\
  739.  || defined  (STM32F100xE)
  740. #define __HAL_RCC_DMA2_IS_CLK_ENABLED()       ((RCC->AHBENR & (RCC_AHBENR_DMA2EN)) != RESET)
  741. #define __HAL_RCC_DMA2_IS_CLK_DISABLED()      ((RCC->AHBENR & (RCC_AHBENR_DMA2EN)) == RESET)
  742. #endif /* STM32F101xE || STM32F103xE || STM32F101xG || STM32F103xG || STM32F105xC || STM32F107xC || STM32F100xE */
  743. #if defined(STM32F101xE) || defined(STM32F103xE) || defined(STM32F101xG)\
  744.  || defined(STM32F103xG) || defined  (STM32F100xE)
  745. #define __HAL_RCC_FSMC_IS_CLK_ENABLED()       ((RCC->AHBENR & (RCC_AHBENR_FSMCEN)) != RESET)
  746. #define __HAL_RCC_FSMC_IS_CLK_DISABLED()      ((RCC->AHBENR & (RCC_AHBENR_FSMCEN)) == RESET)
  747. #endif /* STM32F101xE || STM32F103xE || STM32F101xG || STM32F103xG || STM32F100xE */
  748. #if defined(STM32F103xE) || defined(STM32F103xG)
  749. #define __HAL_RCC_SDIO_IS_CLK_ENABLED()       ((RCC->AHBENR & (RCC_AHBENR_SDIOEN)) != RESET)
  750. #define __HAL_RCC_SDIO_IS_CLK_DISABLED()      ((RCC->AHBENR & (RCC_AHBENR_SDIOEN)) == RESET)
  751. #endif /* STM32F103xE || STM32F103xG */
  752. #if defined(STM32F105xC) || defined(STM32F107xC)
  753. #define __HAL_RCC_USB_OTG_FS_IS_CLK_ENABLED()       ((RCC->AHBENR & (RCC_AHBENR_OTGFSEN)) != RESET)
  754. #define __HAL_RCC_USB_OTG_FS_IS_CLK_DISABLED()      ((RCC->AHBENR & (RCC_AHBENR_OTGFSEN)) == RESET)
  755. #endif /* STM32F105xC || STM32F107xC*/
  756. #if defined(STM32F107xC)
  757. #define __HAL_RCC_ETHMAC_IS_CLK_ENABLED()       ((RCC->AHBENR & (RCC_AHBENR_ETHMACEN)) != RESET)
  758. #define __HAL_RCC_ETHMAC_IS_CLK_DISABLED()      ((RCC->AHBENR & (RCC_AHBENR_ETHMACEN)) == RESET)
  759. #define __HAL_RCC_ETHMACTX_IS_CLK_ENABLED()       ((RCC->AHBENR & (RCC_AHBENR_ETHMACTXEN)) != RESET)
  760. #define __HAL_RCC_ETHMACTX_IS_CLK_DISABLED()      ((RCC->AHBENR & (RCC_AHBENR_ETHMACTXEN)) == RESET)
  761. #define __HAL_RCC_ETHMACRX_IS_CLK_ENABLED()       ((RCC->AHBENR & (RCC_AHBENR_ETHMACRXEN)) != RESET)
  762. #define __HAL_RCC_ETHMACRX_IS_CLK_DISABLED()      ((RCC->AHBENR & (RCC_AHBENR_ETHMACRXEN)) == RESET)
  763. #endif /* STM32F107xC*/
  764.  
  765. /**
  766.   * @}
  767.   */
  768.  
  769. /** @defgroup RCCEx_APB1_Clock_Enable_Disable APB1 Clock Enable Disable
  770.   * @brief  Enable or disable the Low Speed APB (APB1) peripheral clock.
  771.   * @note   After reset, the peripheral clock (used for registers read/write access)
  772.   *         is disabled and the application software has to enable this clock before
  773.   *         using it.
  774.   * @{
  775.   */
  776.  
  777. #if defined(STM32F103x6) || defined(STM32F103xB) || defined(STM32F103xE)\
  778.  || defined(STM32F103xG) || defined(STM32F105xC) ||defined(STM32F107xC)
  779. #define __HAL_RCC_CAN1_CLK_ENABLE()   do { \
  780.                                         __IO uint32_t tmpreg; \
  781.                                         SET_BIT(RCC->APB1ENR, RCC_APB1ENR_CAN1EN);\
  782.                                         /* Delay after an RCC peripheral clock enabling */ \
  783.                                         tmpreg = READ_BIT(RCC->APB1ENR, RCC_APB1ENR_CAN1EN);\
  784.                                         UNUSED(tmpreg); \
  785.                                       } while(0U)
  786.  
  787. #define __HAL_RCC_CAN1_CLK_DISABLE()        (RCC->APB1ENR &= ~(RCC_APB1ENR_CAN1EN))
  788. #endif /* STM32F103x6 || STM32F103xB || STM32F103xE || STM32F103xG || STM32F105xC || STM32F107xC */
  789.  
  790. #if defined(STM32F100xB) || defined(STM32F100xE) || defined(STM32F101xB)\
  791.  || defined(STM32F101xE) || defined(STM32F101xG) || defined(STM32F102xB)\
  792.  || defined(STM32F103xB) || defined(STM32F103xE) || defined(STM32F103xG)\
  793.  || defined(STM32F105xC) || defined(STM32F107xC)
  794. #define __HAL_RCC_TIM4_CLK_ENABLE()   do { \
  795.                                         __IO uint32_t tmpreg; \
  796.                                         SET_BIT(RCC->APB1ENR, RCC_APB1ENR_TIM4EN);\
  797.                                         /* Delay after an RCC peripheral clock enabling */ \
  798.                                         tmpreg = READ_BIT(RCC->APB1ENR, RCC_APB1ENR_TIM4EN);\
  799.                                         UNUSED(tmpreg); \
  800.                                       } while(0U)
  801.  
  802. #define __HAL_RCC_SPI2_CLK_ENABLE()   do { \
  803.                                         __IO uint32_t tmpreg; \
  804.                                         SET_BIT(RCC->APB1ENR, RCC_APB1ENR_SPI2EN);\
  805.                                         /* Delay after an RCC peripheral clock enabling */ \
  806.                                         tmpreg = READ_BIT(RCC->APB1ENR, RCC_APB1ENR_SPI2EN);\
  807.                                         UNUSED(tmpreg); \
  808.                                       } while(0U)
  809.  
  810. #define __HAL_RCC_USART3_CLK_ENABLE()   do { \
  811.                                         __IO uint32_t tmpreg; \
  812.                                         SET_BIT(RCC->APB1ENR, RCC_APB1ENR_USART3EN);\
  813.                                         /* Delay after an RCC peripheral clock enabling */ \
  814.                                         tmpreg = READ_BIT(RCC->APB1ENR, RCC_APB1ENR_USART3EN);\
  815.                                         UNUSED(tmpreg); \
  816.                                       } while(0U)
  817.  
  818. #define __HAL_RCC_I2C2_CLK_ENABLE()   do { \
  819.                                         __IO uint32_t tmpreg; \
  820.                                         SET_BIT(RCC->APB1ENR, RCC_APB1ENR_I2C2EN);\
  821.                                         /* Delay after an RCC peripheral clock enabling */ \
  822.                                         tmpreg = READ_BIT(RCC->APB1ENR, RCC_APB1ENR_I2C2EN);\
  823.                                         UNUSED(tmpreg); \
  824.                                       } while(0U)
  825.  
  826. #define __HAL_RCC_TIM4_CLK_DISABLE()        (RCC->APB1ENR &= ~(RCC_APB1ENR_TIM4EN))
  827. #define __HAL_RCC_SPI2_CLK_DISABLE()        (RCC->APB1ENR &= ~(RCC_APB1ENR_SPI2EN))
  828. #define __HAL_RCC_USART3_CLK_DISABLE()      (RCC->APB1ENR &= ~(RCC_APB1ENR_USART3EN))
  829. #define __HAL_RCC_I2C2_CLK_DISABLE()        (RCC->APB1ENR &= ~(RCC_APB1ENR_I2C2EN))
  830. #endif /* STM32F100xB || STM32F101xB || STM32F101xE || (...) || STM32F105xC || STM32F107xC */
  831.  
  832. #if defined(STM32F102x6) || defined(STM32F102xB) || defined(STM32F103x6)\
  833.  || defined(STM32F103xB) || defined(STM32F103xE) || defined(STM32F103xG)
  834. #define __HAL_RCC_USB_CLK_ENABLE()   do { \
  835.                                         __IO uint32_t tmpreg; \
  836.                                         SET_BIT(RCC->APB1ENR, RCC_APB1ENR_USBEN);\
  837.                                         /* Delay after an RCC peripheral clock enabling */ \
  838.                                         tmpreg = READ_BIT(RCC->APB1ENR, RCC_APB1ENR_USBEN);\
  839.                                         UNUSED(tmpreg); \
  840.                                       } while(0U)
  841.  
  842. #define __HAL_RCC_USB_CLK_DISABLE()         (RCC->APB1ENR &= ~(RCC_APB1ENR_USBEN))
  843. #endif /* STM32F102x6 || STM32F102xB || STM32F103x6 || STM32F103xB || STM32F103xE || STM32F103xG */
  844.  
  845. #if defined(STM32F101xE) || defined(STM32F103xE) || defined(STM32F101xG)\
  846.  || defined(STM32F103xG) || defined(STM32F105xC) || defined(STM32F107xC)
  847. #define __HAL_RCC_TIM5_CLK_ENABLE()   do { \
  848.                                         __IO uint32_t tmpreg; \
  849.                                         SET_BIT(RCC->APB1ENR, RCC_APB1ENR_TIM5EN);\
  850.                                         /* Delay after an RCC peripheral clock enabling */ \
  851.                                         tmpreg = READ_BIT(RCC->APB1ENR, RCC_APB1ENR_TIM5EN);\
  852.                                         UNUSED(tmpreg); \
  853.                                       } while(0U)
  854.  
  855. #define __HAL_RCC_TIM6_CLK_ENABLE()   do { \
  856.                                         __IO uint32_t tmpreg; \
  857.                                         SET_BIT(RCC->APB1ENR, RCC_APB1ENR_TIM6EN);\
  858.                                         /* Delay after an RCC peripheral clock enabling */ \
  859.                                         tmpreg = READ_BIT(RCC->APB1ENR, RCC_APB1ENR_TIM6EN);\
  860.                                         UNUSED(tmpreg); \
  861.                                       } while(0U)
  862.  
  863. #define __HAL_RCC_TIM7_CLK_ENABLE()   do { \
  864.                                         __IO uint32_t tmpreg; \
  865.                                         SET_BIT(RCC->APB1ENR, RCC_APB1ENR_TIM7EN);\
  866.                                         /* Delay after an RCC peripheral clock enabling */ \
  867.                                         tmpreg = READ_BIT(RCC->APB1ENR, RCC_APB1ENR_TIM7EN);\
  868.                                         UNUSED(tmpreg); \
  869.                                       } while(0U)
  870.  
  871. #define __HAL_RCC_SPI3_CLK_ENABLE()   do { \
  872.                                         __IO uint32_t tmpreg; \
  873.                                         SET_BIT(RCC->APB1ENR, RCC_APB1ENR_SPI3EN);\
  874.                                         /* Delay after an RCC peripheral clock enabling */ \
  875.                                         tmpreg = READ_BIT(RCC->APB1ENR, RCC_APB1ENR_SPI3EN);\
  876.                                         UNUSED(tmpreg); \
  877.                                       } while(0U)
  878.  
  879. #define __HAL_RCC_UART4_CLK_ENABLE()   do { \
  880.                                         __IO uint32_t tmpreg; \
  881.                                         SET_BIT(RCC->APB1ENR, RCC_APB1ENR_UART4EN);\
  882.                                         /* Delay after an RCC peripheral clock enabling */ \
  883.                                         tmpreg = READ_BIT(RCC->APB1ENR, RCC_APB1ENR_UART4EN);\
  884.                                         UNUSED(tmpreg); \
  885.                                       } while(0U)
  886.  
  887. #define __HAL_RCC_UART5_CLK_ENABLE()   do { \
  888.                                         __IO uint32_t tmpreg; \
  889.                                         SET_BIT(RCC->APB1ENR, RCC_APB1ENR_UART5EN);\
  890.                                         /* Delay after an RCC peripheral clock enabling */ \
  891.                                         tmpreg = READ_BIT(RCC->APB1ENR, RCC_APB1ENR_UART5EN);\
  892.                                         UNUSED(tmpreg); \
  893.                                       } while(0U)
  894.  
  895. #define __HAL_RCC_DAC_CLK_ENABLE()   do { \
  896.                                         __IO uint32_t tmpreg; \
  897.                                         SET_BIT(RCC->APB1ENR, RCC_APB1ENR_DACEN);\
  898.                                         /* Delay after an RCC peripheral clock enabling */ \
  899.                                         tmpreg = READ_BIT(RCC->APB1ENR, RCC_APB1ENR_DACEN);\
  900.                                         UNUSED(tmpreg); \
  901.                                       } while(0U)
  902.  
  903. #define __HAL_RCC_TIM5_CLK_DISABLE()        (RCC->APB1ENR &= ~(RCC_APB1ENR_TIM5EN))
  904. #define __HAL_RCC_TIM6_CLK_DISABLE()        (RCC->APB1ENR &= ~(RCC_APB1ENR_TIM6EN))
  905. #define __HAL_RCC_TIM7_CLK_DISABLE()        (RCC->APB1ENR &= ~(RCC_APB1ENR_TIM7EN))
  906. #define __HAL_RCC_SPI3_CLK_DISABLE()        (RCC->APB1ENR &= ~(RCC_APB1ENR_SPI3EN))
  907. #define __HAL_RCC_UART4_CLK_DISABLE()       (RCC->APB1ENR &= ~(RCC_APB1ENR_UART4EN))
  908. #define __HAL_RCC_UART5_CLK_DISABLE()       (RCC->APB1ENR &= ~(RCC_APB1ENR_UART5EN))
  909. #define __HAL_RCC_DAC_CLK_DISABLE()         (RCC->APB1ENR &= ~(RCC_APB1ENR_DACEN))
  910. #endif /* STM32F101xE || STM32F103xE || STM32F101xG || (...) || STM32F105xC || STM32F107xC */
  911.  
  912. #if defined(STM32F100xB) || defined  (STM32F100xE)
  913. #define __HAL_RCC_TIM6_CLK_ENABLE()   do { \
  914.                                         __IO uint32_t tmpreg; \
  915.                                         SET_BIT(RCC->APB1ENR, RCC_APB1ENR_TIM6EN);\
  916.                                         /* Delay after an RCC peripheral clock enabling */ \
  917.                                         tmpreg = READ_BIT(RCC->APB1ENR, RCC_APB1ENR_TIM6EN);\
  918.                                         UNUSED(tmpreg); \
  919.                                       } while(0U)
  920.  
  921. #define __HAL_RCC_TIM7_CLK_ENABLE()   do { \
  922.                                         __IO uint32_t tmpreg; \
  923.                                         SET_BIT(RCC->APB1ENR, RCC_APB1ENR_TIM7EN);\
  924.                                         /* Delay after an RCC peripheral clock enabling */ \
  925.                                         tmpreg = READ_BIT(RCC->APB1ENR, RCC_APB1ENR_TIM7EN);\
  926.                                         UNUSED(tmpreg); \
  927.                                       } while(0U)
  928.  
  929. #define __HAL_RCC_DAC_CLK_ENABLE()   do { \
  930.                                         __IO uint32_t tmpreg; \
  931.                                         SET_BIT(RCC->APB1ENR, RCC_APB1ENR_DACEN);\
  932.                                         /* Delay after an RCC peripheral clock enabling */ \
  933.                                         tmpreg = READ_BIT(RCC->APB1ENR, RCC_APB1ENR_DACEN);\
  934.                                         UNUSED(tmpreg); \
  935.                                       } while(0U)
  936.  
  937. #define __HAL_RCC_CEC_CLK_ENABLE()   do { \
  938.                                         __IO uint32_t tmpreg; \
  939.                                         SET_BIT(RCC->APB1ENR, RCC_APB1ENR_CECEN);\
  940.                                         /* Delay after an RCC peripheral clock enabling */ \
  941.                                         tmpreg = READ_BIT(RCC->APB1ENR, RCC_APB1ENR_CECEN);\
  942.                                         UNUSED(tmpreg); \
  943.                                       } while(0U)
  944.  
  945. #define __HAL_RCC_TIM6_CLK_DISABLE()        (RCC->APB1ENR &= ~(RCC_APB1ENR_TIM6EN))
  946. #define __HAL_RCC_TIM7_CLK_DISABLE()        (RCC->APB1ENR &= ~(RCC_APB1ENR_TIM7EN))
  947. #define __HAL_RCC_DAC_CLK_DISABLE()         (RCC->APB1ENR &= ~(RCC_APB1ENR_DACEN))
  948. #define __HAL_RCC_CEC_CLK_DISABLE()         (RCC->APB1ENR &= ~(RCC_APB1ENR_CECEN))
  949. #endif /* STM32F100xB || STM32F100xE */
  950.  
  951. #ifdef STM32F100xE
  952. #define __HAL_RCC_TIM5_CLK_ENABLE()   do { \
  953.                                         __IO uint32_t tmpreg; \
  954.                                         SET_BIT(RCC->APB1ENR, RCC_APB1ENR_TIM5EN);\
  955.                                         /* Delay after an RCC peripheral clock enabling */ \
  956.                                         tmpreg = READ_BIT(RCC->APB1ENR, RCC_APB1ENR_TIM5EN);\
  957.                                         UNUSED(tmpreg); \
  958.                                       } while(0U)
  959.  
  960. #define __HAL_RCC_TIM12_CLK_ENABLE()   do { \
  961.                                         __IO uint32_t tmpreg; \
  962.                                         SET_BIT(RCC->APB1ENR, RCC_APB1ENR_TIM12EN);\
  963.                                         /* Delay after an RCC peripheral clock enabling */ \
  964.                                         tmpreg = READ_BIT(RCC->APB1ENR, RCC_APB1ENR_TIM12EN);\
  965.                                         UNUSED(tmpreg); \
  966.                                       } while(0U)
  967.  
  968. #define __HAL_RCC_TIM13_CLK_ENABLE()   do { \
  969.                                         __IO uint32_t tmpreg; \
  970.                                         SET_BIT(RCC->APB1ENR, RCC_APB1ENR_TIM13EN);\
  971.                                         /* Delay after an RCC peripheral clock enabling */ \
  972.                                         tmpreg = READ_BIT(RCC->APB1ENR, RCC_APB1ENR_TIM13EN);\
  973.                                         UNUSED(tmpreg); \
  974.                                       } while(0U)
  975.  
  976. #define __HAL_RCC_TIM14_CLK_ENABLE()   do { \
  977.                                         __IO uint32_t tmpreg; \
  978.                                         SET_BIT(RCC->APB1ENR, RCC_APB1ENR_TIM14EN);\
  979.                                         /* Delay after an RCC peripheral clock enabling */ \
  980.                                         tmpreg = READ_BIT(RCC->APB1ENR, RCC_APB1ENR_TIM14EN);\
  981.                                         UNUSED(tmpreg); \
  982.                                       } while(0U)
  983.  
  984. #define __HAL_RCC_SPI3_CLK_ENABLE()   do { \
  985.                                         __IO uint32_t tmpreg; \
  986.                                         SET_BIT(RCC->APB1ENR, RCC_APB1ENR_SPI3EN);\
  987.                                         /* Delay after an RCC peripheral clock enabling */ \
  988.                                         tmpreg = READ_BIT(RCC->APB1ENR, RCC_APB1ENR_SPI3EN);\
  989.                                         UNUSED(tmpreg); \
  990.                                       } while(0U)
  991.  
  992. #define __HAL_RCC_UART4_CLK_ENABLE()   do { \
  993.                                         __IO uint32_t tmpreg; \
  994.                                         SET_BIT(RCC->APB1ENR, RCC_APB1ENR_UART4EN);\
  995.                                         /* Delay after an RCC peripheral clock enabling */ \
  996.                                         tmpreg = READ_BIT(RCC->APB1ENR, RCC_APB1ENR_UART4EN);\
  997.                                         UNUSED(tmpreg); \
  998.                                       } while(0U)
  999.  
  1000. #define __HAL_RCC_UART5_CLK_ENABLE()   do { \
  1001.                                         __IO uint32_t tmpreg; \
  1002.                                         SET_BIT(RCC->APB1ENR, RCC_APB1ENR_UART5EN);\
  1003.                                         /* Delay after an RCC peripheral clock enabling */ \
  1004.                                         tmpreg = READ_BIT(RCC->APB1ENR, RCC_APB1ENR_UART5EN);\
  1005.                                         UNUSED(tmpreg); \
  1006.                                       } while(0U)
  1007.  
  1008. #define __HAL_RCC_TIM5_CLK_DISABLE()        (RCC->APB1ENR &= ~(RCC_APB1ENR_TIM5EN))
  1009. #define __HAL_RCC_TIM12_CLK_DISABLE()       (RCC->APB1ENR &= ~(RCC_APB1ENR_TIM12EN))
  1010. #define __HAL_RCC_TIM13_CLK_DISABLE()       (RCC->APB1ENR &= ~(RCC_APB1ENR_TIM13EN))
  1011. #define __HAL_RCC_TIM14_CLK_DISABLE()       (RCC->APB1ENR &= ~(RCC_APB1ENR_TIM14EN))
  1012. #define __HAL_RCC_SPI3_CLK_DISABLE()        (RCC->APB1ENR &= ~(RCC_APB1ENR_SPI3EN))
  1013. #define __HAL_RCC_UART4_CLK_DISABLE()       (RCC->APB1ENR &= ~(RCC_APB1ENR_UART4EN))
  1014. #define __HAL_RCC_UART5_CLK_DISABLE()       (RCC->APB1ENR &= ~(RCC_APB1ENR_UART5EN))
  1015. #endif /* STM32F100xE */
  1016.  
  1017. #if defined(STM32F105xC) || defined(STM32F107xC)
  1018. #define __HAL_RCC_CAN2_CLK_ENABLE()   do { \
  1019.                                         __IO uint32_t tmpreg; \
  1020.                                         SET_BIT(RCC->APB1ENR, RCC_APB1ENR_CAN2EN);\
  1021.                                         /* Delay after an RCC peripheral clock enabling */ \
  1022.                                         tmpreg = READ_BIT(RCC->APB1ENR, RCC_APB1ENR_CAN2EN);\
  1023.                                         UNUSED(tmpreg); \
  1024.                                       } while(0U)
  1025.  
  1026. #define __HAL_RCC_CAN2_CLK_DISABLE()        (RCC->APB1ENR &= ~(RCC_APB1ENR_CAN2EN))
  1027. #endif /* STM32F105xC || STM32F107xC */
  1028.  
  1029. #if defined(STM32F101xG) || defined(STM32F103xG)
  1030. #define __HAL_RCC_TIM12_CLK_ENABLE()   do { \
  1031.                                         __IO uint32_t tmpreg; \
  1032.                                         SET_BIT(RCC->APB1ENR, RCC_APB1ENR_TIM12EN);\
  1033.                                         /* Delay after an RCC peripheral clock enabling */ \
  1034.                                         tmpreg = READ_BIT(RCC->APB1ENR, RCC_APB1ENR_TIM12EN);\
  1035.                                         UNUSED(tmpreg); \
  1036.                                       } while(0U)
  1037.  
  1038. #define __HAL_RCC_TIM13_CLK_ENABLE()   do { \
  1039.                                         __IO uint32_t tmpreg; \
  1040.                                         SET_BIT(RCC->APB1ENR, RCC_APB1ENR_TIM13EN);\
  1041.                                         /* Delay after an RCC peripheral clock enabling */ \
  1042.                                         tmpreg = READ_BIT(RCC->APB1ENR, RCC_APB1ENR_TIM13EN);\
  1043.                                         UNUSED(tmpreg); \
  1044.                                       } while(0U)
  1045.  
  1046. #define __HAL_RCC_TIM14_CLK_ENABLE()   do { \
  1047.                                         __IO uint32_t tmpreg; \
  1048.                                         SET_BIT(RCC->APB1ENR, RCC_APB1ENR_TIM14EN);\
  1049.                                         /* Delay after an RCC peripheral clock enabling */ \
  1050.                                         tmpreg = READ_BIT(RCC->APB1ENR, RCC_APB1ENR_TIM14EN);\
  1051.                                         UNUSED(tmpreg); \
  1052.                                       } while(0U)
  1053.  
  1054. #define __HAL_RCC_TIM12_CLK_DISABLE()       (RCC->APB1ENR &= ~(RCC_APB1ENR_TIM12EN))
  1055. #define __HAL_RCC_TIM13_CLK_DISABLE()       (RCC->APB1ENR &= ~(RCC_APB1ENR_TIM13EN))
  1056. #define __HAL_RCC_TIM14_CLK_DISABLE()       (RCC->APB1ENR &= ~(RCC_APB1ENR_TIM14EN))
  1057. #endif /* STM32F101xG || STM32F103xG*/
  1058.  
  1059. /**
  1060.   * @}
  1061.   */
  1062.  
  1063. /** @defgroup RCCEx_APB1_Peripheral_Clock_Enable_Disable_Status APB1 Peripheral Clock Enable Disable Status
  1064.   * @brief  Get the enable or disable status of the APB1 peripheral clock.
  1065.   * @note   After reset, the peripheral clock (used for registers read/write access)
  1066.   *         is disabled and the application software has to enable this clock before
  1067.   *         using it.
  1068.   * @{
  1069.   */
  1070.  
  1071. #if defined(STM32F103x6) || defined(STM32F103xB) || defined(STM32F103xE)\
  1072.  || defined(STM32F103xG) || defined(STM32F105xC) ||defined(STM32F107xC)
  1073. #define __HAL_RCC_CAN1_IS_CLK_ENABLED()       ((RCC->APB1ENR & (RCC_APB1ENR_CAN1EN)) != RESET)
  1074. #define __HAL_RCC_CAN1_IS_CLK_DISABLED()      ((RCC->APB1ENR & (RCC_APB1ENR_CAN1EN)) == RESET)
  1075. #endif /* STM32F103x6 || STM32F103xB || STM32F103xE || STM32F103xG || STM32F105xC || STM32F107xC */
  1076. #if defined(STM32F100xB) || defined(STM32F100xE) || defined(STM32F101xB)\
  1077.  || defined(STM32F101xE) || defined(STM32F101xG) || defined(STM32F102xB)\
  1078.  || defined(STM32F103xB) || defined(STM32F103xE) || defined(STM32F103xG)\
  1079.  || defined(STM32F105xC) || defined(STM32F107xC)
  1080. #define __HAL_RCC_TIM4_IS_CLK_ENABLED()       ((RCC->APB1ENR & (RCC_APB1ENR_TIM4EN)) != RESET)
  1081. #define __HAL_RCC_TIM4_IS_CLK_DISABLED()      ((RCC->APB1ENR & (RCC_APB1ENR_TIM4EN)) == RESET)
  1082. #define __HAL_RCC_SPI2_IS_CLK_ENABLED()       ((RCC->APB1ENR & (RCC_APB1ENR_SPI2EN)) != RESET)
  1083. #define __HAL_RCC_SPI2_IS_CLK_DISABLED()      ((RCC->APB1ENR & (RCC_APB1ENR_SPI2EN)) == RESET)
  1084. #define __HAL_RCC_USART3_IS_CLK_ENABLED()       ((RCC->APB1ENR & (RCC_APB1ENR_USART3EN)) != RESET)
  1085. #define __HAL_RCC_USART3_IS_CLK_DISABLED()      ((RCC->APB1ENR & (RCC_APB1ENR_USART3EN)) == RESET)
  1086. #define __HAL_RCC_I2C2_IS_CLK_ENABLED()       ((RCC->APB1ENR & (RCC_APB1ENR_I2C2EN)) != RESET)
  1087. #define __HAL_RCC_I2C2_IS_CLK_DISABLED()      ((RCC->APB1ENR & (RCC_APB1ENR_I2C2EN)) == RESET)
  1088. #endif /* STM32F100xB || STM32F101xB || STM32F101xE || (...) || STM32F105xC || STM32F107xC */
  1089. #if defined(STM32F102x6) || defined(STM32F102xB) || defined(STM32F103x6)\
  1090.  || defined(STM32F103xB) || defined(STM32F103xE) || defined(STM32F103xG)
  1091. #define __HAL_RCC_USB_IS_CLK_ENABLED()       ((RCC->APB1ENR & (RCC_APB1ENR_USBEN)) != RESET)
  1092. #define __HAL_RCC_USB_IS_CLK_DISABLED()      ((RCC->APB1ENR & (RCC_APB1ENR_USBEN)) == RESET)
  1093. #endif /* STM32F102x6 || STM32F102xB || STM32F103x6 || STM32F103xB || STM32F103xE || STM32F103xG */
  1094. #if defined(STM32F101xE) || defined(STM32F103xE) || defined(STM32F101xG)\
  1095.  || defined(STM32F103xG) || defined(STM32F105xC) || defined(STM32F107xC)
  1096. #define __HAL_RCC_TIM5_IS_CLK_ENABLED()       ((RCC->APB1ENR & (RCC_APB1ENR_TIM5EN)) != RESET)
  1097. #define __HAL_RCC_TIM5_IS_CLK_DISABLED()      ((RCC->APB1ENR & (RCC_APB1ENR_TIM5EN)) == RESET)
  1098. #define __HAL_RCC_TIM6_IS_CLK_ENABLED()       ((RCC->APB1ENR & (RCC_APB1ENR_TIM6EN)) != RESET)
  1099. #define __HAL_RCC_TIM6_IS_CLK_DISABLED()      ((RCC->APB1ENR & (RCC_APB1ENR_TIM6EN)) == RESET)
  1100. #define __HAL_RCC_TIM7_IS_CLK_ENABLED()       ((RCC->APB1ENR & (RCC_APB1ENR_TIM7EN)) != RESET)
  1101. #define __HAL_RCC_TIM7_IS_CLK_DISABLED()      ((RCC->APB1ENR & (RCC_APB1ENR_TIM7EN)) == RESET)
  1102. #define __HAL_RCC_SPI3_IS_CLK_ENABLED()       ((RCC->APB1ENR & (RCC_APB1ENR_SPI3EN)) != RESET)
  1103. #define __HAL_RCC_SPI3_IS_CLK_DISABLED()      ((RCC->APB1ENR & (RCC_APB1ENR_SPI3EN)) == RESET)
  1104. #define __HAL_RCC_UART4_IS_CLK_ENABLED()       ((RCC->APB1ENR & (RCC_APB1ENR_UART4EN)) != RESET)
  1105. #define __HAL_RCC_UART4_IS_CLK_DISABLED()      ((RCC->APB1ENR & (RCC_APB1ENR_UART4EN)) == RESET)
  1106. #define __HAL_RCC_UART5_IS_CLK_ENABLED()       ((RCC->APB1ENR & (RCC_APB1ENR_UART5EN)) != RESET)
  1107. #define __HAL_RCC_UART5_IS_CLK_DISABLED()      ((RCC->APB1ENR & (RCC_APB1ENR_UART5EN)) == RESET)
  1108. #define __HAL_RCC_DAC_IS_CLK_ENABLED()       ((RCC->APB1ENR & (RCC_APB1ENR_DACEN)) != RESET)
  1109. #define __HAL_RCC_DAC_IS_CLK_DISABLED()      ((RCC->APB1ENR & (RCC_APB1ENR_DACEN)) == RESET)
  1110. #endif /* STM32F101xE || STM32F103xE || STM32F101xG || (...) || STM32F105xC || STM32F107xC */
  1111. #if defined(STM32F100xB) || defined  (STM32F100xE)
  1112. #define __HAL_RCC_TIM6_IS_CLK_ENABLED()       ((RCC->APB1ENR & (RCC_APB1ENR_TIM6EN)) != RESET)
  1113. #define __HAL_RCC_TIM6_IS_CLK_DISABLED()      ((RCC->APB1ENR & (RCC_APB1ENR_TIM6EN)) == RESET)
  1114. #define __HAL_RCC_TIM7_IS_CLK_ENABLED()       ((RCC->APB1ENR & (RCC_APB1ENR_TIM7EN)) != RESET)
  1115. #define __HAL_RCC_TIM7_IS_CLK_DISABLED()      ((RCC->APB1ENR & (RCC_APB1ENR_TIM7EN)) == RESET)
  1116. #define __HAL_RCC_DAC_IS_CLK_ENABLED()       ((RCC->APB1ENR & (RCC_APB1ENR_DACEN)) != RESET)
  1117. #define __HAL_RCC_DAC_IS_CLK_DISABLED()      ((RCC->APB1ENR & (RCC_APB1ENR_DACEN)) == RESET)
  1118. #define __HAL_RCC_CEC_IS_CLK_ENABLED()       ((RCC->APB1ENR & (RCC_APB1ENR_CECEN)) != RESET)
  1119. #define __HAL_RCC_CEC_IS_CLK_DISABLED()      ((RCC->APB1ENR & (RCC_APB1ENR_CECEN)) == RESET)
  1120. #endif /* STM32F100xB || STM32F100xE */
  1121. #ifdef STM32F100xE
  1122. #define __HAL_RCC_TIM5_IS_CLK_ENABLED()       ((RCC->APB1ENR & (RCC_APB1ENR_TIM5EN)) != RESET)
  1123. #define __HAL_RCC_TIM5_IS_CLK_DISABLED()      ((RCC->APB1ENR & (RCC_APB1ENR_TIM5EN)) == RESET)
  1124. #define __HAL_RCC_TIM12_IS_CLK_ENABLED()       ((RCC->APB1ENR & (RCC_APB1ENR_TIM12EN)) != RESET)
  1125. #define __HAL_RCC_TIM12_IS_CLK_DISABLED()      ((RCC->APB1ENR & (RCC_APB1ENR_TIM12EN)) == RESET)
  1126. #define __HAL_RCC_TIM13_IS_CLK_ENABLED()       ((RCC->APB1ENR & (RCC_APB1ENR_TIM13EN)) != RESET)
  1127. #define __HAL_RCC_TIM13_IS_CLK_DISABLED()      ((RCC->APB1ENR & (RCC_APB1ENR_TIM13EN)) == RESET)
  1128. #define __HAL_RCC_TIM14_IS_CLK_ENABLED()       ((RCC->APB1ENR & (RCC_APB1ENR_TIM14EN)) != RESET)
  1129. #define __HAL_RCC_TIM14_IS_CLK_DISABLED()      ((RCC->APB1ENR & (RCC_APB1ENR_TIM14EN)) == RESET)
  1130. #define __HAL_RCC_SPI3_IS_CLK_ENABLED()       ((RCC->APB1ENR & (RCC_APB1ENR_SPI3EN)) != RESET)
  1131. #define __HAL_RCC_SPI3_IS_CLK_DISABLED()      ((RCC->APB1ENR & (RCC_APB1ENR_SPI3EN)) == RESET)
  1132. #define __HAL_RCC_UART4_IS_CLK_ENABLED()       ((RCC->APB1ENR & (RCC_APB1ENR_UART4EN)) != RESET)
  1133. #define __HAL_RCC_UART4_IS_CLK_DISABLED()      ((RCC->APB1ENR & (RCC_APB1ENR_UART4EN)) == RESET)
  1134. #define __HAL_RCC_UART5_IS_CLK_ENABLED()       ((RCC->APB1ENR & (RCC_APB1ENR_UART5EN)) != RESET)
  1135. #define __HAL_RCC_UART5_IS_CLK_DISABLED()      ((RCC->APB1ENR & (RCC_APB1ENR_UART5EN)) == RESET)
  1136. #define __HAL_RCC_CAN2_IS_CLK_ENABLED()       ((RCC->APB1ENR & (RCC_APB1ENR_CAN2EN)) != RESET)
  1137. #define __HAL_RCC_CAN2_IS_CLK_DISABLED()      ((RCC->APB1ENR & (RCC_APB1ENR_CAN2EN)) == RESET)
  1138. #endif /* STM32F100xE */
  1139. #if defined(STM32F105xC) || defined(STM32F107xC)
  1140. #define __HAL_RCC_TIM12_IS_CLK_ENABLED()       ((RCC->APB1ENR & (RCC_APB1ENR_TIM12EN)) != RESET)
  1141. #define __HAL_RCC_TIM12_IS_CLK_DISABLED()      ((RCC->APB1ENR & (RCC_APB1ENR_TIM12EN)) == RESET)
  1142. #endif /* STM32F105xC || STM32F107xC */
  1143. #if defined(STM32F101xG) || defined(STM32F103xG)
  1144. #define __HAL_RCC_TIM13_IS_CLK_ENABLED()       ((RCC->APB1ENR & (RCC_APB1ENR_TIM13EN)) != RESET)
  1145. #define __HAL_RCC_TIM13_IS_CLK_DISABLED()      ((RCC->APB1ENR & (RCC_APB1ENR_TIM13EN)) == RESET)
  1146. #define __HAL_RCC_TIM14_IS_CLK_ENABLED()       ((RCC->APB1ENR & (RCC_APB1ENR_TIM14EN)) != RESET)
  1147. #define __HAL_RCC_TIM14_IS_CLK_DISABLED()      ((RCC->APB1ENR & (RCC_APB1ENR_TIM14EN)) == RESET)
  1148. #endif /* STM32F101xG || STM32F103xG*/
  1149.  
  1150. /**
  1151.   * @}
  1152.   */
  1153.  
  1154. /** @defgroup RCCEx_APB2_Clock_Enable_Disable APB2 Clock Enable Disable
  1155.   * @brief  Enable or disable the High Speed APB (APB2) peripheral clock.
  1156.   * @note   After reset, the peripheral clock (used for registers read/write access)
  1157.   *         is disabled and the application software has to enable this clock before
  1158.   *         using it.
  1159.   * @{
  1160.   */
  1161.  
  1162. #if defined(STM32F101xG) || defined(STM32F103x6) || defined(STM32F103xB)\
  1163.  || defined(STM32F105xC) || defined(STM32F107xC) || defined(STM32F103xE)\
  1164.  || defined(STM32F103xG)
  1165. #define __HAL_RCC_ADC2_CLK_ENABLE()   do { \
  1166.                                         __IO uint32_t tmpreg; \
  1167.                                         SET_BIT(RCC->APB2ENR, RCC_APB2ENR_ADC2EN);\
  1168.                                         /* Delay after an RCC peripheral clock enabling */ \
  1169.                                         tmpreg = READ_BIT(RCC->APB2ENR, RCC_APB2ENR_ADC2EN);\
  1170.                                         UNUSED(tmpreg); \
  1171.                                       } while(0U)
  1172.  
  1173. #define __HAL_RCC_ADC2_CLK_DISABLE()        (RCC->APB2ENR &= ~(RCC_APB2ENR_ADC2EN))
  1174. #endif /* STM32F101xG || STM32F103x6 || STM32F103xB || STM32F105xC || STM32F107xC || STM32F103xE || STM32F103xG */
  1175.  
  1176. #if defined(STM32F100xB) || defined(STM32F100xE)
  1177. #define __HAL_RCC_TIM15_CLK_ENABLE()   do { \
  1178.                                         __IO uint32_t tmpreg; \
  1179.                                         SET_BIT(RCC->APB2ENR, RCC_APB2ENR_TIM15EN);\
  1180.                                         /* Delay after an RCC peripheral clock enabling */ \
  1181.                                         tmpreg = READ_BIT(RCC->APB2ENR, RCC_APB2ENR_TIM15EN);\
  1182.                                         UNUSED(tmpreg); \
  1183.                                       } while(0U)
  1184.  
  1185. #define __HAL_RCC_TIM16_CLK_ENABLE()   do { \
  1186.                                         __IO uint32_t tmpreg; \
  1187.                                         SET_BIT(RCC->APB2ENR, RCC_APB2ENR_TIM16EN);\
  1188.                                         /* Delay after an RCC peripheral clock enabling */ \
  1189.                                         tmpreg = READ_BIT(RCC->APB2ENR, RCC_APB2ENR_TIM16EN);\
  1190.                                         UNUSED(tmpreg); \
  1191.                                       } while(0U)
  1192.  
  1193. #define __HAL_RCC_TIM17_CLK_ENABLE()   do { \
  1194.                                         __IO uint32_t tmpreg; \
  1195.                                         SET_BIT(RCC->APB2ENR, RCC_APB2ENR_TIM17EN);\
  1196.                                         /* Delay after an RCC peripheral clock enabling */ \
  1197.                                         tmpreg = READ_BIT(RCC->APB2ENR, RCC_APB2ENR_TIM17EN);\
  1198.                                         UNUSED(tmpreg); \
  1199.                                       } while(0U)
  1200.  
  1201. #define __HAL_RCC_TIM15_CLK_DISABLE()       (RCC->APB2ENR &= ~(RCC_APB2ENR_TIM15EN))
  1202. #define __HAL_RCC_TIM16_CLK_DISABLE()       (RCC->APB2ENR &= ~(RCC_APB2ENR_TIM16EN))
  1203. #define __HAL_RCC_TIM17_CLK_DISABLE()       (RCC->APB2ENR &= ~(RCC_APB2ENR_TIM17EN))
  1204. #endif /* STM32F100xB || STM32F100xE */
  1205.  
  1206. #if defined(STM32F100xE) || defined(STM32F101xB) || defined(STM32F101xE)\
  1207.  || defined(STM32F101xG) || defined(STM32F100xB) || defined(STM32F103xB)\
  1208.  || defined(STM32F103xE) || defined(STM32F103xG) || defined(STM32F105xC)\
  1209.  || defined(STM32F107xC)
  1210. #define __HAL_RCC_GPIOE_CLK_ENABLE()   do { \
  1211.                                         __IO uint32_t tmpreg; \
  1212.                                         SET_BIT(RCC->APB2ENR, RCC_APB2ENR_IOPEEN);\
  1213.                                         /* Delay after an RCC peripheral clock enabling */ \
  1214.                                         tmpreg = READ_BIT(RCC->APB2ENR, RCC_APB2ENR_IOPEEN);\
  1215.                                         UNUSED(tmpreg); \
  1216.                                       } while(0U)
  1217.  
  1218. #define __HAL_RCC_GPIOE_CLK_DISABLE()       (RCC->APB2ENR &= ~(RCC_APB2ENR_IOPEEN))
  1219. #endif /* STM32F101x6 || STM32F101xB || STM32F101xE || (...) || STM32F105xC || STM32F107xC */
  1220.  
  1221. #if defined(STM32F101xE) || defined(STM32F103xE) || defined(STM32F101xG)\
  1222.  || defined(STM32F103xG)
  1223. #define __HAL_RCC_GPIOF_CLK_ENABLE()   do { \
  1224.                                         __IO uint32_t tmpreg; \
  1225.                                         SET_BIT(RCC->APB2ENR, RCC_APB2ENR_IOPFEN);\
  1226.                                         /* Delay after an RCC peripheral clock enabling */ \
  1227.                                         tmpreg = READ_BIT(RCC->APB2ENR, RCC_APB2ENR_IOPFEN);\
  1228.                                         UNUSED(tmpreg); \
  1229.                                       } while(0U)
  1230.  
  1231. #define __HAL_RCC_GPIOG_CLK_ENABLE()   do { \
  1232.                                         __IO uint32_t tmpreg; \
  1233.                                         SET_BIT(RCC->APB2ENR, RCC_APB2ENR_IOPGEN);\
  1234.                                         /* Delay after an RCC peripheral clock enabling */ \
  1235.                                         tmpreg = READ_BIT(RCC->APB2ENR, RCC_APB2ENR_IOPGEN);\
  1236.                                         UNUSED(tmpreg); \
  1237.                                       } while(0U)
  1238.  
  1239. #define __HAL_RCC_GPIOF_CLK_DISABLE()       (RCC->APB2ENR &= ~(RCC_APB2ENR_IOPFEN))
  1240. #define __HAL_RCC_GPIOG_CLK_DISABLE()       (RCC->APB2ENR &= ~(RCC_APB2ENR_IOPGEN))
  1241. #endif /* STM32F101xE || STM32F103xE || STM32F101xG || STM32F103xG*/
  1242.  
  1243. #if defined(STM32F103xE) || defined(STM32F103xG)
  1244. #define __HAL_RCC_TIM8_CLK_ENABLE()   do { \
  1245.                                         __IO uint32_t tmpreg; \
  1246.                                         SET_BIT(RCC->APB2ENR, RCC_APB2ENR_TIM8EN);\
  1247.                                         /* Delay after an RCC peripheral clock enabling */ \
  1248.                                         tmpreg = READ_BIT(RCC->APB2ENR, RCC_APB2ENR_TIM8EN);\
  1249.                                         UNUSED(tmpreg); \
  1250.                                       } while(0U)
  1251.  
  1252. #define __HAL_RCC_ADC3_CLK_ENABLE()   do { \
  1253.                                         __IO uint32_t tmpreg; \
  1254.                                         SET_BIT(RCC->APB2ENR, RCC_APB2ENR_ADC3EN);\
  1255.                                         /* Delay after an RCC peripheral clock enabling */ \
  1256.                                         tmpreg = READ_BIT(RCC->APB2ENR, RCC_APB2ENR_ADC3EN);\
  1257.                                         UNUSED(tmpreg); \
  1258.                                       } while(0U)
  1259.  
  1260. #define __HAL_RCC_TIM8_CLK_DISABLE()        (RCC->APB2ENR &= ~(RCC_APB2ENR_TIM8EN))
  1261. #define __HAL_RCC_ADC3_CLK_DISABLE()        (RCC->APB2ENR &= ~(RCC_APB2ENR_ADC3EN))
  1262. #endif /* STM32F103xE || STM32F103xG */
  1263.  
  1264. #if defined(STM32F100xE)
  1265. #define __HAL_RCC_GPIOF_CLK_ENABLE()   do { \
  1266.                                         __IO uint32_t tmpreg; \
  1267.                                         SET_BIT(RCC->APB2ENR, RCC_APB2ENR_IOPFEN);\
  1268.                                         /* Delay after an RCC peripheral clock enabling */ \
  1269.                                         tmpreg = READ_BIT(RCC->APB2ENR, RCC_APB2ENR_IOPFEN);\
  1270.                                         UNUSED(tmpreg); \
  1271.                                       } while(0U)
  1272.  
  1273. #define __HAL_RCC_GPIOG_CLK_ENABLE()   do { \
  1274.                                         __IO uint32_t tmpreg; \
  1275.                                         SET_BIT(RCC->APB2ENR, RCC_APB2ENR_IOPGEN);\
  1276.                                         /* Delay after an RCC peripheral clock enabling */ \
  1277.                                         tmpreg = READ_BIT(RCC->APB2ENR, RCC_APB2ENR_IOPGEN);\
  1278.                                         UNUSED(tmpreg); \
  1279.                                       } while(0U)
  1280.  
  1281. #define __HAL_RCC_GPIOF_CLK_DISABLE()       (RCC->APB2ENR &= ~(RCC_APB2ENR_IOPFEN))
  1282. #define __HAL_RCC_GPIOG_CLK_DISABLE()       (RCC->APB2ENR &= ~(RCC_APB2ENR_IOPGEN))
  1283. #endif /* STM32F100xE */
  1284.  
  1285. #if defined(STM32F101xG) || defined(STM32F103xG)
  1286. #define __HAL_RCC_TIM9_CLK_ENABLE()   do { \
  1287.                                         __IO uint32_t tmpreg; \
  1288.                                         SET_BIT(RCC->APB2ENR, RCC_APB2ENR_TIM9EN);\
  1289.                                         /* Delay after an RCC peripheral clock enabling */ \
  1290.                                         tmpreg = READ_BIT(RCC->APB2ENR, RCC_APB2ENR_TIM9EN);\
  1291.                                         UNUSED(tmpreg); \
  1292.                                       } while(0U)
  1293.  
  1294. #define __HAL_RCC_TIM10_CLK_ENABLE()   do { \
  1295.                                         __IO uint32_t tmpreg; \
  1296.                                         SET_BIT(RCC->APB2ENR, RCC_APB2ENR_TIM10EN);\
  1297.                                         /* Delay after an RCC peripheral clock enabling */ \
  1298.                                         tmpreg = READ_BIT(RCC->APB2ENR, RCC_APB2ENR_TIM10EN);\
  1299.                                         UNUSED(tmpreg); \
  1300.                                       } while(0U)
  1301.  
  1302. #define __HAL_RCC_TIM11_CLK_ENABLE()   do { \
  1303.                                         __IO uint32_t tmpreg; \
  1304.                                         SET_BIT(RCC->APB2ENR, RCC_APB2ENR_TIM11EN);\
  1305.                                         /* Delay after an RCC peripheral clock enabling */ \
  1306.                                         tmpreg = READ_BIT(RCC->APB2ENR, RCC_APB2ENR_TIM11EN);\
  1307.                                         UNUSED(tmpreg); \
  1308.                                       } while(0U)
  1309.  
  1310. #define __HAL_RCC_TIM9_CLK_DISABLE()        (RCC->APB2ENR &= ~(RCC_APB2ENR_TIM9EN))
  1311. #define __HAL_RCC_TIM10_CLK_DISABLE()       (RCC->APB2ENR &= ~(RCC_APB2ENR_TIM10EN))
  1312. #define __HAL_RCC_TIM11_CLK_DISABLE()       (RCC->APB2ENR &= ~(RCC_APB2ENR_TIM11EN))
  1313. #endif /* STM32F101xG || STM32F103xG */
  1314.  
  1315. /**
  1316.   * @}
  1317.   */
  1318.  
  1319. /** @defgroup RCCEx_APB2_Peripheral_Clock_Enable_Disable_Status APB2 Peripheral Clock Enable Disable Status
  1320.   * @brief  Get the enable or disable status of the APB2 peripheral clock.
  1321.   * @note   After reset, the peripheral clock (used for registers read/write access)
  1322.   *         is disabled and the application software has to enable this clock before
  1323.   *         using it.
  1324.   * @{
  1325.   */
  1326.  
  1327. #if defined(STM32F101xG) || defined(STM32F103x6) || defined(STM32F103xB)\
  1328.  || defined(STM32F105xC) || defined(STM32F107xC) || defined(STM32F103xE)\
  1329.  || defined(STM32F103xG)
  1330. #define __HAL_RCC_ADC2_IS_CLK_ENABLED()       ((RCC->APB2ENR & (RCC_APB2ENR_ADC2EN)) != RESET)
  1331. #define __HAL_RCC_ADC2_IS_CLK_DISABLED()      ((RCC->APB2ENR & (RCC_APB2ENR_ADC2EN)) == RESET)
  1332. #endif /* STM32F101xG || STM32F103x6 || STM32F103xB || STM32F105xC || STM32F107xC || STM32F103xE || STM32F103xG */
  1333. #if defined(STM32F100xB) || defined(STM32F100xE)
  1334. #define __HAL_RCC_TIM15_IS_CLK_ENABLED()       ((RCC->APB2ENR & (RCC_APB2ENR_TIM15EN)) != RESET)
  1335. #define __HAL_RCC_TIM15_IS_CLK_DISABLED()      ((RCC->APB2ENR & (RCC_APB2ENR_TIM15EN)) == RESET)
  1336. #define __HAL_RCC_TIM16_IS_CLK_ENABLED()       ((RCC->APB2ENR & (RCC_APB2ENR_TIM16EN)) != RESET)
  1337. #define __HAL_RCC_TIM16_IS_CLK_DISABLED()      ((RCC->APB2ENR & (RCC_APB2ENR_TIM16EN)) == RESET)
  1338. #define __HAL_RCC_TIM17_IS_CLK_ENABLED()       ((RCC->APB2ENR & (RCC_APB2ENR_TIM17EN)) != RESET)
  1339. #define __HAL_RCC_TIM17_IS_CLK_DISABLED()      ((RCC->APB2ENR & (RCC_APB2ENR_TIM17EN)) == RESET)
  1340. #endif /* STM32F100xB || STM32F100xE */
  1341. #if defined(STM32F100xE) || defined(STM32F101xB) || defined(STM32F101xE)\
  1342.  || defined(STM32F101xG) || defined(STM32F100xB) || defined(STM32F103xB)\
  1343.  || defined(STM32F103xE) || defined(STM32F103xG) || defined(STM32F105xC)\
  1344.  || defined(STM32F107xC)
  1345. #define __HAL_RCC_GPIOE_IS_CLK_ENABLED()       ((RCC->APB2ENR & (RCC_APB2ENR_IOPEEN)) != RESET)
  1346. #define __HAL_RCC_GPIOE_IS_CLK_DISABLED()      ((RCC->APB2ENR & (RCC_APB2ENR_IOPEEN)) == RESET)
  1347. #endif /* STM32F101x6 || STM32F101xB || STM32F101xE || (...) || STM32F105xC || STM32F107xC */
  1348. #if defined(STM32F101xE) || defined(STM32F103xE) || defined(STM32F101xG)\
  1349.  || defined(STM32F103xG)
  1350. #define __HAL_RCC_GPIOF_IS_CLK_ENABLED()       ((RCC->APB2ENR & (RCC_APB2ENR_IOPFEN)) != RESET)
  1351. #define __HAL_RCC_GPIOF_IS_CLK_DISABLED()      ((RCC->APB2ENR & (RCC_APB2ENR_IOPFEN)) == RESET)
  1352. #define __HAL_RCC_GPIOG_IS_CLK_ENABLED()       ((RCC->APB2ENR & (RCC_APB2ENR_IOPGEN)) != RESET)
  1353. #define __HAL_RCC_GPIOG_IS_CLK_DISABLED()      ((RCC->APB2ENR & (RCC_APB2ENR_IOPGEN)) == RESET)
  1354. #endif /* STM32F101xE || STM32F103xE || STM32F101xG || STM32F103xG*/
  1355. #if defined(STM32F103xE) || defined(STM32F103xG)
  1356. #define __HAL_RCC_TIM8_IS_CLK_ENABLED()       ((RCC->APB2ENR & (RCC_APB2ENR_TIM8EN)) != RESET)
  1357. #define __HAL_RCC_TIM8_IS_CLK_DISABLED()      ((RCC->APB2ENR & (RCC_APB2ENR_TIM8EN)) == RESET)
  1358. #define __HAL_RCC_ADC3_IS_CLK_ENABLED()       ((RCC->APB2ENR & (RCC_APB2ENR_ADC3EN)) != RESET)
  1359. #define __HAL_RCC_ADC3_IS_CLK_DISABLED()      ((RCC->APB2ENR & (RCC_APB2ENR_ADC3EN)) == RESET)
  1360. #endif /* STM32F103xE || STM32F103xG */
  1361. #if defined(STM32F100xE)
  1362. #define __HAL_RCC_GPIOF_IS_CLK_ENABLED()       ((RCC->APB2ENR & (RCC_APB2ENR_IOPFEN)) != RESET)
  1363. #define __HAL_RCC_GPIOF_IS_CLK_DISABLED()      ((RCC->APB2ENR & (RCC_APB2ENR_IOPFEN)) == RESET)
  1364. #define __HAL_RCC_GPIOG_IS_CLK_ENABLED()       ((RCC->APB2ENR & (RCC_APB2ENR_IOPGEN)) != RESET)
  1365. #define __HAL_RCC_GPIOG_IS_CLK_DISABLED()      ((RCC->APB2ENR & (RCC_APB2ENR_IOPGEN)) == RESET)
  1366. #endif /* STM32F100xE */
  1367. #if defined(STM32F101xG) || defined(STM32F103xG)
  1368. #define __HAL_RCC_TIM9_IS_CLK_ENABLED()       ((RCC->APB2ENR & (RCC_APB2ENR_TIM9EN)) != RESET)
  1369. #define __HAL_RCC_TIM9_IS_CLK_DISABLED()      ((RCC->APB2ENR & (RCC_APB2ENR_TIM9EN)) == RESET)
  1370. #define __HAL_RCC_TIM10_IS_CLK_ENABLED()       ((RCC->APB2ENR & (RCC_APB2ENR_TIM10EN)) != RESET)
  1371. #define __HAL_RCC_TIM10_IS_CLK_DISABLED()      ((RCC->APB2ENR & (RCC_APB2ENR_TIM10EN)) == RESET)
  1372. #define __HAL_RCC_TIM11_IS_CLK_ENABLED()       ((RCC->APB2ENR & (RCC_APB2ENR_TIM11EN)) != RESET)
  1373. #define __HAL_RCC_TIM11_IS_CLK_DISABLED()      ((RCC->APB2ENR & (RCC_APB2ENR_TIM11EN)) == RESET)
  1374. #endif /* STM32F101xG || STM32F103xG */
  1375.  
  1376. /**
  1377.   * @}
  1378.   */
  1379.  
  1380. #if defined(STM32F105xC) || defined(STM32F107xC)
  1381. /** @defgroup RCCEx_Peripheral_Clock_Force_Release Peripheral Clock Force Release
  1382.   * @brief  Force or release AHB peripheral reset.
  1383.   * @{
  1384.   */
  1385. #define __HAL_RCC_AHB_FORCE_RESET()         (RCC->AHBRSTR = 0xFFFFFFFFU)
  1386. #define __HAL_RCC_USB_OTG_FS_FORCE_RESET()       (RCC->AHBRSTR |= (RCC_AHBRSTR_OTGFSRST))
  1387. #if defined(STM32F107xC)
  1388. #define __HAL_RCC_ETHMAC_FORCE_RESET()      (RCC->AHBRSTR |= (RCC_AHBRSTR_ETHMACRST))
  1389. #endif /* STM32F107xC */
  1390.  
  1391. #define __HAL_RCC_AHB_RELEASE_RESET()       (RCC->AHBRSTR = 0x00)
  1392. #define __HAL_RCC_USB_OTG_FS_RELEASE_RESET()     (RCC->AHBRSTR &= ~(RCC_AHBRSTR_OTGFSRST))
  1393. #if defined(STM32F107xC)
  1394. #define __HAL_RCC_ETHMAC_RELEASE_RESET()    (RCC->AHBRSTR &= ~(RCC_AHBRSTR_ETHMACRST))
  1395. #endif /* STM32F107xC */
  1396.  
  1397. /**
  1398.   * @}
  1399.   */
  1400. #endif /* STM32F105xC || STM32F107xC */
  1401.  
  1402. /** @defgroup RCCEx_APB1_Force_Release_Reset APB1 Force Release Reset
  1403.   * @brief  Force or release APB1 peripheral reset.
  1404.   * @{
  1405.   */
  1406.  
  1407. #if defined(STM32F103x6) || defined(STM32F103xB) || defined(STM32F103xE)\
  1408.  || defined(STM32F103xG) || defined(STM32F105xC) ||defined(STM32F107xC)
  1409. #define __HAL_RCC_CAN1_FORCE_RESET()        (RCC->APB1RSTR |= (RCC_APB1RSTR_CAN1RST))
  1410.  
  1411. #define __HAL_RCC_CAN1_RELEASE_RESET()      (RCC->APB1RSTR &= ~(RCC_APB1RSTR_CAN1RST))
  1412. #endif /* STM32F103x6 || STM32F103xB || STM32F103xE || STM32F103xG || STM32F105xC || STM32F107xC */
  1413.  
  1414. #if defined(STM32F100xB) || defined(STM32F100xE) || defined(STM32F101xB)\
  1415.  || defined(STM32F101xE) || defined(STM32F101xG) || defined(STM32F102xB)\
  1416.  || defined(STM32F103xB) || defined(STM32F103xE) || defined(STM32F103xG)\
  1417.  || defined(STM32F105xC) || defined(STM32F107xC)
  1418. #define __HAL_RCC_TIM4_FORCE_RESET()        (RCC->APB1RSTR |= (RCC_APB1RSTR_TIM4RST))
  1419. #define __HAL_RCC_SPI2_FORCE_RESET()        (RCC->APB1RSTR |= (RCC_APB1RSTR_SPI2RST))
  1420. #define __HAL_RCC_USART3_FORCE_RESET()      (RCC->APB1RSTR |= (RCC_APB1RSTR_USART3RST))
  1421. #define __HAL_RCC_I2C2_FORCE_RESET()        (RCC->APB1RSTR |= (RCC_APB1RSTR_I2C2RST))
  1422.  
  1423. #define __HAL_RCC_TIM4_RELEASE_RESET()      (RCC->APB1RSTR &= ~(RCC_APB1RSTR_TIM4RST))
  1424. #define __HAL_RCC_SPI2_RELEASE_RESET()      (RCC->APB1RSTR &= ~(RCC_APB1RSTR_SPI2RST))
  1425. #define __HAL_RCC_USART3_RELEASE_RESET()    (RCC->APB1RSTR &= ~(RCC_APB1RSTR_USART3RST))
  1426. #define __HAL_RCC_I2C2_RELEASE_RESET()      (RCC->APB1RSTR &= ~(RCC_APB1RSTR_I2C2RST))
  1427. #endif /* STM32F100xB || STM32F101xB || STM32F101xE || (...) || STM32F105xC || STM32F107xC */
  1428.  
  1429. #if defined(STM32F102x6) || defined(STM32F102xB) || defined(STM32F103x6)\
  1430.  || defined(STM32F103xB) || defined(STM32F103xE) || defined(STM32F103xG)
  1431. #define __HAL_RCC_USB_FORCE_RESET()         (RCC->APB1RSTR |= (RCC_APB1RSTR_USBRST))
  1432. #define __HAL_RCC_USB_RELEASE_RESET()       (RCC->APB1RSTR &= ~(RCC_APB1RSTR_USBRST))
  1433. #endif /* STM32F102x6 || STM32F102xB || STM32F103x6 || STM32F103xB || STM32F103xE || STM32F103xG */
  1434.  
  1435. #if defined(STM32F101xE) || defined(STM32F103xE) || defined(STM32F101xG)\
  1436.  || defined(STM32F103xG) || defined(STM32F105xC) || defined(STM32F107xC)
  1437. #define __HAL_RCC_TIM5_FORCE_RESET()        (RCC->APB1RSTR |= (RCC_APB1RSTR_TIM5RST))
  1438. #define __HAL_RCC_TIM6_FORCE_RESET()        (RCC->APB1RSTR |= (RCC_APB1RSTR_TIM6RST))
  1439. #define __HAL_RCC_TIM7_FORCE_RESET()        (RCC->APB1RSTR |= (RCC_APB1RSTR_TIM7RST))
  1440. #define __HAL_RCC_SPI3_FORCE_RESET()        (RCC->APB1RSTR |= (RCC_APB1RSTR_SPI3RST))
  1441. #define __HAL_RCC_UART4_FORCE_RESET()       (RCC->APB1RSTR |= (RCC_APB1RSTR_UART4RST))
  1442. #define __HAL_RCC_UART5_FORCE_RESET()       (RCC->APB1RSTR |= (RCC_APB1RSTR_UART5RST))
  1443. #define __HAL_RCC_DAC_FORCE_RESET()         (RCC->APB1RSTR |= (RCC_APB1RSTR_DACRST))
  1444.  
  1445. #define __HAL_RCC_TIM5_RELEASE_RESET()      (RCC->APB1RSTR &= ~(RCC_APB1RSTR_TIM5RST))
  1446. #define __HAL_RCC_TIM6_RELEASE_RESET()      (RCC->APB1RSTR &= ~(RCC_APB1RSTR_TIM6RST))
  1447. #define __HAL_RCC_TIM7_RELEASE_RESET()      (RCC->APB1RSTR &= ~(RCC_APB1RSTR_TIM7RST))
  1448. #define __HAL_RCC_SPI3_RELEASE_RESET()      (RCC->APB1RSTR &= ~(RCC_APB1RSTR_SPI3RST))
  1449. #define __HAL_RCC_UART4_RELEASE_RESET()     (RCC->APB1RSTR &= ~(RCC_APB1RSTR_UART4RST))
  1450. #define __HAL_RCC_UART5_RELEASE_RESET()     (RCC->APB1RSTR &= ~(RCC_APB1RSTR_UART5RST))
  1451. #define __HAL_RCC_DAC_RELEASE_RESET()       (RCC->APB1RSTR &= ~(RCC_APB1RSTR_DACRST))
  1452. #endif /* STM32F101xE || STM32F103xE || STM32F101xG || (...) || STM32F105xC || STM32F107xC */
  1453.  
  1454. #if defined(STM32F100xB) || defined  (STM32F100xE)
  1455. #define __HAL_RCC_TIM6_FORCE_RESET()        (RCC->APB1RSTR |= (RCC_APB1RSTR_TIM6RST))
  1456. #define __HAL_RCC_TIM7_FORCE_RESET()        (RCC->APB1RSTR |= (RCC_APB1RSTR_TIM7RST))
  1457. #define __HAL_RCC_DAC_FORCE_RESET()         (RCC->APB1RSTR |= (RCC_APB1RSTR_DACRST))
  1458. #define __HAL_RCC_CEC_FORCE_RESET()         (RCC->APB1RSTR |= (RCC_APB1RSTR_CECRST))
  1459.  
  1460. #define __HAL_RCC_TIM6_RELEASE_RESET()      (RCC->APB1RSTR &= ~(RCC_APB1RSTR_TIM6RST))
  1461. #define __HAL_RCC_TIM7_RELEASE_RESET()      (RCC->APB1RSTR &= ~(RCC_APB1RSTR_TIM7RST))
  1462. #define __HAL_RCC_DAC_RELEASE_RESET()       (RCC->APB1RSTR &= ~(RCC_APB1RSTR_DACRST))
  1463. #define __HAL_RCC_CEC_RELEASE_RESET()       (RCC->APB1RSTR &= ~(RCC_APB1RSTR_CECRST))
  1464. #endif /* STM32F100xB || STM32F100xE */
  1465.  
  1466. #if defined  (STM32F100xE)
  1467. #define __HAL_RCC_TIM5_FORCE_RESET()        (RCC->APB1RSTR |= (RCC_APB1RSTR_TIM5RST))
  1468. #define __HAL_RCC_TIM12_FORCE_RESET()       (RCC->APB1RSTR |= (RCC_APB1RSTR_TIM12RST))
  1469. #define __HAL_RCC_TIM13_FORCE_RESET()       (RCC->APB1RSTR |= (RCC_APB1RSTR_TIM13RST))
  1470. #define __HAL_RCC_TIM14_FORCE_RESET()       (RCC->APB1RSTR |= (RCC_APB1RSTR_TIM14RST))
  1471. #define __HAL_RCC_SPI3_FORCE_RESET()        (RCC->APB1RSTR |= (RCC_APB1RSTR_SPI3RST))
  1472. #define __HAL_RCC_UART4_FORCE_RESET()       (RCC->APB1RSTR |= (RCC_APB1RSTR_UART4RST))
  1473. #define __HAL_RCC_UART5_FORCE_RESET()       (RCC->APB1RSTR |= (RCC_APB1RSTR_UART5RST))
  1474.  
  1475. #define __HAL_RCC_TIM5_RELEASE_RESET()      (RCC->APB1RSTR &= ~(RCC_APB1RSTR_TIM5RST))
  1476. #define __HAL_RCC_TIM12_RELEASE_RESET()     (RCC->APB1RSTR &= ~(RCC_APB1RSTR_TIM12RST))
  1477. #define __HAL_RCC_TIM13_RELEASE_RESET()     (RCC->APB1RSTR &= ~(RCC_APB1RSTR_TIM13RST))
  1478. #define __HAL_RCC_TIM14_RELEASE_RESET()     (RCC->APB1RSTR &= ~(RCC_APB1RSTR_TIM14RST))
  1479. #define __HAL_RCC_SPI3_RELEASE_RESET()      (RCC->APB1RSTR &= ~(RCC_APB1RSTR_SPI3RST))
  1480. #define __HAL_RCC_UART4_RELEASE_RESET()     (RCC->APB1RSTR &= ~(RCC_APB1RSTR_UART4RST))
  1481. #define __HAL_RCC_UART5_RELEASE_RESET()     (RCC->APB1RSTR &= ~(RCC_APB1RSTR_UART5RST))
  1482. #endif /* STM32F100xE */
  1483.  
  1484. #if defined(STM32F105xC) || defined(STM32F107xC)
  1485. #define __HAL_RCC_CAN2_FORCE_RESET()        (RCC->APB1RSTR |= (RCC_APB1RSTR_CAN2RST))
  1486.  
  1487. #define __HAL_RCC_CAN2_RELEASE_RESET()      (RCC->APB1RSTR &= ~(RCC_APB1RSTR_CAN2RST))
  1488. #endif /* STM32F105xC || STM32F107xC */
  1489.  
  1490. #if defined(STM32F101xG) || defined(STM32F103xG)
  1491. #define __HAL_RCC_TIM12_FORCE_RESET()       (RCC->APB1RSTR |= (RCC_APB1RSTR_TIM12RST))
  1492. #define __HAL_RCC_TIM13_FORCE_RESET()       (RCC->APB1RSTR |= (RCC_APB1RSTR_TIM13RST))
  1493. #define __HAL_RCC_TIM14_FORCE_RESET()       (RCC->APB1RSTR |= (RCC_APB1RSTR_TIM14RST))
  1494.  
  1495. #define __HAL_RCC_TIM12_RELEASE_RESET()     (RCC->APB1RSTR &= ~(RCC_APB1RSTR_TIM12RST))
  1496. #define __HAL_RCC_TIM13_RELEASE_RESET()     (RCC->APB1RSTR &= ~(RCC_APB1RSTR_TIM13RST))
  1497. #define __HAL_RCC_TIM14_RELEASE_RESET()     (RCC->APB1RSTR &= ~(RCC_APB1RSTR_TIM14RST))
  1498. #endif /* STM32F101xG || STM32F103xG */
  1499.  
  1500. /**
  1501.   * @}
  1502.   */
  1503.  
  1504. /** @defgroup RCCEx_APB2_Force_Release_Reset APB2 Force Release Reset
  1505.   * @brief  Force or release APB2 peripheral reset.
  1506.   * @{
  1507.   */
  1508.  
  1509. #if defined(STM32F101xG) || defined(STM32F103x6) || defined(STM32F103xB)\
  1510.  || defined(STM32F105xC) || defined(STM32F107xC) || defined(STM32F103xE)\
  1511.  || defined(STM32F103xG)
  1512. #define __HAL_RCC_ADC2_FORCE_RESET()        (RCC->APB2RSTR |= (RCC_APB2RSTR_ADC2RST))
  1513.  
  1514. #define __HAL_RCC_ADC2_RELEASE_RESET()      (RCC->APB2RSTR &= ~(RCC_APB2RSTR_ADC2RST))
  1515. #endif /* STM32F101xG || STM32F103x6 || STM32F103xB || STM32F105xC || STM32F107xC || STM32F103xE || STM32F103xG */
  1516.  
  1517. #if defined(STM32F100xB) || defined(STM32F100xE)
  1518. #define __HAL_RCC_TIM15_FORCE_RESET()       (RCC->APB2RSTR |= (RCC_APB2RSTR_TIM15RST))
  1519. #define __HAL_RCC_TIM16_FORCE_RESET()       (RCC->APB2RSTR |= (RCC_APB2RSTR_TIM16RST))
  1520. #define __HAL_RCC_TIM17_FORCE_RESET()       (RCC->APB2RSTR |= (RCC_APB2RSTR_TIM17RST))
  1521.  
  1522. #define __HAL_RCC_TIM15_RELEASE_RESET()     (RCC->APB2RSTR &= ~(RCC_APB2RSTR_TIM15RST))
  1523. #define __HAL_RCC_TIM16_RELEASE_RESET()     (RCC->APB2RSTR &= ~(RCC_APB2RSTR_TIM16RST))
  1524. #define __HAL_RCC_TIM17_RELEASE_RESET()     (RCC->APB2RSTR &= ~(RCC_APB2RSTR_TIM17RST))
  1525. #endif /* STM32F100xB || STM32F100xE */
  1526.  
  1527. #if defined(STM32F100xE) || defined(STM32F101xB) || defined(STM32F101xE)\
  1528.  || defined(STM32F101xG) || defined(STM32F100xB) || defined(STM32F103xB)\
  1529.  || defined(STM32F103xE) || defined(STM32F103xG) || defined(STM32F105xC)\
  1530.  || defined(STM32F107xC)
  1531. #define __HAL_RCC_GPIOE_FORCE_RESET()       (RCC->APB2RSTR |= (RCC_APB2RSTR_IOPERST))
  1532.  
  1533. #define __HAL_RCC_GPIOE_RELEASE_RESET()     (RCC->APB2RSTR &= ~(RCC_APB2RSTR_IOPERST))
  1534. #endif /* STM32F101x6 || STM32F101xB || STM32F101xE || (...) || STM32F105xC || STM32F107xC */
  1535.  
  1536. #if defined(STM32F101xE) || defined(STM32F103xE) || defined(STM32F101xG)\
  1537.  || defined(STM32F103xG)
  1538. #define __HAL_RCC_GPIOF_FORCE_RESET()       (RCC->APB2RSTR |= (RCC_APB2RSTR_IOPFRST))
  1539. #define __HAL_RCC_GPIOG_FORCE_RESET()       (RCC->APB2RSTR |= (RCC_APB2RSTR_IOPGRST))
  1540.  
  1541. #define __HAL_RCC_GPIOF_RELEASE_RESET()     (RCC->APB2RSTR &= ~(RCC_APB2RSTR_IOPFRST))
  1542. #define __HAL_RCC_GPIOG_RELEASE_RESET()     (RCC->APB2RSTR &= ~(RCC_APB2RSTR_IOPGRST))
  1543. #endif /* STM32F101xE || STM32F103xE || STM32F101xG || STM32F103xG*/
  1544.  
  1545. #if defined(STM32F103xE) || defined(STM32F103xG)
  1546. #define __HAL_RCC_TIM8_FORCE_RESET()        (RCC->APB2RSTR |= (RCC_APB2RSTR_TIM8RST))
  1547. #define __HAL_RCC_ADC3_FORCE_RESET()        (RCC->APB2RSTR |= (RCC_APB2RSTR_ADC3RST))
  1548.  
  1549. #define __HAL_RCC_TIM8_RELEASE_RESET()      (RCC->APB2RSTR &= ~(RCC_APB2RSTR_TIM8RST))
  1550. #define __HAL_RCC_ADC3_RELEASE_RESET()      (RCC->APB2RSTR &= ~(RCC_APB2RSTR_ADC3RST))
  1551. #endif /* STM32F103xE || STM32F103xG */
  1552.  
  1553. #if defined(STM32F100xE)
  1554. #define __HAL_RCC_GPIOF_FORCE_RESET()       (RCC->APB2RSTR |= (RCC_APB2RSTR_IOPFRST))
  1555. #define __HAL_RCC_GPIOG_FORCE_RESET()       (RCC->APB2RSTR |= (RCC_APB2RSTR_IOPGRST))
  1556.  
  1557. #define __HAL_RCC_GPIOF_RELEASE_RESET()     (RCC->APB2RSTR &= ~(RCC_APB2RSTR_IOPFRST))
  1558. #define __HAL_RCC_GPIOG_RELEASE_RESET()     (RCC->APB2RSTR &= ~(RCC_APB2RSTR_IOPGRST))
  1559. #endif /* STM32F100xE */
  1560.  
  1561. #if defined(STM32F101xG) || defined(STM32F103xG)
  1562. #define __HAL_RCC_TIM9_FORCE_RESET()        (RCC->APB2RSTR |= (RCC_APB2RSTR_TIM9RST))
  1563. #define __HAL_RCC_TIM10_FORCE_RESET()       (RCC->APB2RSTR |= (RCC_APB2RSTR_TIM10RST))
  1564. #define __HAL_RCC_TIM11_FORCE_RESET()       (RCC->APB2RSTR |= (RCC_APB2RSTR_TIM11RST))
  1565.  
  1566. #define __HAL_RCC_TIM9_RELEASE_RESET()      (RCC->APB2RSTR &= ~(RCC_APB2RSTR_TIM9RST))
  1567. #define __HAL_RCC_TIM10_RELEASE_RESET()     (RCC->APB2RSTR &= ~(RCC_APB2RSTR_TIM10RST))
  1568. #define __HAL_RCC_TIM11_RELEASE_RESET()     (RCC->APB2RSTR &= ~(RCC_APB2RSTR_TIM11RST))
  1569. #endif /* STM32F101xG || STM32F103xG*/
  1570.  
  1571. /**
  1572.   * @}
  1573.   */
  1574.  
  1575. /** @defgroup RCCEx_HSE_Configuration HSE Configuration
  1576.   * @{
  1577.   */
  1578.  
  1579. #if defined(STM32F105xC) || defined(STM32F107xC) || defined(STM32F100xB)\
  1580.  || defined(STM32F100xE)
  1581. /**
  1582.   * @brief  Macro to configure the External High Speed oscillator (HSE) Predivision factor for PLL.
  1583.   * @note   Predivision factor can not be changed if PLL is used as system clock
  1584.   *         In this case, you have to select another source of the system clock, disable the PLL and
  1585.   *         then change the HSE predivision factor.
  1586.   * @param  __HSE_PREDIV_VALUE__ specifies the division value applied to HSE.
  1587.   *         This parameter must be a number between RCC_HSE_PREDIV_DIV1 and RCC_HSE_PREDIV_DIV16.
  1588.   */
  1589. #define __HAL_RCC_HSE_PREDIV_CONFIG(__HSE_PREDIV_VALUE__) MODIFY_REG(RCC->CFGR2, RCC_CFGR2_PREDIV1, (uint32_t)(__HSE_PREDIV_VALUE__))
  1590. #else
  1591. /**
  1592.   * @brief  Macro to configure the External High Speed oscillator (HSE) Predivision factor for PLL.
  1593.   * @note   Predivision factor can not be changed if PLL is used as system clock
  1594.   *         In this case, you have to select another source of the system clock, disable the PLL and
  1595.   *         then change the HSE predivision factor.
  1596.   * @param  __HSE_PREDIV_VALUE__ specifies the division value applied to HSE.
  1597.   *         This parameter must be a number between RCC_HSE_PREDIV_DIV1 and RCC_HSE_PREDIV_DIV2.
  1598.   */
  1599. #define __HAL_RCC_HSE_PREDIV_CONFIG(__HSE_PREDIV_VALUE__) \
  1600.                   MODIFY_REG(RCC->CFGR,RCC_CFGR_PLLXTPRE, (uint32_t)(__HSE_PREDIV_VALUE__))
  1601.  
  1602. #endif /* STM32F105xC || STM32F107xC */
  1603.  
  1604. #if defined(STM32F105xC) || defined(STM32F107xC) || defined(STM32F100xB)\
  1605.  || defined(STM32F100xE)
  1606. /**
  1607.   * @brief  Macro to get prediv1 factor for PLL.
  1608.   */
  1609. #define __HAL_RCC_HSE_GET_PREDIV() READ_BIT(RCC->CFGR2, RCC_CFGR2_PREDIV1)
  1610.  
  1611. #else
  1612. /**
  1613.   * @brief  Macro to get prediv1 factor for PLL.
  1614.   */
  1615. #define __HAL_RCC_HSE_GET_PREDIV() READ_BIT(RCC->CFGR, RCC_CFGR_PLLXTPRE)
  1616.  
  1617. #endif /* STM32F105xC || STM32F107xC || STM32F100xB || STM32F100xE */
  1618.  
  1619. /**
  1620.   * @}
  1621.   */
  1622.  
  1623. #if defined(STM32F105xC) || defined(STM32F107xC)
  1624. /** @defgroup RCCEx_PLLI2S_Configuration PLLI2S Configuration
  1625.   * @{
  1626.   */
  1627.  
  1628. /** @brief Macros to enable the main PLLI2S.
  1629.   * @note   After enabling the main PLLI2S, the application software should wait on
  1630.   *         PLLI2SRDY flag to be set indicating that PLLI2S clock is stable and can
  1631.   *         be used as system clock source.
  1632.   * @note   The main PLLI2S is disabled by hardware when entering STOP and STANDBY modes.
  1633.   */
  1634. #define __HAL_RCC_PLLI2S_ENABLE()          (*(__IO uint32_t *) RCC_CR_PLLI2SON_BB = ENABLE)
  1635.  
  1636. /** @brief Macros to disable the main PLLI2S.
  1637.   * @note   The main PLLI2S is disabled by hardware when entering STOP and STANDBY modes.
  1638.   */
  1639. #define __HAL_RCC_PLLI2S_DISABLE()         (*(__IO uint32_t *) RCC_CR_PLLI2SON_BB = DISABLE)
  1640.  
  1641. /** @brief macros to configure the main PLLI2S multiplication factor.
  1642.   * @note   This function must be used only when the main PLLI2S is disabled.
  1643.   *
  1644.   * @param  __PLLI2SMUL__ specifies the multiplication factor for PLLI2S VCO output clock
  1645.   *          This parameter can be one of the following values:
  1646.   *             @arg @ref RCC_PLLI2S_MUL8 PLLI2SVCO = PLLI2S clock entry x 8
  1647.   *             @arg @ref RCC_PLLI2S_MUL9 PLLI2SVCO = PLLI2S clock entry x 9
  1648.   *             @arg @ref RCC_PLLI2S_MUL10 PLLI2SVCO = PLLI2S clock entry x 10
  1649.   *             @arg @ref RCC_PLLI2S_MUL11 PLLI2SVCO = PLLI2S clock entry x 11
  1650.   *             @arg @ref RCC_PLLI2S_MUL12 PLLI2SVCO = PLLI2S clock entry x 12
  1651.   *             @arg @ref RCC_PLLI2S_MUL13 PLLI2SVCO = PLLI2S clock entry x 13
  1652.   *             @arg @ref RCC_PLLI2S_MUL14 PLLI2SVCO = PLLI2S clock entry x 14
  1653.   *             @arg @ref RCC_PLLI2S_MUL16 PLLI2SVCO = PLLI2S clock entry x 16
  1654.   *             @arg @ref RCC_PLLI2S_MUL20 PLLI2SVCO = PLLI2S clock entry x 20
  1655.   *
  1656.   */
  1657. #define __HAL_RCC_PLLI2S_CONFIG(__PLLI2SMUL__)\
  1658.           MODIFY_REG(RCC->CFGR2, RCC_CFGR2_PLL3MUL,(__PLLI2SMUL__))
  1659.  
  1660. /**
  1661.   * @}
  1662.   */
  1663.  
  1664. #endif /* STM32F105xC || STM32F107xC */
  1665.  
  1666. /** @defgroup RCCEx_Peripheral_Configuration Peripheral Configuration
  1667.   * @brief  Macros to configure clock source of different peripherals.
  1668.   * @{
  1669.   */
  1670.  
  1671. #if defined(STM32F102x6) || defined(STM32F102xB) || defined(STM32F103x6)\
  1672.  || defined(STM32F103xB) || defined(STM32F103xE) || defined(STM32F103xG)
  1673. /** @brief  Macro to configure the USB clock.
  1674.   * @param  __USBCLKSOURCE__ specifies the USB clock source.
  1675.   *          This parameter can be one of the following values:
  1676.   *            @arg @ref RCC_USBCLKSOURCE_PLL PLL clock divided by 1 selected as USB clock
  1677.   *            @arg @ref RCC_USBCLKSOURCE_PLL_DIV1_5 PLL clock divided by 1.5 selected as USB clock
  1678.   */
  1679. #define __HAL_RCC_USB_CONFIG(__USBCLKSOURCE__) \
  1680.                   MODIFY_REG(RCC->CFGR, RCC_CFGR_USBPRE, (uint32_t)(__USBCLKSOURCE__))
  1681.  
  1682. /** @brief  Macro to get the USB clock (USBCLK).
  1683.   * @retval The clock source can be one of the following values:
  1684.   *            @arg @ref RCC_USBCLKSOURCE_PLL PLL clock divided by 1 selected as USB clock
  1685.   *            @arg @ref RCC_USBCLKSOURCE_PLL_DIV1_5 PLL clock divided by 1.5 selected as USB clock
  1686.   */
  1687. #define __HAL_RCC_GET_USB_SOURCE() ((uint32_t)(READ_BIT(RCC->CFGR, RCC_CFGR_USBPRE)))
  1688.  
  1689. #endif /* STM32F102x6 || STM32F102xB || STM32F103x6 || STM32F103xB || STM32F103xE || STM32F103xG */
  1690.  
  1691. #if defined(STM32F105xC) || defined(STM32F107xC)
  1692.  
  1693. /** @brief  Macro to configure the USB OTSclock.
  1694.   * @param  __USBCLKSOURCE__ specifies the USB clock source.
  1695.   *          This parameter can be one of the following values:
  1696.   *            @arg @ref RCC_USBCLKSOURCE_PLL_DIV2 PLL clock divided by 2 selected as USB OTG FS clock
  1697.   *            @arg @ref RCC_USBCLKSOURCE_PLL_DIV3 PLL clock divided by 3 selected as USB OTG FS clock
  1698.   */
  1699. #define __HAL_RCC_USB_CONFIG(__USBCLKSOURCE__) \
  1700.                   MODIFY_REG(RCC->CFGR, RCC_CFGR_OTGFSPRE, (uint32_t)(__USBCLKSOURCE__))
  1701.  
  1702. /** @brief  Macro to get the USB clock (USBCLK).
  1703.   * @retval The clock source can be one of the following values:
  1704.   *            @arg @ref RCC_USBCLKSOURCE_PLL_DIV2 PLL clock divided by 2 selected as USB OTG FS clock
  1705.   *            @arg @ref RCC_USBCLKSOURCE_PLL_DIV3 PLL clock divided by 3 selected as USB OTG FS clock
  1706.   */
  1707. #define __HAL_RCC_GET_USB_SOURCE() ((uint32_t)(READ_BIT(RCC->CFGR, RCC_CFGR_OTGFSPRE)))
  1708.  
  1709. #endif /* STM32F105xC || STM32F107xC */
  1710.  
  1711. /** @brief  Macro to configure the ADCx clock (x=1 to 3 depending on devices).
  1712.   * @param  __ADCCLKSOURCE__ specifies the ADC clock source.
  1713.   *          This parameter can be one of the following values:
  1714.   *            @arg @ref RCC_ADCPCLK2_DIV2 PCLK2 clock divided by 2 selected as ADC clock
  1715.   *            @arg @ref RCC_ADCPCLK2_DIV4 PCLK2 clock divided by 4 selected as ADC clock
  1716.   *            @arg @ref RCC_ADCPCLK2_DIV6 PCLK2 clock divided by 6 selected as ADC clock
  1717.   *            @arg @ref RCC_ADCPCLK2_DIV8 PCLK2 clock divided by 8 selected as ADC clock
  1718.   */
  1719. #define __HAL_RCC_ADC_CONFIG(__ADCCLKSOURCE__) \
  1720.                   MODIFY_REG(RCC->CFGR, RCC_CFGR_ADCPRE, (uint32_t)(__ADCCLKSOURCE__))
  1721.  
  1722. /** @brief  Macro to get the ADC clock (ADCxCLK, x=1 to 3 depending on devices).
  1723.   * @retval The clock source can be one of the following values:
  1724.   *            @arg @ref RCC_ADCPCLK2_DIV2 PCLK2 clock divided by 2 selected as ADC clock
  1725.   *            @arg @ref RCC_ADCPCLK2_DIV4 PCLK2 clock divided by 4 selected as ADC clock
  1726.   *            @arg @ref RCC_ADCPCLK2_DIV6 PCLK2 clock divided by 6 selected as ADC clock
  1727.   *            @arg @ref RCC_ADCPCLK2_DIV8 PCLK2 clock divided by 8 selected as ADC clock
  1728.   */
  1729. #define __HAL_RCC_GET_ADC_SOURCE() ((uint32_t)(READ_BIT(RCC->CFGR, RCC_CFGR_ADCPRE)))
  1730.  
  1731. /**
  1732.   * @}
  1733.   */
  1734.  
  1735. #if defined(STM32F105xC) || defined(STM32F107xC)
  1736.  
  1737. /** @addtogroup RCCEx_HSE_Configuration
  1738.   * @{
  1739.   */
  1740.  
  1741. /**
  1742.   * @brief  Macro to configure the PLL2 & PLLI2S Predivision factor.
  1743.   * @note   Predivision factor can not be changed if PLL2 is used indirectly as system clock
  1744.   *         In this case, you have to select another source of the system clock, disable the PLL2 and PLLI2S and
  1745.   *         then change the PREDIV2 factor.
  1746.   * @param  __HSE_PREDIV2_VALUE__ specifies the PREDIV2 value applied to PLL2 & PLLI2S.
  1747.   *         This parameter must be a number between RCC_HSE_PREDIV2_DIV1 and RCC_HSE_PREDIV2_DIV16.
  1748.   */
  1749. #define __HAL_RCC_HSE_PREDIV2_CONFIG(__HSE_PREDIV2_VALUE__) \
  1750.                   MODIFY_REG(RCC->CFGR2, RCC_CFGR2_PREDIV2, (uint32_t)(__HSE_PREDIV2_VALUE__))
  1751.  
  1752. /**
  1753.   * @brief  Macro to get prediv2 factor for PLL2 & PLL3.
  1754.   */
  1755. #define __HAL_RCC_HSE_GET_PREDIV2() READ_BIT(RCC->CFGR2, RCC_CFGR2_PREDIV2)
  1756.  
  1757. /**
  1758.   * @}
  1759.   */
  1760.  
  1761. /** @addtogroup RCCEx_PLLI2S_Configuration
  1762.   * @{
  1763.   */
  1764.  
  1765. /** @brief Macros to enable the main PLL2.
  1766.   * @note   After enabling the main PLL2, the application software should wait on
  1767.   *         PLL2RDY flag to be set indicating that PLL2 clock is stable and can
  1768.   *         be used as system clock source.
  1769.   * @note   The main PLL2 is disabled by hardware when entering STOP and STANDBY modes.
  1770.   */
  1771. #define __HAL_RCC_PLL2_ENABLE()          (*(__IO uint32_t *) RCC_CR_PLL2ON_BB = ENABLE)
  1772.  
  1773. /** @brief Macros to disable the main PLL2.
  1774.   * @note   The main PLL2 can not be disabled if it is used indirectly as system clock source
  1775.   * @note   The main PLL2 is disabled by hardware when entering STOP and STANDBY modes.
  1776.   */
  1777. #define __HAL_RCC_PLL2_DISABLE()         (*(__IO uint32_t *) RCC_CR_PLL2ON_BB = DISABLE)
  1778.  
  1779. /** @brief macros to configure the main PLL2 multiplication factor.
  1780.   * @note   This function must be used only when the main PLL2 is disabled.
  1781.   *
  1782.   * @param  __PLL2MUL__ specifies the multiplication factor for PLL2 VCO output clock
  1783.   *          This parameter can be one of the following values:
  1784.   *             @arg @ref RCC_PLL2_MUL8 PLL2VCO = PLL2 clock entry x 8
  1785.   *             @arg @ref RCC_PLL2_MUL9 PLL2VCO = PLL2 clock entry x 9
  1786.   *             @arg @ref RCC_PLL2_MUL10 PLL2VCO = PLL2 clock entry x 10
  1787.   *             @arg @ref RCC_PLL2_MUL11 PLL2VCO = PLL2 clock entry x 11
  1788.   *             @arg @ref RCC_PLL2_MUL12 PLL2VCO = PLL2 clock entry x 12
  1789.   *             @arg @ref RCC_PLL2_MUL13 PLL2VCO = PLL2 clock entry x 13
  1790.   *             @arg @ref RCC_PLL2_MUL14 PLL2VCO = PLL2 clock entry x 14
  1791.   *             @arg @ref RCC_PLL2_MUL16 PLL2VCO = PLL2 clock entry x 16
  1792.   *             @arg @ref RCC_PLL2_MUL20 PLL2VCO = PLL2 clock entry x 20
  1793.   *
  1794.   */
  1795. #define __HAL_RCC_PLL2_CONFIG(__PLL2MUL__)\
  1796.           MODIFY_REG(RCC->CFGR2, RCC_CFGR2_PLL2MUL,(__PLL2MUL__))
  1797.  
  1798. /**
  1799.   * @}
  1800.   */
  1801.  
  1802. /** @defgroup RCCEx_I2S_Configuration I2S Configuration
  1803.   * @brief  Macros to configure clock source of I2S peripherals.
  1804.   * @{
  1805.   */
  1806.  
  1807. /** @brief  Macro to configure the I2S2 clock.
  1808.   * @param  __I2S2CLKSOURCE__ specifies the I2S2 clock source.
  1809.   *          This parameter can be one of the following values:
  1810.   *            @arg @ref RCC_I2S2CLKSOURCE_SYSCLK system clock selected as I2S3 clock entry
  1811.   *            @arg @ref RCC_I2S2CLKSOURCE_PLLI2S_VCO PLLI2S VCO clock selected as I2S3 clock entry
  1812.   */
  1813. #define __HAL_RCC_I2S2_CONFIG(__I2S2CLKSOURCE__) \
  1814.                   MODIFY_REG(RCC->CFGR2, RCC_CFGR2_I2S2SRC, (uint32_t)(__I2S2CLKSOURCE__))
  1815.  
  1816. /** @brief  Macro to get the I2S2 clock (I2S2CLK).
  1817.   * @retval The clock source can be one of the following values:
  1818.   *            @arg @ref RCC_I2S2CLKSOURCE_SYSCLK system clock selected as I2S3 clock entry
  1819.   *            @arg @ref RCC_I2S2CLKSOURCE_PLLI2S_VCO PLLI2S VCO clock selected as I2S3 clock entry
  1820.   */
  1821. #define __HAL_RCC_GET_I2S2_SOURCE() ((uint32_t)(READ_BIT(RCC->CFGR2, RCC_CFGR2_I2S2SRC)))
  1822.  
  1823. /** @brief  Macro to configure the I2S3 clock.
  1824.   * @param  __I2S2CLKSOURCE__ specifies the I2S3 clock source.
  1825.   *          This parameter can be one of the following values:
  1826.   *            @arg @ref RCC_I2S3CLKSOURCE_SYSCLK system clock selected as I2S3 clock entry
  1827.   *            @arg @ref RCC_I2S3CLKSOURCE_PLLI2S_VCO PLLI2S VCO clock selected as I2S3 clock entry
  1828.   */
  1829. #define __HAL_RCC_I2S3_CONFIG(__I2S2CLKSOURCE__) \
  1830.                   MODIFY_REG(RCC->CFGR2, RCC_CFGR2_I2S3SRC, (uint32_t)(__I2S2CLKSOURCE__))
  1831.  
  1832. /** @brief  Macro to get the I2S3 clock (I2S3CLK).
  1833.   * @retval The clock source can be one of the following values:
  1834.   *            @arg @ref RCC_I2S3CLKSOURCE_SYSCLK system clock selected as I2S3 clock entry
  1835.   *            @arg @ref RCC_I2S3CLKSOURCE_PLLI2S_VCO PLLI2S VCO clock selected as I2S3 clock entry
  1836.   */
  1837. #define __HAL_RCC_GET_I2S3_SOURCE() ((uint32_t)(READ_BIT(RCC->CFGR2, RCC_CFGR2_I2S3SRC)))
  1838.  
  1839. /**
  1840.   * @}
  1841.   */
  1842.  
  1843. #endif /* STM32F105xC || STM32F107xC */
  1844. /**
  1845.   * @}
  1846.   */
  1847.  
  1848. /* Exported functions --------------------------------------------------------*/
  1849. /** @addtogroup RCCEx_Exported_Functions
  1850.   * @{
  1851.   */
  1852.  
  1853. /** @addtogroup RCCEx_Exported_Functions_Group1
  1854.   * @{
  1855.   */
  1856.  
  1857. HAL_StatusTypeDef HAL_RCCEx_PeriphCLKConfig(RCC_PeriphCLKInitTypeDef  *PeriphClkInit);
  1858. void              HAL_RCCEx_GetPeriphCLKConfig(RCC_PeriphCLKInitTypeDef  *PeriphClkInit);
  1859. uint32_t          HAL_RCCEx_GetPeriphCLKFreq(uint32_t PeriphClk);
  1860.  
  1861. /**
  1862.   * @}
  1863.   */
  1864.  
  1865. #if defined(STM32F105xC) || defined(STM32F107xC)
  1866. /** @addtogroup RCCEx_Exported_Functions_Group2
  1867.   * @{
  1868.   */
  1869. HAL_StatusTypeDef HAL_RCCEx_EnablePLLI2S(RCC_PLLI2SInitTypeDef  *PLLI2SInit);
  1870. HAL_StatusTypeDef HAL_RCCEx_DisablePLLI2S(void);
  1871.  
  1872. /**
  1873.   * @}
  1874.   */
  1875.  
  1876. /** @addtogroup RCCEx_Exported_Functions_Group3
  1877.   * @{
  1878.   */
  1879. HAL_StatusTypeDef HAL_RCCEx_EnablePLL2(RCC_PLL2InitTypeDef  *PLL2Init);
  1880. HAL_StatusTypeDef HAL_RCCEx_DisablePLL2(void);
  1881.  
  1882. /**
  1883.   * @}
  1884.   */
  1885. #endif /* STM32F105xC || STM32F107xC */
  1886.  
  1887. /**
  1888.   * @}
  1889.   */
  1890.  
  1891. /**
  1892.   * @}
  1893.   */
  1894.  
  1895. /**
  1896.   * @}
  1897.   */
  1898.  
  1899. #ifdef __cplusplus
  1900. }
  1901. #endif
  1902.  
  1903. #endif /* __STM32F1xx_HAL_RCC_EX_H */
  1904.  
  1905.  
  1906.