STM32F1笔记(九)通用定时器

STM32F1的定时器分为TIME1/8等高级定时器,TIME2~5等通用定时器,TIME6/7基本定时器。三者的区别主要参考《STM32中文参考手册》里特性的每种定时器主要特性的异同。

先看中文手册中通用定时器的简介:

STM32F1笔记(九)通用定时器_第1张图片

 

通用定时器的寄存器有一个比较有趣的地方。

STM32F1笔记(九)通用定时器_第2张图片

该寄存器在物理上实际对应着2个寄存器。

一个是程序员可以直接操作的,另外一个是程序员看不到的。

看不到的寄存器叫做影子寄存器,事实上真正起作用的是影子寄存器。

根据TIMx_CR1寄存器中APRE位的设置:APRE=0时,预装载寄存器的内容可以随时传送到影子寄存器,此时2者是连通的;而APRE=1时,在每一次更新事件(UEV)时,才把预装在寄存器的内容传送到影子寄存器。

STM32F1笔记(九)通用定时器_第3张图片

 

 

通用定时器配置示例:

void TIM3_Int_Init(u16 period,u16 prescaler)
{
    TIM_TimeBaseInitTypeDef  TIM_TimeBaseStructure;
    NVIC_InitTypeDef NVIC_InitStructure;

    RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3, ENABLE);
	
    TIM_TimeBaseStructure.TIM_Period = period;	
    TIM_TimeBaseStructure.TIM_Prescaler = prescaler;
    TIM_TimeBaseStructure.TIM_ClockDivision = TIM_CKD_DIV1;
    TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;
    TIM_TimeBaseInit(TIM3, &TIM_TimeBaseStructure);
 
    TIM_ITConfig(TIM3,TIM_IT_Update, ENABLE);

    NVIC_InitStructure.NVIC_IRQChannel = TIM3_IRQn;
    NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;
    NVIC_InitStructure.NVIC_IRQChannelSubPriority = 3;
    NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
    NVIC_Init(&NVIC_InitStructure);

    TIM_Cmd(TIM3, ENABLE);		 
}
TIM3_Int_Init(9,7199);//1ms

定时器时间计算:T=(1+period) /((1+prescaler)/72000000) = (1+9) / ((1+7199)/72000000) = 0.001s = 1ms。

 

定时器中断服务函数示例:

void TIM3_IRQHandler(void)
{
    if (TIM_GetITStatus(TIM3, TIM_IT_Update) != RESET)
    {
        TIM_ClearITPendingBit(TIM3, TIM_IT_Update);
    }
}

因为配置中是向上计数,所以中断内是判断向上计数中断是否发生。

你可能感兴趣的:(STM32F1)