1.使能时钟 定时器时钟
2.配置定时器结构体、使能
3.开启定时器中断,配置中断结构体
配置例子
#include "tim.h" #include "stm32f10x.h"
void tim_config(void) { TIM_TimeBaseInitTypeDef ?TIMinitStructure;//定时器结构体 ?? ?NVIC_InitTypeDef ? ?NVICinitStructure;//内核中断结构体 ? NVIC_PriorityGroupConfig(NVIC_PriorityGroup_1);//中断优先组函数 ?RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2, ENABLE);//使能定时器时钟
?? ?TIMinitStructure.TIM_ClockDivision = TIM_CKD_DIV1;//初始化预分频值 ?? ?TIMinitStructure.TIM_CounterMode = TIM_CounterMode_Up;//计数模式 ?? ?TIMinitStructure.TIM_Period = 10000-1;//自动重装载值(ARR-1) ?? ?TIMinitStructure.TIM_Prescaler = 7200-1;//预分频系数(PSC-1)
?? ?TIM_TimeBaseInit(TIM2,&TIMinitStructure);//定时器初始化 ?? ?TIM_ITConfig(TIM2, TIM_IT_Update, ENABLE);//定时器中断配置使能
? TIM_Cmd(TIM2,ENABLE);//定时器使能 ?? ? ? ?NVICinitStructure.NVIC_IRQChannel = TIM2_IRQn; ?? ?NVICinitStructure.NVIC_IRQChannelCmd = ENABLE; ?? ?NVICinitStructure.NVIC_IRQChannelPreemptionPriority = 1; ?? ?NVICinitStructure.NVIC_IRQChannelSubPriority = 1; ?? ? ? NVIC_Init(&NVICinitStructure);
}
4.中断服务函数(启动文件里)
例子:LED定时每秒亮灭一次
?
计算定时器配置多久中断一次
Tout = [重装载值(ARR+1)*分屏系数(psc+1)]/TDK(定时器时钟)
|