diff --git a/bsp/stm32/libraries/HAL_Drivers/SConscript b/bsp/stm32/libraries/HAL_Drivers/SConscript index f066538df1..d929ca149e 100644 --- a/bsp/stm32/libraries/HAL_Drivers/SConscript +++ b/bsp/stm32/libraries/HAL_Drivers/SConscript @@ -16,11 +16,11 @@ if GetDepend(['RT_USING_SERIAL']): else: src += ['drv_usart.c'] -if GetDepend(['RT_USING_HWTIMER']): - src += ['drv_hwtimer.c'] +if GetDepend(['BSP_USING_TIM']): + src += ['drv_tim.c'] -if GetDepend(['RT_USING_PWM']): - src += ['drv_pwm.c'] +if GetDepend(['BSP_USING_PWM']): + src += ['drv_pwm.c', 'drv_tim.c'] if GetDepend(['RT_USING_SPI']): src += ['drv_spi.c'] diff --git a/bsp/stm32/libraries/HAL_Drivers/drv_pwm.c b/bsp/stm32/libraries/HAL_Drivers/drv_pwm.c index ec9bf701ed..46b70e2a57 100644 --- a/bsp/stm32/libraries/HAL_Drivers/drv_pwm.c +++ b/bsp/stm32/libraries/HAL_Drivers/drv_pwm.c @@ -13,6 +13,7 @@ #ifdef BSP_USING_PWM #include "drv_config.h" +#include "drv_tim.h" #include //#define DRV_DEBUG @@ -159,58 +160,23 @@ static struct stm32_pwm stm32_pwm_obj[] = #endif }; -/* APBx timer clocks frequency doubler state related to APB1CLKDivider value */ -static void pclkx_doubler_get(rt_uint32_t *pclk1_doubler, rt_uint32_t *pclk2_doubler) -{ - uint32_t flatency = 0; - RCC_ClkInitTypeDef RCC_ClkInitStruct = {0}; - - RT_ASSERT(pclk1_doubler != RT_NULL); - RT_ASSERT(pclk1_doubler != RT_NULL); - - HAL_RCC_GetClockConfig(&RCC_ClkInitStruct, &flatency); - - *pclk1_doubler = 1; - *pclk2_doubler = 1; - -#if defined(SOC_SERIES_STM32MP1) - if (RCC_ClkInitStruct.APB1_Div != RCC_APB1_DIV1) - { - *pclk1_doubler = 2; - } - if (RCC_ClkInitStruct.APB2_Div != RCC_APB2_DIV1) - { - *pclk2_doubler = 2; - } -#else - if (RCC_ClkInitStruct.APB1CLKDivider != RCC_HCLK_DIV1) - { - *pclk1_doubler = 2; - } -#if !(defined(SOC_SERIES_STM32F0) || defined(SOC_SERIES_STM32G0)) - if (RCC_ClkInitStruct.APB2CLKDivider != RCC_HCLK_DIV1) - { - *pclk2_doubler = 2; - } -#endif -#endif -} - static rt_uint64_t tim_clock_get(TIM_HandleTypeDef *htim) { rt_uint32_t pclk1_doubler, pclk2_doubler; rt_uint64_t tim_clock; - pclkx_doubler_get(&pclk1_doubler, &pclk2_doubler); + stm32_tim_pclkx_doubler_get(&pclk1_doubler, &pclk2_doubler); #if defined(SOC_SERIES_STM32F2) || defined(SOC_SERIES_STM32F4) || defined(SOC_SERIES_STM32F7) if (htim->Instance == TIM9 || htim->Instance == TIM10 || htim->Instance == TIM11) -#elif defined(SOC_SERIES_STM32L4) || defined(SOC_SERIES_STM32H7)|| defined(SOC_SERIES_STM32F3) +#elif defined(SOC_SERIES_STM32F3) || defined(SOC_SERIES_STM32L4) || defined(SOC_SERIES_STM32H7) if (htim->Instance == TIM15 || htim->Instance == TIM16 || htim->Instance == TIM17) #elif defined(SOC_SERIES_STM32MP1) if (htim->Instance == TIM4) #elif defined(SOC_SERIES_STM32F1) || defined(SOC_SERIES_STM32F0) || defined(SOC_SERIES_STM32G0) if (0) +#else +#error "This driver has not supported this series yet!" #endif { #if !(defined(SOC_SERIES_STM32F0) || defined(SOC_SERIES_STM32G0)) /* don't have HAL_RCC_GetPCLK2Freq */ diff --git a/bsp/stm32/libraries/HAL_Drivers/drv_hwtimer.c b/bsp/stm32/libraries/HAL_Drivers/drv_tim.c similarity index 96% rename from bsp/stm32/libraries/HAL_Drivers/drv_hwtimer.c rename to bsp/stm32/libraries/HAL_Drivers/drv_tim.c index c44fe83331..98efc98bc3 100644 --- a/bsp/stm32/libraries/HAL_Drivers/drv_hwtimer.c +++ b/bsp/stm32/libraries/HAL_Drivers/drv_tim.c @@ -13,15 +13,51 @@ */ #include - -#ifdef BSP_USING_TIM #include "drv_config.h" //#define DRV_DEBUG -#define LOG_TAG "drv.hwtimer" +#define LOG_TAG "drv.tim" #include -#ifdef RT_USING_HWTIMER +/* APBx timer clocks frequency doubler state related to APB1CLKDivider value */ +void stm32_tim_pclkx_doubler_get(rt_uint32_t *pclk1_doubler, rt_uint32_t *pclk2_doubler) +{ + rt_uint32_t flatency = 0; + RCC_ClkInitTypeDef RCC_ClkInitStruct = {0}; + + RT_ASSERT(pclk1_doubler != RT_NULL); + RT_ASSERT(pclk1_doubler != RT_NULL); + + HAL_RCC_GetClockConfig(&RCC_ClkInitStruct, &flatency); + + *pclk1_doubler = 1; + *pclk2_doubler = 1; + +#if defined(SOC_SERIES_STM32MP1) + if (RCC_ClkInitStruct.APB1_Div != RCC_APB1_DIV1) + { + *pclk1_doubler = 2; + } + if (RCC_ClkInitStruct.APB2_Div != RCC_APB2_DIV1) + { + *pclk2_doubler = 2; + } +#else + if (RCC_ClkInitStruct.APB1CLKDivider != RCC_HCLK_DIV1) + { + *pclk1_doubler = 2; + } +#if !(defined(SOC_SERIES_STM32F0) || defined(SOC_SERIES_STM32G0)) + if (RCC_ClkInitStruct.APB2CLKDivider != RCC_HCLK_DIV1) + { + *pclk2_doubler = 2; + } +#endif +#endif +} + +#ifdef BSP_USING_TIM + enum { #ifdef BSP_USING_TIM1 @@ -156,43 +192,6 @@ static struct stm32_hwtimer stm32_hwtimer_obj[] = #endif }; -/* APBx timer clocks frequency doubler state related to APB1CLKDivider value */ -static void pclkx_doubler_get(rt_uint32_t *pclk1_doubler, rt_uint32_t *pclk2_doubler) -{ - rt_uint32_t flatency = 0; - RCC_ClkInitTypeDef RCC_ClkInitStruct = {0}; - - RT_ASSERT(pclk1_doubler != RT_NULL); - RT_ASSERT(pclk1_doubler != RT_NULL); - - HAL_RCC_GetClockConfig(&RCC_ClkInitStruct, &flatency); - - *pclk1_doubler = 1; - *pclk2_doubler = 1; - -#if defined(SOC_SERIES_STM32MP1) - if (RCC_ClkInitStruct.APB1_Div != RCC_APB1_DIV1) - { - *pclk1_doubler = 2; - } - if (RCC_ClkInitStruct.APB2_Div != RCC_APB2_DIV1) - { - *pclk2_doubler = 2; - } -#else - if (RCC_ClkInitStruct.APB1CLKDivider != RCC_HCLK_DIV1) - { - *pclk1_doubler = 2; - } -#if !defined(SOC_SERIES_STM32F0) && !defined(SOC_SERIES_STM32G0) - if (RCC_ClkInitStruct.APB2CLKDivider != RCC_HCLK_DIV1) - { - *pclk2_doubler = 2; - } -#endif -#endif -} - static void timer_init(struct rt_hwtimer_device *timer, rt_uint32_t state) { uint32_t prescaler_value = 0; @@ -206,7 +205,7 @@ static void timer_init(struct rt_hwtimer_device *timer, rt_uint32_t state) tim = (TIM_HandleTypeDef *)timer->parent.user_data; tim_device = (struct stm32_hwtimer *)timer; - pclkx_doubler_get(&pclk1_doubler, &pclk2_doubler); + stm32_tim_pclkx_doubler_get(&pclk1_doubler, &pclk2_doubler); /* time init */ #if defined(SOC_SERIES_STM32F2) || defined(SOC_SERIES_STM32F4) || defined(SOC_SERIES_STM32F7) @@ -223,7 +222,7 @@ static void timer_init(struct rt_hwtimer_device *timer, rt_uint32_t state) #error "This driver has not supported this series yet!" #endif { -#if !defined(SOC_SERIES_STM32F0) && !defined(SOC_SERIES_STM32G0) +#if !(defined(SOC_SERIES_STM32F0) || defined(SOC_SERIES_STM32G0)) prescaler_value = (uint32_t)(HAL_RCC_GetPCLK2Freq() * pclk2_doubler / 10000) - 1; #endif } @@ -339,7 +338,7 @@ static rt_err_t timer_ctrl(rt_hwtimer_t *timer, rt_uint32_t cmd, void *arg) /* set timer frequence */ freq = *((rt_uint32_t *)arg); - pclkx_doubler_get(&pclk1_doubler, &pclk2_doubler); + stm32_tim_pclkx_doubler_get(&pclk1_doubler, &pclk2_doubler); #if defined(SOC_SERIES_STM32F2) || defined(SOC_SERIES_STM32F4) || defined(SOC_SERIES_STM32F7) if (tim->Instance == TIM9 || tim->Instance == TIM10 || tim->Instance == TIM11) @@ -351,6 +350,8 @@ static rt_err_t timer_ctrl(rt_hwtimer_t *timer, rt_uint32_t cmd, void *arg) if(tim->Instance == TIM14 || tim->Instance == TIM16 || tim->Instance == TIM17) #elif defined(SOC_SERIES_STM32F1) || defined(SOC_SERIES_STM32F0) || defined(SOC_SERIES_STM32G0) || defined(SOC_SERIES_STM32H7) if (0) +#else +#error "This driver has not supported this series yet!" #endif { #if !defined(SOC_SERIES_STM32F0) && !defined(SOC_SERIES_STM32G0) @@ -619,5 +620,4 @@ static int stm32_hwtimer_init(void) } INIT_BOARD_EXPORT(stm32_hwtimer_init); -#endif /* RT_USING_HWTIMER */ #endif /* BSP_USING_TIM */ diff --git a/bsp/stm32/libraries/HAL_Drivers/drv_tim.h b/bsp/stm32/libraries/HAL_Drivers/drv_tim.h new file mode 100644 index 0000000000..5b1d0c1796 --- /dev/null +++ b/bsp/stm32/libraries/HAL_Drivers/drv_tim.h @@ -0,0 +1,18 @@ +/* + * Copyright (c) 2006-2021, RT-Thread Development Team + * + * SPDX-License-Identifier: Apache-2.0 + * + * Change Logs: + * Date Author Notes + * 2022-11-01 Meco Man First version + */ + +#ifndef __DRV_TIM_H__ +#define __DRV_TIM_H__ + +#include + +void stm32_tim_pclkx_doubler_get(rt_uint32_t *pclk1_doubler, rt_uint32_t *pclk2_doubler); + +#endif /* __DRV_TIM_H__ */ diff --git a/bsp/stm32/libraries/HAL_Drivers/drv_usart.h b/bsp/stm32/libraries/HAL_Drivers/drv_usart.h index 7763a70683..4006f94893 100644 --- a/bsp/stm32/libraries/HAL_Drivers/drv_usart.h +++ b/bsp/stm32/libraries/HAL_Drivers/drv_usart.h @@ -5,8 +5,8 @@ * * Change Logs: * Date Author Notes - * 2018.10.30 SummerGift first version - * 2019.03.05 whj4674672 add stm32h7 + * 2018-10-30 SummerGift first version + * 2019-03-05 whj4674672 add stm32h7 * 2020-10-14 Dozingfiretruck Porting for stm32wbxx */