STM32定时器详解及简述

———————————————————中断简述————————————————————

中断简述:当一个事件A打断主事件运行时,会执行A事件,执行完A事件后回来继续执行主事件,当在执行A事件,又产生新的B事件,当B事件的优先级大于A事件则执行B事件,执行完B事件,执行A事件,再执行主事件,这就涉及到中断优先级的概念。

中断配置:当主优先级配置一样,比较次优先级,都一样则比较硬件优先级

        NVIC_PriorityGroupConfig():中断组配置,五个参数        

                NVIC_PriorityGroup_0:0位主优先级,4位次优先级 

                NVIC_PriorityGroup_1:1位主优先级,3位次优先级 

                NVIC_PriorityGroup_2:2位主优先级,2位次优先级                         

                NVIC_PriorityGroup_3:3位主优先级,1位次优先级 

                NVIC_PriorityGroup_4:4位主优先级,0位次优先级 

        NVIC_IRQChannel:中断来源

        NVIC_IRQChannelPreemptionPriority:配置主优先级

        NVIC_IRQChannelSubPriority:配置次优先级

——————————————————基本定时器————————————————————

1.基本定时器时钟源:定时器时钟 TIMxCLK,即内部时钟 CK_INT,经 APB1 预分频器后分频提供,如果 APB1 预分频系数等于 1,则频率不变,否则频率乘以 2,库函数中 APB1 预分频的系 数是 2,即 PCLK1=36M,所以定时器时钟 TIMxCLK=36*2=72M。

 2.计数器时钟:时钟源产生的定时器时钟可以再经过PSC预分频器后产生新的计数器时钟,PSC是一个十六位的预分频器,可以对定时器时钟进行1~65536之间的任何一个数进行分频,PSC系统自动加一。计算方式为:计数器时钟=定时器时钟/(预分频器数+1)。

3.计数器:计数器CNT是一个16位的计数器,只能向上数,最大计算值为65535,当达到自动重装载寄存器的时候会产生更新事件,并且从零开始。

4.自动重装载寄存器:自动重装载寄存器 ARR 是一个 16 位的寄存器,这里面装着计数器能计数的最大数值。当计数到这个值的时候,如果使能了中断的话,定时器就产生溢出中断(计数器和自动重装载寄存器是一个东西,一个是表达能计最大的值,一个是表达在最大值内,计算多少次会产生中断)。

5.定时计算公式:计数一次的时间为T=1/f,时间=频率分之一,计数1000次的时间为T=(1/f)*1000

计数器时钟  = 定时器时钟/预分频器值,计数一次时间=1/计数器时钟,计数1000次的时间为T=(1/计数器时钟)*自动重载寄存器的值 = ((预分频器值+1)*自(动重装载寄存器值+1))/定时器时钟。(加一均为系统固定)

6.配置参数:

        TIM_Prescaler(预分频器值)                                        TIM_Period(自动重装载寄存器值)

7.配置1ms举例:

        假设基本定时器时钟为72M,TIM_Prescaler = 71,TIM_Period = 999。

        T = {(71+1)*(999+1)}/72M = 1000/1M = 0.001s = 1ms。发

——————————————————高级定时器————————————————————

0.高级定时器概述:高级定时器和通用定时器在基本定时器的基础上增加了上引入了外部引脚,可以实现输入捕获和输出比较功能。高级控制定时器比通用定时器增加了可编程死区互补 输出、重复计数器、带刹车(断路)功能。 高级控制定时器时基单元包含一个 16 位自动重装载寄存器 ARR,一个 16 位的计数器CNT可向上/下计数,一个 16 位可编程预分频器 PSC,预分频器时钟源有多种可选,有 内部的时钟、外部时钟。还有一个 8 位的重复计数器 RCR,这样最高可实现 40 位的可编 程定时。

1.1时钟源(四种时钟源):

        A.内部时钟源 CK_INTB.

        B.外部时钟模式 1:外部输入引脚 TIx(x=1,2,3,4)

        C.外部时钟模式 2:外部触发输入 ETR

        D.内部触发输入(ITRx)

       

        A.内部时钟源 CK_INTB: 

        内部时钟 CK_INT 即来自于芯片内部,等于 72M,一般情况下,我们都是使用内部时 钟。当从模式控制寄存器 TIMx_SMCR 的 SMS 位等于 000 时,则使用内部时钟。

         B.外部时钟模式 1:外部输入引脚 TIx(x=1,2,3,4):

                 1.时钟信号输入引脚 :当使用外部时钟模式 1 的时候,时钟信号来自于定时器的输入通道,总共有 4 个,分 别为 TI1/2/3/4,即 TIMx_CH1/2/3/4。具体使用哪一路信号,由TIM_CCMRx 的位 CCxS[1:0]配置,其中 CCMR1 控制 TI1/2,CCMR2 控制 TI3/4。

 

                 2.滤波器:如果来自外部的时钟信号的频率过高或者混杂有高频干扰信号的话,我们就需要使用 滤波器对信号重新采样,来达到降频或者去除高频干扰的目。

                 3.边缘检测:边沿检测的信号来自于滤波器的输出,在成为触发信号之前,需要进行边沿检测,决 定是上升沿有效还是下降沿有效。

                4.触发选择:当使用外部时钟模式 1 时,触发源有两个,一个是滤波后的定时器输入 1(TI1FP1) 和滤波后的定时器输入 2(TI2FP2)。

                5.从模式选择:选定了触发源信号后,最后我们需把信号连接到 TRGI 引脚,让触发信号成为外部时 钟模式 1 的输入,最终等于 CK_PSC。

        C.外部时钟模式 2:外部触发输入 ETR

                1.时钟信号输入引脚:当使用外部时钟模式 2 的时候,时钟信号来自于定时器的特定输入通道 TIMx_ETR, 只有 1 个。

                2.外部触发极性:来自 ETR 引脚输入的信号可以选择为上升沿或者下降沿有效。

                3.外部触发预分频器:由于 ETRP 的信号的频率不能超过 TIMx_CLK(72M)的 1/4,当触发信号的频率很高的情况下,就必须使用分频器来降频。

                 4.滤波器:如果来自外部的时钟信号的频率过高或者混杂有高频干扰信号的话,我们就需要使用 滤波器对信号重新采样,来达到降频或者去除高频干扰的目。

                5.从模式选择:经过滤波器滤波的信号连接到 ETRF 引脚后,触发信号成为外部时钟模式 2 的输入, 最终等于 CK_PSC,然后驱动计数器 CNT 计数。

        D.内部触发输入(ITRx) :内部触发输入是使用一个定时器作为另一个定时器的预分频器。硬件上高级控制定时 器和通用定时器在内部连接在一起,可以实现定时器同步或级联。主模式的定时器可以对 从模式定时器执行复位、启动、停止或提供时钟。

