STM32F103中的基本定时器的使用(TIM2为例)
一、配置简介
STM32中的定时器配置大同小异,每个配置时只需要改成自己想要的定时器即可(本文以TIM2为例)。
定时器简单点理解就是设定了一个值(arr:自动重装载值),从这个值向下减到零或者从零向上计数到这个值,则会产生一个中断信号,执行定时器中断服务程序。
通过自动重装载值(arr)和时钟预分频数(psc)搭配,就可以控制定时时间的长短。
配置思路:
1:NVIC配置。
2:定时器配置
3:定时器中断服务程序
4:主程序调用(主程序主需要调用 tim2_init() 函数即可启动定时器)
void tim2_init(void)
{
TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;
NVIC_InitTypeDef NVIC_InitStructure;
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2); //NVIC分组
NVIC_InitStructure.NVIC_IRQChannel = TIM2_IRQn; //IRQ通道
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0; //抢占优先级
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0; //响应优先级
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; //通道使能
NVIC_Init(&NVIC_InitStructure);
RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2, ENABLE);
TIM_TimeBaseStructure.TIM_Period = 1000-1; //设定计数器自动重装载值
TIM_TimeBaseStructure.TIM_Prescaler =(7200-1); //预分频器值
TIM_TimeBaseInit(TIM2, &TIM_TimeBaseStructure);
TIM_ITConfig(TIM2,TIM_IT_Update|TIM_IT_Trigger,ENABLE); //使能TIM中断
TIM_Cmd(TIM2, ENABLE);
}
void TIM2_IRQHandler(void)
{
if ( TIM_GetITStatus(TIM2 , TIM_IT_Update) != RESET )
{
/*
产生中断后,想要执行的动作
*/
TIM_ClearITPendingBit(TIM2, TIM_FLAG_Update);
}
}