4
0
mirror of https://github.com/RT-Thread/rt-thread.git synced 2025-02-20 20:57:12 +08:00

Update drv_hwtimer.c

新增函数 pclkx_doubler_get 用于获取定时器时钟倍频状态
This commit is contained in:
林永 2020-08-27 15:22:15 +08:00 committed by GitHub
parent 5121b8da43
commit f60f4525f7
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -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)