STM32F103浅学通用定时器TIMx(2-5)

前言

  • 定时器,字面意思——能够计时的工具,51的时候已经初步学过,当然了,32也有定时器,功能相对来说比51的更完善,高级。

系统架构

        F103是大容量产品 因此通过系统架构图,我们可以知道TIMx处于不同的总线桥。TIM(2-7)在APB1(36MHz),TIM(1,8)在APB2(72MHz),那么可知TIM(1,8)比较特殊,不跟其他定时器在一起。那么就先了解一下,定时器之间的功能区别。

4196ecafb6a84d7685d5b3b99e4dee1b.png

定时器类型的基本介绍:

        stm32F103一共有8个定时器,分为三种类型。分别为高级定时器(TIM1,TIM8),通用定时器(TIM2-TIM5),普通定时器(TIM6,TIM7),更高级的定时器继承了低级定时器的所有功能,手册中有他们的功能区别。

787c402364ef463fa4aee6e000421233.png

 浅讲一下相关功能概念:

       计数模式:

                计数位数都是16位的定时器,但计数器模式有区别,高级与通用定时器模式相同且比普通定时器多。

                up,down :可以理解为0 --> x, x --> 0,x代表的是你设置在自动重装载寄存器的值,这个寄存器后面会提到。

                up/down:中央对齐模式(1,2,3),计数器从0开始计数到自动装入的值-1,产生一个计数器溢出事件,然后向下计数到1并且产生一个计数器溢出事件;然后再从0开始重新计数。

                而他们的小弟普通定时器功能就只能up 向上计数。

                当然了这只是F103这块,其他系列的TIMx相关功能不同。

        预分频系数:

                  三种预分频系数都为1-65536,对频率进行分频处理,这预分频系数后面也会提到,我们先知道有这个。

        DMA请求:

                 DMA我的理解是,CPU的小助手,我们都知道CPU无时无刻都在处理任务,但有些事情并不是很重要或者很简单,这时候小助手DMA就出现了,她可以帮助CPU处理事务,例如数据的复制啥的,实现了数据的直接传输,省略了经过CPU参与。

         捕获/比较通道:

                 捕获就是可以检测通道的边缘信号跳变(上升沿/下降沿)将当前定时器的(TIMx_CNT)存放到对应的通道的捕获/比较寄存器(TIMx_CCR)里面,完成一次捕获。测PWM的输入时,就可以先测下降沿,为t1,测到后,将CNT清零,且设置为上升沿捕获,因此当下一次上升沿时,为t2,(t2-t1) 就可以测出为低电平的时间。

                比较就是计数器的值与转载的值比较,我们可以用这个来输出一个PWM,假设定时器是向上计数,当CNT<CCRx时输出0,当CNT>=CCRx输出1。这样我们就可以改变PWM的占空比。当然了CCRx的值要小于ARR(计数器自动重装值),不然还没到CCRx就清零了。

        互补输出:

                输出上具备NPN和PNP两种输出晶体管的输出电路。高级定时器有互补输出,通用与普通定时器没有。


时钟   

    了解完三种定时器的区别后,就迈向下一步,了解定时器相关时钟控制。首先我们先查询手册,查看一下时钟树。

b82242b3f31f4bf585ca1f1ec0d116a5.png

         饭要一口一口吃,女孩子要一步一步追,所以学习得一步一步来。先学习定时器相关部分。

1ad98967a6c64639aa66fdc672cdbea9.png

         AHB总线架构配置成72MHz,经过AHB预分频器后,APB1和APB2的源头就是72MHz了。然后就到APB1预分频器,看树可知APB1最大也就36MHz,因此APB1预分频器最小值为“2”,这是输入到APB1其他外设上面的时钟源。定时器:处于预分频器后面,连在APB1预分频器下面。注意看分频器下面那个框框,“如果预分频器系数=1,频率不变,否则频率x2”,由此可知到输入到定时器的TIMxCLK频率为72MHz。(定时器2-7)41d615d986d9465dbdff31158a84feae.png        

         APB2最大为72MHz,因此APB2预分频器可以设置为1,因为设置为1的话,就不用×2了,直接就是72MHz输入到TIMxCLK.(定时器1,8)。由此所有定时器的TIMxCLK相同,也就是内部时钟都为72MHz。知道这内部时钟后,就拿到了钥匙进入定时器框架。

