stm32定时器基本知识

目录

1. 基本定时器

2.通用定时器

3.定时中断和内外时钟源选择


1. 基本定时器

       来自RCC的TIMxCLK为72MHz,若PSC预分频寄存器写0,即不分频,或者1分频,写2,即二分频。实际分频系数=预分频器的值+1。这个预分频器为16位,所以最大值可以写65535,也就是65536分频。CNT计数器在时钟的每个上升沿加1,计数器也是16位,计数值可以从0加到65535,再加就回到0。计数器一直自增,直到自增运行到目标值,产生中断,完成了定时的任务。自动重装寄存器也是16位,存入的就是我们的技术目标。UI上升箭头代表会产生中断信号,计数值=重装值产生的中断叫做“更新中断”,这个更新中断之后会通往NVIC,我们再配置好NVIC的定时器通道,那定时器的更新中断就能得到CPU的响应了。U向下箭头,代表会产生一个事件,对应的事件为“更新事件”,更新事件不会触发中断,但可以触发内部其他电路的工作。

       主模式触发DAC的功能可以大大减小CPU的工作量,DAC过程是每隔一段时间触发一次DAC,让它输出下一个电压点,如果使用中断,会使主程序处于频繁被中断的状态,这会影响主程序的运行和其他中断的响应。使用主模式触发DAC可以把更新时间映射到触发输出TRGO的位置,然后TRGO直接接到DAC的触发转换引脚。整个过程不需要软件的参与,实现了硬件的自动化。

2.通用定时器

 

      通用定时器和高级定时器除了支持向上计数,还支持向下计数和中央对齐模式。向下计数就是从重装值开始自减,减到0后,回到重装值并触发中断。中央对齐模式就是从0计到重装值,申请中断,再从重装值自减到0,申请中断。

类型

编号

总线

功能

高级定时器

TIM1TIM8

APB2

拥有通用定时器全部功能,并额外具有重复计数器、死区生成、互补输出、刹车输入等功能

通用定时器

TIM2TIM3TIM4TIM5

APB1

拥有基本定时器全部功能,并额外具有内外时钟源选择、输入捕获、输出比较、编码器接口、主从触发模式等功能

基本定时器

TIM6TIM7

APB1

拥有定时中断、主模式触发DAC的功能

3.定时中断和内外时钟源选择

      中断信号会在中断状态寄存器置一个中断标志位,这个标志位会通过中断输出控制,到NVIC申请中断。中断输出控制就是中断信号的允许位。预分频器有缓冲器,重新写入的值会在中断事件发生后生效

第一步:RCC开启时钟,定时器的基准时钟和整个外设的工作时钟就会同时打开了。

第二步:选择时基单元的时钟源,对于定时中断,选择内部时钟源(可省,因为系统上电后,默认打开内部时钟,如果使用外部时钟,系统也是会先打开内部时钟,等待外部时钟稳定后,再切换为外部时钟)。

第三步:配置时基单元。

第四步:配置输出中断控制TIM_ITConfig()(比如很多中断事件,配置使能不使能更新中断事件),允许更新中断输出到NVIC。

第五步:配置NVIC,在NVIC中打开定时器中断的通道,并分配一个优先级。

第六步:运行控制,TIM_Cmd()(使能计数器)。当定时器使能后,计数器就会开始计数了,当计数器更新时,触发中断,最后再写一个定时器的中断函数,这样中断函数每隔一段时间就能自动执行一次了。

      程序一上电就立刻进中断原因:在TIM_TimeBaseStructInit()中最后一句表明调用时基单元配置函数会生成一个更新事件,来重新装载与分配器和重复计数器的值,使预分频器的值立刻有效(因为预分频器有缓冲器的存在,写入值只有在更新事件时,才会真正起作用)。 副作用是更新事件和更新中断是同时发生的,初始化后立即进中断。

     解决方法在该初始化函数后,开启中断前,加入清除中断标志位函数。

  • 26
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值