stm32f103 hal库中timer使用
- 使用步骤
- 1.初始化定时器
- 2.HAL_TIM_Base_Init(&htim2)基本参数配置
- 3.重写void HAL_TIM_Base_MspInit(TIM_HandleTypeDef* tim_baseHandle)函数
- 4.中断函数的重写
- 5.如果想用溢出回调
- 6.启动定时器
- 7.整个代码
使用步骤
1.初始化定时器
tim.Instance = TIM2;
tim.Init.Period = 1000-1;
tim.Init.Prescaler = (uint32_t)((SystemCoreClock / 1000) - 1);
tim.Init.ClockDivision = 0;
tim.Init.CounterMode = TIM_COUNTERMODE_UP;
tim.Init.RepetitionCounter = 0;
tim.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_DISABLE;
2.HAL_TIM_Base_Init(&htim2)基本参数配置
HAL_TIM_Base_Init(&htim2);
3.重写void HAL_TIM_Base_MspInit(TIM_HandleTypeDef* tim_baseHandle)函数
在函数中我们需要使能timer的时钟、设置固定中断优先级和中断使能(此函数在2.HAL_TIM_Base_Init中调用)
注意:打开对应的时钟使能,我用的是TIM2
void HAL_TIM_Base_MspInit(TIM_HandleTypeDef* tim_baseHandle)
{
if(tim_baseHandle->Instance==TIM2)
{
__HAL_RCC_TIM2_CLK_ENABLE();
HAL_NVIC_SetPriority(TIM2_IRQn, 0, 0);
HAL_NVIC_EnableIRQ(TIM2_IRQn);
}
}
4.中断函数的重写
void TIM2_IRQHandler(void)
{
HAL_GPIO_TogglePin(GPIOB,GPIO_PIN_8);
HAL_TIM_IRQHandler(&tim);
}
5.如果想用溢出回调
void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)
{
}
6.启动定时器
编写到这里基本已经完成配置,接下来要启动定时器,定时器才能运行(不可以没有这一步)
HAL_TIM_Base_Start_IT(&tim);
7.整个代码
static TIM_HandleTypeDef tim;
void TIM_Init(void)
{
tim.Instance = TIM2;
tim.Init.Period = 1000-1;
tim.Init.Prescaler = (uint32_t)((SystemCoreClock / 1000) - 1);
tim.Init.ClockDivision = 0;
tim.Init.CounterMode = TIM_COUNTERMODE_UP;
tim.Init.RepetitionCounter = 0;
tim.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_DISABLE;
HAL_TIM_Base_Init(&tim);
HAL_TIM_Base_Start_IT(&tim);
}
void HAL_TIM_Base_MspInit(TIM_HandleTypeDef* tim_baseHandle)
{
if(tim_baseHandle->Instance==TIM2)
{
__HAL_RCC_TIM2_CLK_ENABLE();
HAL_NVIC_SetPriority(TIM2_IRQn, 0, 0);
HAL_NVIC_EnableIRQ(TIM2_IRQn);
}
}
void TIM2_IRQHandler(void)
{
HAL_GPIO_TogglePin(GPIOB,GPIO_PIN_8);
HAL_TIM_IRQHandler(&tim);
}
void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)
{
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)