当前位置:首页 > 嵌入式 > 玩转嵌入式
[导读]一文详解STM32定时器的分类、功能及应用。

1. STM32定时器分类
STM32定时器可以分为3类:
A)高级控制定时器TIM1和TIM8
高级定时器适合多种用途,包含输入捕获、输出比较、PWM、带死区控制的PWM等,所以可以用来做电机控制。
B)通用定时器TIM2、TIM3、TIM4、TIM5
通用定时器就是基本的定时器,同51单片机中定时器的概念。
C)基本定时器TIM6和TIM7
基本定时器可以为通用定时提供时间基准,可以为DAC提供时钟。
2. 通用定时器功能介绍

3. 通用定时器操作步骤
操作通用定时器时主要有如下几部:
A)打开定时器的时钟
定时器的时钟控制寄存器为:APB1ENR,如下:

操作方式为RCC->APB1ENR |= (1<<0);  //打开TIM2时钟
B)设置分频系数和重装值

PSC寄存器为预分频系数设置寄存器,ARR为初值装载寄存器,定时器2操作方式如下:
        TIM2->ARR     = 9;        //设置定时器重装初值
        TIM2->PSC     = 7199;   //设置预分频系数

假设定时器的运行主频为72Mhz,经过7200分频后,定时器2的主频为10000Hz,则初值为1ms的计算方式如下:
(1/10000)*T = 1ms = 0.001s
T = 0.001*10000 = 10

C)允许更新中断

该步骤通过DIER寄存器来实现,定时器2的操作方式如下:
        TIM2->DIER   |= (1<<6);
        TIM2->DIER   |= (1<<0); 
D)允许自动重装和使能定时器
该步骤通过CR1寄存器来实现,TIM2的操作方式如下:
        TIM2->CR1    |= (1<<7);
        TIM2->CR1    |= (1<<0); 
E)定时器全局中断使能
该步骤的操作方式如下:        
NVIC->ISER[0]|= (1<<28); 
ISER总共有4组,从[0]-[3],每组有32位,即从0-31,定时器的中断向量是第28位,比如外部中断10-15的中断向量为第40位,则写法如下:
NVIC->ISER[1]|= (1<<(40-32)); 
F)编写中断服务函数
定时器的中断入口函数为TIMx_IRQHandler(),TIM2操作如下:
void TIM2_IRQHandler()
{
        if((TIM2->SR&0X0001) == 1
        {
            ...
        }        
        TIM2->SR &= ~(1<<0);   
}
G)清中断标志
最后一步不要忘了,记得清中断标志。
关注微信公众号『玩转嵌入式』,后台回复“128”获取干货资料汇总,回复“520”了解我的过去。
STM32单片机学习专题推荐:
STM32如何配置外部中断?
如何高效阅读《STM32参考手册》?大神来教你!
STM32只会用库函数,不会用寄存器,能写好程序吗?
STM32单片机外部中断配置讲解


免责声明:本文内容由21ic获得授权后发布,版权归原作者所有,本平台仅提供信息存储服务。文章仅代表作者个人观点,不代表本平台立场,如有问题,请联系我们,谢谢!

本站声明: 本文章由作者或相关机构授权发布,目的在于传递更多信息,并不代表本站赞同其观点,本站亦不保证或承诺内容真实性等。需要转载请联系该专栏作者,如若文章内容侵犯您的权益,请及时联系本站删除( 邮箱:macysun@21ic.com )。
换一批
延伸阅读
关闭