通用定时器框架

        此关卡以通用定时器框架为主,在前期学习先了解到时基及以上部分。

9df6f1c4d83341ec89f67f71e799c8d2.png

        通过开局的学习,知道了CK_INT内部时钟为72MHz,经过触发控制器时,设置复位,使能,向上还是向下计数模式,在没有对时钟进行分频处理后,那么它出来后,CK_PSC还是为72MHz ,出来后就得经过PSC预分频器,将改变时钟频率了。

预分频器寄存器

        那么PSC预分频器的大小就由寄存器的值来决定。e3c6528328fc4d068254dabdd001e13f.png

         寄存器有16位,2^16 = 65536,但因为是二进制所以取值范围是0-65535,但预分频器的值是分母,分母不能为0,因此每一次设置预分频器的值后,还需加1。例如:设置为71,那么CK_CNT=72MHz/(71+1)= 1MHz,然后时间t = 1/f,因此 t = 1/1MHz = 1μs。

CNT计数器寄存器      

          经过PSC预分频器后,就来到CNT计数器,这个就比较简单通过CK_CNT时钟线的频率,来计算当前值,比如当预分频器设置为71后,1μs后计数器将会+1。

自动重装载寄存器

        838d3d9556404289ae8b730707f6c003.png

         设置上文提到的上限值(X),这个值大小范围0-65535。如果设置为0,计数器不工作。如果达到上限值时,表示定时完成,产生一个中断服务函数。那么就可以在中断服务函数里面处理相应任务了。

        总结一下,通用定时器的基本工作流程。首先在预分频器(TIMx_PSC)设置值,将时钟进行分频,后在自动重转载寄存器设置上限值(TIMx_ARR) X,后以时钟频率CNT计数器每次加1,到达自动重转载设的值后进入中断服务函数干活,嘿嘿!

        以上便是最基础的定时器功能,实现计时的效果从而产生函数来实现相应功能。前面提到捕获/比较通道便是后面的学习内容,他将用于PWM的输入与输出,这次就先提前了解一下。

5fcfc6aa4d37434eb914b081021a1180.png

         TIMx_CH(1-4)对应的是相应的通用和高级定时器的引脚,在引脚图当中,我们可以找到相对应的引脚然后配置输入捕获,我们就可以捕获到脉冲的宽度。

         将引脚配置为输入模式后,通过引脚的输入,在边沿检测器下可以捕获到一个脉冲的边沿(上升沿或下降沿),自动重转载器设置一个上限值后,cnt就从0——上限值变化,因此,当测到后(假设下降沿)CNT计数器里面的值 t1 会存放到捕获/比较寄存器。当我们捕获到边沿时,便会产生一个中断,这时我们可以在中断服务函数里面,设置边沿检测器为上升沿捕获,当脉冲上升沿时,捕获时间值t2 ,这时我们用t2 - t1 便可以得到脉冲的低电平脉宽时间。

        输入功能了解完后,就了解输出功能。

        9bfb505b656f4b2aab8fa48ad5f96b31.png

         输出引脚是和输入引脚一样的,GPIO嘛可输入/输出。将引脚配置为输出模式后,在捕获/比较寄存器写入一个值 Z 处于0-X(自动重装载寄存器里写的值),因此,将计数范围分为2个阶段,0 - Z,Z - X。通过捕获/比较寄存器可以将输出模式可配置成6种模式,以PWM1模式讲解,在0 - Z这个阶段,我们可以理解成处于有效阶段,PWM1模式呢,处于有效阶段为输出高电平,Z - X为无效阶段配置为0。PWM2模式就相反,有效阶段为低电平,无效阶段为高电平。这样我们就可以输出一个我们想要的脉宽。


总结

        以上便最基本的通用定时器的相关知识,我主要是以标准固件库来学习的,通过相应的固件库函数,来配置定时器相应的功能,达到计时的效果。

         

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值