STM32定时器

种类

有高级定时器TIM1和TIM8,通用定时器TIM2~5,基本定时器TIM6、7
对于F1系列,都是16位。高级和通用有4个捕获通道,基本定时器没有捕获通道。高级定时器可以互补输出

通用定时器

位于APB1总线上

通用定时器使用方法

定时器时钟使能

RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3,ENABLE);//定时器时钟使能

定时器初始化

TIM_TimeBaseInitTypeDef TIM_TimeBaseInitStructure;
TIM_TimeBaseInitStructure.TIM_Period=arr;//16位的预装载值
TIM_TimeBaseInitStructure.TIM_Prescaler=psc;//16位的预分频系数
TIM_TimeBaseInitStructure.TIM_CounterMode=TIM_CounterMode_Up//向上计数模式;
//TIM_TimeBaseInitStructure.TIM_ClockDivision=TIM_CKD_DIV1; //时钟分割,可以不用
TIM_TimeBaseInit(TIM3,&Tim_TimeBaseInitStructure);

使能中断

TIM_ITConfig(TIM3,TIM_IT_Update,ENABLE);//哪个定时器,哪种中断(定时器3,更新中断)

关于中断类型参考

中断优先级设置,记得要在执行下面这些代码前先设置主优先级分组NVIC_PriorityGroupConfig()

NVIC_InitTypeDef NVIC_InitStructure;
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);

通用定时器中断服务函数

    void TIM3_IRQHandler(void){
        if (TIM_GetITStatus(TIM3,TIM_IT_Update)!=RESET){//判断是不是定时器3更新中断来了
        LED=!LED;//操作
        TIM_ClearITPendingBit(TIM3,TIM_IT_Update);//手动清除定时器3的更新中断标志位
        }
    }

溢出时间Tout=(ARR+1)(PSC+1)/Tclk 其中ARR和PSC都是16位的

Tout:TIM3 溢出时间(单位为 us)

Tclk:TIM3 的输入时钟频率(单位为 Mhz)

Tclk/(psc+1):计数器的时钟频率

posted @ 2018-05-16 19:05  灰太狼的喜羊羊  阅读(365)  评论(0编辑  收藏  举报