浅谈通用定时器中断

     stm32的定时器功能十分强大,包括TIME1TIM8高级定时器,TIME2~TIME5通定时器,TIME6TIME7普通定时器,2个看门狗定时器和一个滴答定时器。作为32中菜鸟的的菜鸟,今天就只能聊聊我对通用定时器知道的二三事。

     其实无论是51还是32的定时器,其本质都是对内部时钟频率计数(定时)或者是对外部脉冲计数,区别在于内部或者外部的时钟来源不同。

     定时器的工作原理就是将要定时的值放在16位的寄存器中,每来一个脉冲(由内部或者外部时钟源提供),寄存器中的值就会减一,直到减为0为止,这样就产生了一个中断。首先我们还是先看一个公式吧 (TIME3为例)

     Tout=arr*(psc/Tclk) 

     ToutTIM3溢出时间(单位为ms

     arr:放在自动重装寄存器中的值(即放在16位寄存器中的值)

     psc:预分频系数的值(TIME3挂在APB1时钟总线上(36MHz),再经过一个倍频器,频率乘以272MHz(详见时钟树),因为72MHz的时钟频率太大,不方便长时间定时,所以就要降低时钟频率,通过预分频器PSC(为16为寄存器,故分频系数为1/65536~1psc预分频器分频之后的时钟就是TIM3的时钟了。

 

程序示例

void Timer3_Init(u16 arr,u16 psc)               //TIME3的时钟初始化函数

{

    RCC->APB1ENR|=1<<1;                   //TIME3时钟使能

    TIM3->ARR=arr;                         //设定定时器自动重装初值

    TIM3->PSC=psc;                         //设定psc分频器分频因子

    TIM3->DIER|=1<<0;                      //使能更新中断

    TIM3->DIER|=1<<6;                      //使能触发中断

TIM3->CR1|=0x01;                      //开启定时器

    MY_NVIC_Init(1,3,TIM3_IRQn,2);           //设置中断分组

}

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值