1.2.控制器:高级控制定时器控制器部分包括触发控制器、从模式控制器以及编码器接口。触发控 制器用来针对片内外设输出触发信号,比如为其它定时器提供时钟和触发 DAC/ADC 转换。 编码器接口专门针对编码器计数而设计。从模式控制器可以控制计数器复位、启动、递增/ 递减、计数。

1.3.时基单元:高级控制定时器时基单元功能包括四个寄存器,分别是计数器寄存器(CNT)、预分频 器寄存器(PSC)、自动重载寄存器(ARR)和重复计数器寄存器(RCR)。其中重复计数器 RCR 是高级定时器独有,通用和基本定时器没有。

         1.预分频器PCS: 时钟源出来的时钟再经过预分频器(分频系数为1~65535+1),再出来得到真实的计数器时钟。

        2.计数器CNT:

                递增计数模式:计数器从0开始,每来一个时钟脉冲计数值加1,直到和自动重载计数器ARR值相等,产生溢出,然后又重0开始计数,如果禁止了重复计数器REP,则立马产生中断,如果使能了重复计数器REP,每产生一次溢出事件,重复计数器REP值减1,直到为0才产生中断事件。

                递减计数模式:和递增类似,向下递减才会产生溢出,计数器从自动重载寄存器 ARR 值开始递减,直到计数器为0。

                中心对齐模式下:递增和递减结合,递增到一定次数ARR的值产生溢出,再从ARR的值递减到0,每次发生计数器上溢和下溢事件都会生成更新事件。

        3.自动重装载寄存器ARR:自动重载寄存器 ARR 用来存放与计数器 CNT 比较的值,如果两个值相等就递减重复 计数器。

        4.重复计数器 RCR:高级定时器独有的,其他产生溢出就产生中断,在高级定时器每当有一个溢出事件,就会递减重复计数器,当减少到0才会溢出产生中断,相当于一个溢出的计数。

1.4.输入捕获:输入捕获可以对输入的信号的上升沿,下降沿或者双边沿进行捕获,常用的有测量输 入信号的脉宽和测量 PWM 输入信号的频率和占空比这两种。原理就是把两次发生跳变的时间CNT保存在捕获寄存器CCR中,把两个数相减就能等到脉宽或者频率。

        1.输入通道:需要被捕获的信号从定时器的外部引脚进入。

        2.输入滤波器和边沿检测器 :对输入信号进行高频滤波,即重新采样,根据采样定律,采样的频率必须大于输入频率的两倍。以保证再采到有效频率范围内高于两倍的将被过滤掉。

        3.捕获通道:用来测量脉宽和频率,就是捕捉输入通道发生跳变的信号,用来储存他们跳变的计数器CNT值。

        4.预分频器:ICx 的输出信号会经过一个预分频器,用于决定发生多少个事件时进行一次捕获。

        5.捕获寄存器:经过预分频器的信号 ICxPS 是最终被捕获的信号,捕获寄存器就是保存,捕获通道捕获输入信号发生跳变时,计数器CNT的值。

1.5.输出比较:输出比较就是通过定时器的外部引脚对外输出控制信号。

 

        1.比较寄存器:当计数器 CNT 的值跟比较寄存器 CCR 的值相等的时候,输出参考信号 OCxREF 的信号,然后 OCxREF 再经过一系列的控制之后就成为真正的输出信号 OCx/OCxN。

        2.死区发生器:在生成的参考波形 OCxREF 的基础上,可以插入死区时间,用于生成两路互补的输出信号 OCx 和 OCxN,死区时间就是元件的特性,mos管开通或者关闭需要时间反应,插入死区时间用来弥补这个时间差。

        3.输出控制:参考信号 OCxREF 在经过死区发生器之后会产生两路带死区的互补信号 OCx_DT 和 OCxN_DT这两路带死区的互补信号然后就进入输出控制电路,如果没有加入死区控制,那么进入输出控制电路的信号就直接是 OCxREF。进入输出控制电路的信号会被分成两路,一路是原始信号,一路是被反向的信号。

         4.输出引脚:输出的比较信号最终由定时器的外部IO输出。

1.6.断路功能:控制输出信号开或停,断路源可以是时钟故障事件,由内部复位时钟控制器中的时钟安全系统(CSS)生成,也可以是外部断路输入 IO。

2.输出PWM占空比计算:    当psc为0时,即不分频。则ccr/arr就等于占空比例如psc=0,arr=1000,责当ccr等于500时候占空比等于50%。
   

  • 3
    点赞
  • 46
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值