From f60f4525f77f0ef766ccf033304b844a2b74e6f5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9E=97=E6=B0=B8?= <42107741+ynkan@users.noreply.github.com> Date: Thu, 27 Aug 2020 15:22:15 +0800 Subject: [PATCH] Update drv_hwtimer.c MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 新增函数 pclkx_doubler_get 用于获取定时器时钟倍频状态 --- bsp/stm32/libraries/HAL_Drivers/drv_hwtimer.c | 54 ++++++++++--------- 1 file changed, 28 insertions(+), 26 deletions(-) diff --git a/bsp/stm32/libraries/HAL_Drivers/drv_hwtimer.c b/bsp/stm32/libraries/HAL_Drivers/drv_hwtimer.c index ea7663377b..b1a39ed31e 100644 --- a/bsp/stm32/libraries/HAL_Drivers/drv_hwtimer.c +++ b/bsp/stm32/libraries/HAL_Drivers/drv_hwtimer.c @@ -153,9 +153,34 @@ static struct stm32_hwtimer stm32_hwtimer_obj[] = #endif }; +static void pclkx_doubler_get(uint32_t *pclk1_doubler, uint32_t *pclk2_doubler) +{ + uint32_t flatency = 0; + RCC_ClkInitTypeDef RCC_ClkInitStruct; + + 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(RCC_ClkInitStruct.APB1CLKDivider != RCC_HCLK_DIV1) + { + *pclk1_doubler = 2; + } + + if(RCC_ClkInitStruct.APB2CLKDivider != RCC_HCLK_DIV1) + { + *pclk2_doubler = 2; + } +} + static void timer_init(struct rt_hwtimer_device *timer, rt_uint32_t state) { uint32_t prescaler_value = 0; + uint32_t pclk1_doubler, pclk2_doubler; TIM_HandleTypeDef *tim = RT_NULL; struct stm32_hwtimer *tim_device = RT_NULL; @@ -165,19 +190,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; - uint32_t FLatency = 0; - RCC_ClkInitTypeDef RCC_ClkInitStruct; - HAL_RCC_GetClockConfig(&RCC_ClkInitStruct, &FLatency); - uint32_t pclk1_doubler = 1; - uint32_t pclk2_doubler = 1; - if(RCC_ClkInitStruct.APB1CLKDivider != RCC_HCLK_DIV1) - { - pclk1_doubler = pclk1_doubler + 1; - } - if(RCC_ClkInitStruct.APB2CLKDivider != RCC_HCLK_DIV1) - { - pclk2_doubler = pclk2_doubler + 1; - } + pclkx_doubler_get(&pclk1_doubler, &pclk2_doubler); /* time init */ #if defined(SOC_SERIES_STM32F2) || defined(SOC_SERIES_STM32F4) || defined(SOC_SERIES_STM32F7) @@ -289,6 +302,7 @@ static rt_err_t timer_ctrl(rt_hwtimer_t *timer, rt_uint32_t cmd, void *arg) { TIM_HandleTypeDef *tim = RT_NULL; rt_err_t result = RT_EOK; + uint32_t pclk1_doubler, pclk2_doubler; RT_ASSERT(timer != RT_NULL); RT_ASSERT(arg != RT_NULL); @@ -305,19 +319,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); - uint32_t FLatency = 0; - RCC_ClkInitTypeDef RCC_ClkInitStruct; - HAL_RCC_GetClockConfig(&RCC_ClkInitStruct, &FLatency); - uint32_t pclk1_doubler = 1; - uint32_t pclk2_doubler = 1; - if(RCC_ClkInitStruct.APB1CLKDivider != RCC_HCLK_DIV1) - { - pclk1_doubler = pclk1_doubler + 1; - } - if(RCC_ClkInitStruct.APB2CLKDivider != RCC_HCLK_DIV1) - { - pclk2_doubler = pclk2_doubler + 1; - } + 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)