From e6199d4b5426043b877bb712f47fb759c2fe91ea Mon Sep 17 00:00:00 2001 From: Giovanni Di Sirio Date: Fri, 22 Dec 2017 19:05:03 +0000 Subject: [PATCH] More H7 code. git-svn-id: svn://svn.code.sf.net/p/chibios/svn/trunk@11170 35acf78f-673a-0410-8e92-d51de3d6d3f4 --- demos/STM32/RT-STM32H743I-NUCLEO144/mcuconf.h | 45 +- os/hal/ports/STM32/STM32H7xx/hal_lld.h | 436 +++++++++--------- 2 files changed, 266 insertions(+), 215 deletions(-) diff --git a/demos/STM32/RT-STM32H743I-NUCLEO144/mcuconf.h b/demos/STM32/RT-STM32H743I-NUCLEO144/mcuconf.h index 984569aeb..4933f835d 100644 --- a/demos/STM32/RT-STM32H743I-NUCLEO144/mcuconf.h +++ b/demos/STM32/RT-STM32H743I-NUCLEO144/mcuconf.h @@ -18,7 +18,7 @@ #define MCUCONF_H /* - * STM32F7xx drivers configuration. + * STM32H7xx drivers configuration. * The following settings override the default settings present in * the various device driver implementation headers. * Note that the settings for each driver only have effect if the whole @@ -34,14 +34,15 @@ #define STM32H7xx_MCUCONF /* - * General settins. + * General settings. */ #define STM32_NO_INIT FALSE #define STM32_HCLK_ENFORCED_VALUE STM32_HSICLK /* * PWR system settings. - * Constants are taken from the ST header, reading manual is required. + * Reading STM32 Reference Manual is required. + * Constants are taken from the ST header. */ #define STM32_PWR_CR1 (PWR_CR1_SVOS_1 | PWR_CR1_SVOS_0) #define STM32_PWR_CR2 (PWR_CR2_BREN) @@ -51,8 +52,44 @@ /* * Clock tree settings. - * Constants are taken from the ST header, reading manual is required. + * Reading STM32 Reference Manual is required. */ +#define STM32_HSI_ENABLED TRUE +#define STM32_LSI_ENABLED FALSE +#define STM32_CSI_ENABLED FALSE +#define STM32_HSI48_ENABLED TRUE +#define STM32_HSE_ENABLED TRUE +#define STM32_LSE_ENABLED TRUE +#define STM32_HSIDIV STM32_HSIDIV_DIV1 +#define STM32_RTCPRE_VALUE 8 +#define STM32_RTCSEL STM32_RTCSEL_LSE +#define STM32_PLLSRC STM32_PLLSRC_HSE +#define STM32_PLL1_ENABLED TRUE +#define STM32_PLL1_DIVM_VALUE 4 +#define STM32_PLL1_DIVN_VALUE 400 +#define STM32_PLL1_FRACN_VALUE 0 +#define STM32_PLL1_DIVP_VALUE 2 +#define STM32_PLL1_DIVQ_VALUE 8 +#define STM32_PLL1_DIVR_VALUE 8 +#define STM32_PLL2_ENABLED TRUE +#define STM32_PLL2_DIVM_VALUE 4 +#define STM32_PLL2_DIVN_VALUE 400 +#define STM32_PLL2_FRACN_VALUE 0 +#define STM32_PLL2_DIVP_VALUE 2 +#define STM32_PLL2_DIVQ_VALUE 8 +#define STM32_PLL2_DIVR_VALUE 8 +#define STM32_PLL3_ENABLED TRUE +#define STM32_PLL3_DIVM_VALUE 4 +#define STM32_PLL3_DIVN_VALUE 400 +#define STM32_PLL3_FRACN_VALUE 0 +#define STM32_PLL3_DIVP_VALUE 2 +#define STM32_PLL3_DIVQ_VALUE 8 +#define STM32_PLL3_DIVR_VALUE 8 + + + + + #define STM32_HSI_ENABLED TRUE #define STM32_LSI_ENABLED TRUE #define STM32_CSI_ENABLED TRUE diff --git a/os/hal/ports/STM32/STM32H7xx/hal_lld.h b/os/hal/ports/STM32/STM32H7xx/hal_lld.h index c1ea6533e..b52961342 100644 --- a/os/hal/ports/STM32/STM32H7xx/hal_lld.h +++ b/os/hal/ports/STM32/STM32H7xx/hal_lld.h @@ -178,7 +178,7 @@ /** * @brief Maximum APB3 clock frequency. */ -#define STM32_PCLK3_MAX (STM32_HCLK_MAX / 1) +#define STM32_PCLK3_MAX (STM32_HCLK_MAX / 2) /** * @brief Maximum APB4 clock frequency. @@ -200,7 +200,7 @@ * @name Internal clock sources * @{ */ -#define STM32_HSICLK 16000000 /**< High speed internal clock. */ +#define STM32_HSICLK 64000000 /**< High speed internal clock. */ #define STM32_LSICLK 32000 /**< Low speed internal clock. */ /** @} */ @@ -208,227 +208,69 @@ * @name Register helpers not found in ST headers * @{ */ +#define RCC_CR_HSIDIV_VALUE(n) ((n) << 3U) + +#define RCC_CFGR_RTCPRE_VALUE(n) ((n) << 8U) +#define RCC_CFGR_MCO1PRE_VALUE(n) ((n) << 18U) +#define RCC_CFGR_MCO1_VALUE(n) ((n) << 22U) +#define RCC_CFGR_MCO2PRE_VALUE(n) ((n) << 25U) +#define RCC_CFGR_MCO2_VALUE(n) ((n) << 29U) + #define RCC_PLLCKSELR_DIVM1_VALUE(n) ((n) << RCC_PLLCKSELR_DIVM1_Pos) #define RCC_PLLCKSELR_DIVM2_VALUE(n) ((n) << RCC_PLLCKSELR_DIVM2_Pos) #define RCC_PLLCKSELR_DIVM3_VALUE(n) ((n) << RCC_PLLCKSELR_DIVM3_Pos) + #define RCC_PLL1DIVR_DIVN1_VALUE(n) ((n) << RCC_PLL1DIVR_N1) #define RCC_PLL1DIVR_DIVP1_VALUE(n) ((n) << RCC_PLL1DIVR_P1) #define RCC_PLL1DIVR_DIVQ1_VALUE(n) ((n) << RCC_PLL1DIVR_Q1) #define RCC_PLL1DIVR_DIVR1_VALUE(n) ((n) << RCC_PLL1DIVR_R1) + #define RCC_PLL1FRACR_FRACN1_VALUE(n) ((n) << RCC_PLL1FRACR_FRACN1_Pos) + #define RCC_PLL2DIVR_DIVN2_VALUE(n) ((n) << RCC_PLL2DIVR_N2) #define RCC_PLL2DIVR_DIVP2_VALUE(n) ((n) << RCC_PLL2DIVR_P2) #define RCC_PLL2DIVR_DIVQ2_VALUE(n) ((n) << RCC_PLL2DIVR_Q2) #define RCC_PLL2DIVR_DIVR2_VALUE(n) ((n) << RCC_PLL2DIVR_R2) + #define RCC_PLL2FRACR_FRACN2_VALUE(n) ((n) << RCC_PLL2FRACR_FRACN2_Pos) + #define RCC_PLL3DIVR_DIVN3_VALUE(n) ((n) << RCC_PLL3DIVR_N3) #define RCC_PLL3DIVR_DIVP3_VALUE(n) ((n) << RCC_PLL3DIVR_P3) #define RCC_PLL3DIVR_DIVQ3_VALUE(n) ((n) << RCC_PLL3DIVR_Q3) #define RCC_PLL3DIVR_DIVR3_VALUE(n) ((n) << RCC_PLL3DIVR_R3) + #define RCC_PLL3FRACR_FRACN3_VALUE(n) ((n) << RCC_PLL3FRACR_FRACN3_Pos) + +#define RCC_BDCR_RTCSEL_VALUE(n) ((n) << RCC_BDCR_RTCSEL_Pos) /** @} */ -/** - * @name RCC_CFGR register bits definitions - * @{ - */ -#define STM32_HPRE_MASK (15 << 4) /**< HPRE mask. */ -#define STM32_HPRE_DIV1 (0 << 4) /**< SYSCLK divided by 1. */ -#define STM32_HPRE_DIV2 (8 << 4) /**< SYSCLK divided by 2. */ -#define STM32_HPRE_DIV4 (9 << 4) /**< SYSCLK divided by 4. */ -#define STM32_HPRE_DIV8 (10 << 4) /**< SYSCLK divided by 8. */ -#define STM32_HPRE_DIV16 (11 << 4) /**< SYSCLK divided by 16. */ -#define STM32_HPRE_DIV64 (12 << 4) /**< SYSCLK divided by 64. */ -#define STM32_HPRE_DIV128 (13 << 4) /**< SYSCLK divided by 128. */ -#define STM32_HPRE_DIV256 (14 << 4) /**< SYSCLK divided by 256. */ -#define STM32_HPRE_DIV512 (15 << 4) /**< SYSCLK divided by 512. */ - -#define STM32_PPRE1_MASK (7 << 10) /**< PPRE1 mask. */ -#define STM32_PPRE1_DIV1 (0 << 10) /**< HCLK divided by 1. */ -#define STM32_PPRE1_DIV2 (4 << 10) /**< HCLK divided by 2. */ -#define STM32_PPRE1_DIV4 (5 << 10) /**< HCLK divided by 4. */ -#define STM32_PPRE1_DIV8 (6 << 10) /**< HCLK divided by 8. */ -#define STM32_PPRE1_DIV16 (7 << 10) /**< HCLK divided by 16. */ - -#define STM32_PPRE2_MASK (7 << 13) /**< PPRE2 mask. */ -#define STM32_PPRE2_DIV1 (0 << 13) /**< HCLK divided by 1. */ -#define STM32_PPRE2_DIV2 (4 << 13) /**< HCLK divided by 2. */ -#define STM32_PPRE2_DIV4 (5 << 13) /**< HCLK divided by 4. */ -#define STM32_PPRE2_DIV8 (6 << 13) /**< HCLK divided by 8. */ -#define STM32_PPRE2_DIV16 (7 << 13) /**< HCLK divided by 16. */ - -#define STM32_RTCPRE_MASK (31 << 16) /**< RTCPRE mask. */ - -#define STM32_MCO1SEL_MASK (3 << 21) /**< MCO1 mask. */ -#define STM32_MCO1SEL_HSI (0 << 21) /**< HSI clock on MCO1 pin. */ -#define STM32_MCO1SEL_LSE (1 << 21) /**< LSE clock on MCO1 pin. */ -#define STM32_MCO1SEL_HSE (2 << 21) /**< HSE clock on MCO1 pin. */ -#define STM32_MCO1SEL_PLL (3 << 21) /**< PLL clock on MCO1 pin. */ - -#define STM32_I2SSRC_MASK (1 << 23) /**< I2CSRC mask. */ -#define STM32_I2SSRC_PLLI2S (0 << 23) /**< I2SSRC is PLLI2S. */ -#define STM32_I2SSRC_CKIN (1 << 23) /**< I2S_CKIN is PLLI2S. */ -#define STM32_I2SSRC_OFF (1 << 23) /**< ISS clock not required. */ - -#define STM32_MCO1PRE_MASK (7 << 24) /**< MCO1PRE mask. */ -#define STM32_MCO1PRE_DIV1 (0 << 24) /**< MCO1 divided by 1. */ -#define STM32_MCO1PRE_DIV2 (4 << 24) /**< MCO1 divided by 2. */ -#define STM32_MCO1PRE_DIV3 (5 << 24) /**< MCO1 divided by 3. */ -#define STM32_MCO1PRE_DIV4 (6 << 24) /**< MCO1 divided by 4. */ -#define STM32_MCO1PRE_DIV5 (7 << 24) /**< MCO1 divided by 5. */ - -#define STM32_MCO2PRE_MASK (7 << 27) /**< MCO2PRE mask. */ -#define STM32_MCO2PRE_DIV1 (0 << 27) /**< MCO2 divided by 1. */ -#define STM32_MCO2PRE_DIV2 (4 << 27) /**< MCO2 divided by 2. */ -#define STM32_MCO2PRE_DIV3 (5 << 27) /**< MCO2 divided by 3. */ -#define STM32_MCO2PRE_DIV4 (6 << 27) /**< MCO2 divided by 4. */ -#define STM32_MCO2PRE_DIV5 (7 << 27) /**< MCO2 divided by 5. */ - -#define STM32_MCO2SEL_MASK (3 << 30) /**< MCO2 mask. */ -#define STM32_MCO2SEL_SYSCLK (0 << 30) /**< SYSCLK clock on MCO2 pin. */ -#define STM32_MCO2SEL_PLLI2S (1 << 30) /**< PLLI2S clock on MCO2 pin. */ -#define STM32_MCO2SEL_HSE (2 << 30) /**< HSE clock on MCO2 pin. */ -#define STM32_MCO2SEL_PLL (3 << 30) /**< PLL clock on MCO2 pin. */ /** - * @name RCC_PLLI2SCFGR register bits definitions + * @name Configuration switches to be used in @p mcuconf.h * @{ */ -#define STM32_PLLI2SN_MASK (511 << 6) /**< PLLI2SN mask. */ -#define STM32_PLLI2SR_MASK (7 << 28) /**< PLLI2SR mask. */ -/** @} */ +#define STM32_HSIDIV_DIV1 RCC_CR_HSIDIV_VALUE(0) +#define STM32_HSIDIV_DIV2 RCC_CR_HSIDIV_VALUE(1) +#define STM32_HSIDIV_DIV4 RCC_CR_HSIDIV_VALUE(2) +#define STM32_HSIDIV_DIV8 RCC_CR_HSIDIV_VALUE(3) -/** - * @name RCC_DCKCFGR1 register bits definitions - * @{ - */ -#define STM32_PLLSAIDIVR_MASK (3 << 16) /**< PLLSAIDIVR mask. */ -#define STM32_PLLSAIDIVR_DIV2 (0 << 16) /**< LCD_CLK is R divided by 2. */ -#define STM32_PLLSAIDIVR_DIV4 (1 << 16) /**< LCD_CLK is R divided by 4. */ -#define STM32_PLLSAIDIVR_DIV8 (2 << 16) /**< LCD_CLK is R divided by 8. */ -#define STM32_PLLSAIDIVR_DIV16 (3 << 16) /**< LCD_CLK is R divided by 16.*/ +#define STM32_MCO1_HSI_CK RCC_CFGR_MCO1_VALUE(0U) +#define STM32_MCO1_LSE_CK RCC_CFGR_MCO1_VALUE(1U) +#define STM32_MCO1_HSE_CK RCC_CFGR_MCO1_VALUE(2U) +#define STM32_MCO1_PLL1_Q_CK RCC_CFGR_MCO1_VALUE(3U) +#define STM32_MCO1_HSI48_CK RCC_CFGR_MCO1_VALUE(4U) -#define STM32_SAI1SEL_MASK (3 << 20) /**< SAI1SEL mask. */ -#define STM32_SAI1SEL_SAIPLL (0 << 20) /**< SAI1 source is SAIPLL. */ -#define STM32_SAI1SEL_I2SPLL (1 << 20) /**< SAI1 source is I2SPLL. */ -#define STM32_SAI1SEL_CKIN (2 << 20) /**< SAI1 source is I2S_CKIN. */ -#define STM32_SAI1SEL_OFF 0xFFFFFFFFU /**< SAI1 clock is not required.*/ +#define STM32_MCO2_SYS_CK RCC_CFGR_MCO2_VALUE(0U) +#define STM32_MCO2_PLL2_Q_CK RCC_CFGR_MCO2_VALUE(1U) +#define STM32_MCO2_HSE_CK RCC_CFGR_MCO2_VALUE(2U) +#define STM32_MCO2_PLL1_P_CK RCC_CFGR_MCO2_VALUE(3U) +#define STM32_MCO2_CSI_CK RCC_CFGR_MCO2_VALUE(4U) +#define STM32_MCO2_LSI_CK RCC_CFGR_MCO2_VALUE(5U) -#define STM32_SAI2SEL_MASK (3 << 22) /**< SAI2SEL mask. */ -#define STM32_SAI2SEL_SAIPLL (0 << 22) /**< SAI2 source is SAIPLL. */ -#define STM32_SAI2SEL_I2SPLL (1 << 22) /**< SAI2 source is I2SPLL. */ -#define STM32_SAI2SEL_CKIN (2 << 22) /**< SAI2 source is I2S_CKIN. */ -#define STM32_SAI2SEL_OFF 0xFFFFFFFFU /**< SAI2 clock is not required.*/ - -#define STM32_TIMPRE_MASK (1 << 24) /**< TIMPRE mask. */ -#define STM32_TIMPRE_PCLK (0 << 24) /**< TIM clocks from PCLKx. */ -#define STM32_TIMPRE_HCLK (1 << 24) /**< TIM clocks from HCLK. */ -/** @} */ - -/** - * @name RCC_DCKCFGR2 register bits definitions - * @{ - */ -#define STM32_USART1SEL_MASK (3 << 0) /**< USART1SEL mask. */ -#define STM32_USART1SEL_PCLK2 (0 << 0) /**< USART1 source is PCLK2. */ -#define STM32_USART1SEL_SYSCLK (1 << 0) /**< USART1 source is SYSCLK. */ -#define STM32_USART1SEL_HSI (2 << 0) /**< USART1 source is HSI. */ -#define STM32_USART1SEL_LSE (3 << 0) /**< USART1 source is LSE. */ - -#define STM32_USART2SEL_MASK (3 << 2) /**< USART2 mask. */ -#define STM32_USART2SEL_PCLK1 (0 << 2) /**< USART2 source is PCLK1. */ -#define STM32_USART2SEL_SYSCLK (1 << 2) /**< USART2 source is SYSCLK. */ -#define STM32_USART2SEL_HSI (2 << 2) /**< USART2 source is HSI. */ -#define STM32_USART2SEL_LSE (3 << 2) /**< USART2 source is LSE. */ - -#define STM32_USART3SEL_MASK (3 << 4) /**< USART3 mask. */ -#define STM32_USART3SEL_PCLK1 (0 << 4) /**< USART3 source is PCLK1. */ -#define STM32_USART3SEL_SYSCLK (1 << 4) /**< USART3 source is SYSCLK. */ -#define STM32_USART3SEL_HSI (2 << 4) /**< USART3 source is HSI. */ -#define STM32_USART3SEL_LSE (3 << 4) /**< USART3 source is LSE. */ - -#define STM32_UART4SEL_MASK (3 << 6) /**< UART4 mask. */ -#define STM32_UART4SEL_PCLK1 (0 << 6) /**< UART4 source is PCLK1. */ -#define STM32_UART4SEL_SYSCLK (1 << 6) /**< UART4 source is SYSCLK. */ -#define STM32_UART4SEL_HSI (2 << 6) /**< UART4 source is HSI. */ -#define STM32_UART4SEL_LSE (3 << 6) /**< UART4 source is LSE. */ - -#define STM32_UART5SEL_MASK (3 << 8) /**< UART5 mask. */ -#define STM32_UART5SEL_PCLK1 (0 << 8) /**< UART5 source is PCLK1. */ -#define STM32_UART5SEL_SYSCLK (1 << 8) /**< UART5 source is SYSCLK. */ -#define STM32_UART5SEL_HSI (2 << 8) /**< UART5 source is HSI. */ -#define STM32_UART5SEL_LSE (3 << 8) /**< UART5 source is LSE. */ - -#define STM32_USART6SEL_MASK (3 << 10) /**< USART6SEL mask. */ -#define STM32_USART6SEL_PCLK2 (0 << 10) /**< USART6 source is PCLK2. */ -#define STM32_USART6SEL_SYSCLK (1 << 10) /**< USART6 source is SYSCLK. */ -#define STM32_USART6SEL_HSI (2 << 10) /**< USART6 source is HSI. */ -#define STM32_USART6SEL_LSE (3 << 10) /**< USART6 source is LSE. */ - -#define STM32_UART7SEL_MASK (3 << 12) /**< UART7 mask. */ -#define STM32_UART7SEL_PCLK1 (0 << 12) /**< UART7 source is PCLK1. */ -#define STM32_UART7SEL_SYSCLK (1 << 12) /**< UART7 source is SYSCLK. */ -#define STM32_UART7SEL_HSI (2 << 12) /**< UART7 source is HSI. */ -#define STM32_UART7SEL_LSE (3 << 12) /**< UART7 source is LSE. */ - -#define STM32_UART8SEL_MASK (3 << 14) /**< UART8 mask. */ -#define STM32_UART8SEL_PCLK1 (0 << 14) /**< UART8 source is PCLK1. */ -#define STM32_UART8SEL_SYSCLK (1 << 14) /**< UART8 source is SYSCLK. */ -#define STM32_UART8SEL_HSI (2 << 14) /**< UART8 source is HSI. */ -#define STM32_UART8SEL_LSE (3 << 14) /**< UART8 source is LSE. */ - -#define STM32_I2C1SEL_MASK (3 << 16) /**< I2C1SEL mask. */ -#define STM32_I2C1SEL_PCLK1 (0 << 16) /**< I2C1 source is PCLK1. */ -#define STM32_I2C1SEL_SYSCLK (1 << 16) /**< I2C1 source is SYSCLK. */ -#define STM32_I2C1SEL_HSI (2 << 16) /**< I2C1 source is HSI. */ -#define STM32_I2C1SEL_LSE (3 << 16) /**< I2C1 source is LSE. */ - -#define STM32_I2C2SEL_MASK (3 << 18) /**< I2C2SEL mask. */ -#define STM32_I2C2SEL_PCLK1 (0 << 18) /**< I2C2 source is PCLK1. */ -#define STM32_I2C2SEL_SYSCLK (1 << 18) /**< I2C2 source is SYSCLK. */ -#define STM32_I2C2SEL_HSI (2 << 18) /**< I2C2 source is HSI. */ -#define STM32_I2C2SEL_LSE (3 << 18) /**< I2C2 source is LSE. */ - -#define STM32_I2C3SEL_MASK (3 << 20) /**< I2C3SEL mask. */ -#define STM32_I2C3SEL_PCLK1 (0 << 20) /**< I2C3 source is PCLK1. */ -#define STM32_I2C3SEL_SYSCLK (1 << 20) /**< I2C3 source is SYSCLK. */ -#define STM32_I2C3SEL_HSI (2 << 20) /**< I2C3 source is HSI. */ -#define STM32_I2C3SEL_LSE (3 << 20) /**< I2C3 source is LSE. */ - -#define STM32_I2C4SEL_MASK (3 << 22) /**< I2C4SEL mask. */ -#define STM32_I2C4SEL_PCLK1 (0 << 22) /**< I2C4 source is PCLK1. */ -#define STM32_I2C4SEL_SYSCLK (1 << 22) /**< I2C4 source is SYSCLK. */ -#define STM32_I2C4SEL_HSI (2 << 22) /**< I2C4 source is HSI. */ -#define STM32_I2C4SEL_LSE (3 << 22) /**< I2C4 source is LSE. */ - -#define STM32_LPTIM1SEL_MASK (3 << 24) /**< LPTIM1SEL mask. */ -#define STM32_LPTIM1SEL_PCLK1 (0 << 24) /**< LPTIM1 source is PCLK1. */ -#define STM32_LPTIM1SEL_LSI (1 << 24) /**< LPTIM1 source is LSI. */ -#define STM32_LPTIM1SEL_HSI (2 << 24) /**< LPTIM1 source is HSI. */ -#define STM32_LPTIM1SEL_LSE (3 << 24) /**< LPTIM1 source is LSE. */ - -#define STM32_CECSEL_MASK (1 << 26) /**< CECSEL mask. */ -#define STM32_CECSEL_LSE (0 << 26) /**< CEC source is LSE. */ -#define STM32_CECSEL_HSIDIV488 (1 << 26) /**< CEC source is HSI/488. */ - -#define STM32_CK48MSEL_MASK (1 << 27) /**< CK48MSEL mask. */ -#define STM32_CK48MSEL_PLL (0 << 27) /**< PLL48CLK source is PLL. */ -#define STM32_CK48MSEL_PLLSAI (1 << 27) /**< PLL48CLK source is PLLSAI. */ - -#define STM32_SDMMCSEL_MASK (1 << 28) /**< SDMMCSEL mask. */ -#define STM32_SDMMCSEL_PLL48CLK (0 << 28) /**< SDMMC source is PLL48CLK. */ -#define STM32_SDMMCSEL_SYSCLK (1 << 28) /**< SDMMC source is SYSCLK. */ -/** @} */ - -/** - * @name RCC_BDCR register bits definitions - * @{ - */ -#define STM32_RTCSEL_MASK (3 << 8) /**< RTC source mask. */ -#define STM32_RTCSEL_NOCLOCK (0 << 8) /**< No RTC source. */ -#define STM32_RTCSEL_LSE (1 << 8) /**< RTC source is LSE. */ -#define STM32_RTCSEL_LSI (2 << 8) /**< RTC source is LSI. */ -#define STM32_RTCSEL_HSEDIV (3 << 8) /**< RTC source is HSE divided. */ +#define STM32_RTCSEL_NOCLK RCC_BDCR_RTCSEL_VALUE(0U) +#define STM32_RTCSEL_LSE RCC_BDCR_RTCSEL_VALUE(1U) +#define STM32_RTCSEL_LSI RCC_BDCR_RTCSEL_VALUE(2U) +#define STM32_RTCSEL_HSEDIV RCC_BDCR_RTCSEL_VALUE(3U) /** @} */ /*===========================================================================*/ @@ -530,6 +372,193 @@ #define STM32_LSE_ENABLED TRUE #endif +/** + * @brief HSI divider. + */ +#if !defined(STM32_HSIDIV) || defined(__DOXYGEN__) +#define STM32_HSIDIV STM32_HSIDIV_DIV1 +#endif + +/** + * @brief RTC HSE prescaler value. + * @note The allowed values are 2..63. + */ +#if !defined(STM32_RTCPRE_VALUE) || defined(__DOXYGEN__) +#define STM32_RTCPRE_VALUE 8 +#endif + +/** + * @brief RTC clock source. + */ +#if !defined(STM32_RTCSEL) || defined(__DOXYGEN__) +#define STM32_RTCSEL STM32_RTCSEL_LSE +#endif + +/** + * @brief Clock source for all PLLs. + */ +#if !defined(STM32_PLLSRC) || defined(__DOXYGEN__) +#define STM32_PLLSRC STM32_PLLSRC_HSE +#endif + +/** + * @brief Enables or disables the PLL1. + */ +#if !defined(STM32_PLL1_ENABLED) || defined(__DOXYGEN__) +#define STM32_PLL1_ENABLED TRUE +#endif + +/** + * @brief PLL1 DIVM divider. + */ +#if !defined(STM32_PLL1_DIVM_VALUE) || defined(__DOXYGEN__) +#define STM32_PLL1_DIVM_VALUE 4 +#endif + +/** + * @brief PLL1 DIVN multiplier. + */ +#if !defined(STM32_PLL1_DIVN_VALUE) || defined(__DOXYGEN__) +#define STM32_PLL1_DIVN_VALUE 400 +#endif + +/** + * @brief PLL1 FRACN multiplier, zero if no fractional part. + */ +#if !defined(STM32_PLL1_FRACN_VALUE) || defined(__DOXYGEN__) +#define STM32_PLL1_FRACN_VALUE 0 +#endif + +/** + * @brief PLL1 DIVP divider. + */ +#if !defined(STM32_PLL1_DIVP_VALUE) || defined(__DOXYGEN__) +#define STM32_PLL1_DIVP_VALUE 2 +#endif + +/** + * @brief PLL1 DIVQ divider. + */ +#if !defined(STM32_PLL1_DIVQ_VALUE) || defined(__DOXYGEN__) +#define STM32_PLL1_DIVQ_VALUE 8 +#endif + +/** + * @brief PLL1 DIVR divider. + */ +#if !defined(STM32_PLL1_DIVR_VALUE) || defined(__DOXYGEN__) +#define STM32_PLL1_DIVR_VALUE 8 +#endif + +/** + * @brief Enables or disables the PLL2. + */ +#if !defined(STM32_PLL2_ENABLED) || defined(__DOXYGEN__) +#define STM32_PLL2_ENABLED TRUE +#endif + +/** + * @brief PLL2 DIVM divider. + */ +#if !defined(STM32_PLL2_DIVM_VALUE) || defined(__DOXYGEN__) +#define STM32_PLL2_DIVM_VALUE 4 +#endif + +/** + * @brief PLL2 DIVN multiplier. + */ +#if !defined(STM32_PLL2_DIVN_VALUE) || defined(__DOXYGEN__) +#define STM32_PLL2_DIVN_VALUE 400 +#endif + +/** + * @brief PLL2 FRACN multiplier, zero if no fractional part. + */ +#if !defined(STM32_PLL2_FRACN_VALUE) || defined(__DOXYGEN__) +#define STM32_PLL2_FRACN_VALUE 0 +#endif + +/** + * @brief PLL2 DIVP divider. + */ +#if !defined(STM32_PLL2_DIVP_VALUE) || defined(__DOXYGEN__) +#define STM32_PLL2_DIVP_VALUE 2 +#endif + +/** + * @brief PLL2 DIVQ divider. + */ +#if !defined(STM32_PLL2_DIVQ_VALUE) || defined(__DOXYGEN__) +#define STM32_PLL2_DIVQ_VALUE 8 +#endif + +/** + * @brief PLL2 DIVR divider. + */ +#if !defined(STM32_PLL2_DIVR_VALUE) || defined(__DOXYGEN__) +#define STM32_PLL2_DIVR_VALUE 8 +#endif + +/** + * @brief Enables or disables the PLL3. + */ +#if !defined(STM32_PLL3_ENABLED) || defined(__DOXYGEN__) +#define STM32_PLL3_ENABLED TRUE +#endif + +/** + * @brief PLL3 DIVM divider. + */ +#if !defined(STM32_PLL3_DIVM_VALUE) || defined(__DOXYGEN__) +#define STM32_PLL3_DIVM_VALUE 4 +#endif + +/** + * @brief PLL3 DIVN multiplier. + */ +#if !defined(STM32_PLL3_DIVN_VALUE) || defined(__DOXYGEN__) +#define STM32_PLL3_DIVN_VALUE 400 +#endif + +/** + * @brief PLL3 FRACN multiplier, zero if no fractional part. + */ +#if !defined(STM32_PLL3_FRACN_VALUE) || defined(__DOXYGEN__) +#define STM32_PLL3_FRACN_VALUE 0 +#endif + +/** + * @brief PLL3 DIVP divider. + */ +#if !defined(STM32_PLL3_DIVP_VALUE) || defined(__DOXYGEN__) +#define STM32_PLL3_DIVP_VALUE 2 +#endif + +/** + * @brief PLL3 DIVQ divider. + */ +#if !defined(STM32_PLL3_DIVQ_VALUE) || defined(__DOXYGEN__) +#define STM32_PLL3_DIVQ_VALUE 8 +#endif + +/** + * @brief PLL3 DIVR divider. + */ +#if !defined(STM32_PLL3_DIVR_VALUE) || defined(__DOXYGEN__) +#define STM32_PLL3_DIVR_VALUE 8 +#endif + + + + + + + + + + + + /** * @brief Main clock source selection. * @note If the selected clock source is not the PLL then the PLL is not @@ -613,21 +642,6 @@ #define STM32_PPRE2 STM32_PPRE2_DIV2 #endif -/** - * @brief RTC clock source. - */ -#if !defined(STM32_RTCSEL) || defined(__DOXYGEN__) -#define STM32_RTCSEL STM32_RTCSEL_LSE -#endif - -/** - * @brief RTC HSE prescaler value. - * @note The allowed values are 2..31. - */ -#if !defined(STM32_RTCPRE_VALUE) || defined(__DOXYGEN__) -#define STM32_RTCPRE_VALUE 25 -#endif - /** * @brief MCO1 clock source value. * @note The default value outputs HSI clock on MCO1 pin.