定时器计时时间计算
16位计数器:可记2的16次方为65536个数
预分频器:16位,接收到n的方波输出一个方波,最多接收65536个方波输出一个方波
自动重装寄存器:存储目标计数值
72MHz晶振:1s输出72000000个方波
最高的计时时间:65536*65536/72000000=59.65s
定时中断代码
1、初始化
void Timer_Init(void)
{
RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2, ENABLE);//开启TIM2(在APB1总线)的时钟
TIM_InternalClockConfig(TIM2);//选择内部时钟
TIM_TimeBaseInitTypeDef TIM_TimeBaseInitStructure;//时基单元结构体
TIM_TimeBaseInitStructure.TIM_ClockDivision = TIM_CKD_DIV1;//滤波分频参数
TIM_TimeBaseInitStructure.TIM_CounterMode = TIM_CounterMode_Up;//计数模式
TIM_TimeBaseInitStructure.TIM_Period = 10000-1;//自动重装寄存器(目标值)ARR
TIM_TimeBaseInitStructure.TIM_Prescaler = 7200-1;//预分频器PSC
TIM_TimeBaseInitStructure.TIM_RepetitionCounter = 0;//重复计数器
//计时频率 = CK(72Mhz)/(PSC+1)/(ARR+1)
TIM_TimeBaseInit(TIM2, &TIM_TimeBaseInitStructure);
TIM_ClearFlag(TIM2, TIM_FLAG_Update);//清除标志位
TIM_ITConfig(TIM2, TIM_IT_Update, ENABLE);//使能中断
//配置NVIC
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);//优先级分组
NVIC_InitTypeDef NVIC_InitStructure;
NVIC_InitStructure.NVIC_IRQChannel = TIM2_IRQn;//通道
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;//使能
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1;//抢占优先级
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1;//相应优先级
NVIC_Init(&NVIC_InitStructure);
TIM_Cmd(TIM2, ENABLE);//定时启动
}
2、中断函数
void TIM2_IRQHandler(void)
{
}