未验证 提交 f60f4525 编写于 作者: 林永 提交者: GitHub

Update drv_hwtimer.c

新增函数 pclkx_doubler_get 用于获取定时器时钟倍频状态
上级 5121b8da
......@@ -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)
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册