时钟周期:
时钟周期也叫振动周期或晶振周期,即晶振的单位时刻宣布的脉冲数,一般有外部的振晶发生,比方12MHZ=12×10的6次方,即每秒宣布12000000个脉冲信号,那么宣布一个脉冲的时刻便是时钟周期,也便是1/12微秒。一般也叫做体系时钟周期。是核算机中最根本的、最小的时刻单位。
在8051单片机中把一个时钟周期界说为一个节拍(用P表明),二个节拍界说为一个状况周期(用S表明)。
机器周期:
在核算机中,为了便于办理,常把一条指令的履行进程划分为若干个阶段,每一阶段完结一项作业。例如,取指令、存储器读、存储器写等,这每一项作业称为一个根本操作。完结一个根本操作所需求的时刻称为机器周期。一般状况下,一个机器周期由若干个S周期(状况周期)组成。8051系列单片机的一个机器周期同6个S周期(状况周期)组成。前面已说过一个时钟周期界说为一个节拍(用P表明),二个节拍界说为一个状况周期(用S表明),8051单片机的机器周期由6个状况周期组成,也便是说一个机器周期=6个状况周期=12个时钟周期。
在规范的51单片机中,一般状况下,一个机器周期等于12个时钟周期,也便是机器周期=12*时钟周期,(上面讲到的原因)假如是12MHZ,那么机器周期=1微秒。单片机作业时,是一条一条地从RoM中取指令,然后一步一步地履行。单片机拜访一次存储器的时刻,称之为一个机器周期,这是一个时刻基准。
机器周期不只关于指令履行有着重要的含义,并且机器周期也是单片机守时器和计数器的时刻基准。例如一个单片机挑选了12MHZ晶振,那么当守时器的数值加1时,实践通过的时刻便是1us,这便是单片机的守时原理。
但是在8051F310中,CIP-51 微操控器内核选用流水线结构,与规范的 8051 结构比较指令履行速度有很大的进步。在一个规范的 8051 中,除 MUL和 DIV以外一切指令都需求 12 或 24 个体系时钟周期,最大体系时钟频率为 12-24MHz。而关于 CIP-51 内核,70%的指令的履行时刻为 1或2个体系时钟周期,只需 4 条指令的履行时刻大于 4 个体系时钟周期。 所以在核算守时器的值时要留意这儿的改动。
指令周期:
指令周期是履行一条指令所需求的时刻,一般由若干个机器周期组成。指令不同,所需的机器周期数也不同。关于一些简略的的单字节指令,在取指令周期中,指令取出到指令寄存器后,当即译码履行,不再需求其它的机器周期。关于一些比较复杂的指令,例如搬运指令、乘法指令,则需求两个或许两个以上的机器周期。
体系时钟:
体系时钟:体系时钟便是CPU指令运转的频率,这个才是CPU真实的频率。
单片机内部一切作业,都是根据由晶振发生的同一个触发信号源,由这个信号来同步和谐作业进程,咱们把这个信号称为体系时钟,体系时钟一般由晶振发生,但在单片机内部体系时钟不一定等于晶振频率,有或许小于晶振频率,也有或许大于晶振频率,详细是多少由单片机内部结构决议,正常状况和晶振频率会存在一个整数倍联系。体系时种是整个单片机作业节奏的基准,它每振动一次,单片机就被触发履行一次操作。
一般来说,单片机只需一个时钟源.用了外部晶振,就不必内部RC,用了内部RC,就不必外部晶振.振动器振动,发生周期波.单片机在这样的周期波的效果一下有规则的一拍一拍的作业,波的频率越高,单片作业得就越快,波的频率越低,单片机作业得就越慢。
有了以上的概念今后,就能够正确的了解守时器的作业原理了,在8051F310单片机中,有3个守时器,假如守时器1作业在形式1下,如作业形式1下,是16位的计时器,最大数值是65535,当再加1时(=65536),就会发生溢出,发生中止,所以假如咱们要它计1000个数, 那么守时初值便是65536-1000,成果便是64536,这个值送给TH、TL,由于是16进制的,所以高位是64536/256取商,低位是64536%6取余。
再者,便是每一计数的时刻是多久?一般咱们取12M晶振时,一个周期刚好是1us,计数1000个便是1ms,这是由于规范的51单片机是12时钟周期的(STC有6时钟和1时钟办法)。那么,假如咱们晶振是12M,就比较好算,假如是其它的,就用12去除好了。比方是6M的,那么便是12/6=2,每个计数是2us,那么你要守时1ms就只需计数500个即能够。
守时器的初值跟守时器的作业办法,跟晶振频率都有联系。一个机器周期Tcy=晶振频率X12,计数次数N=守时时刻t/机器周期Tcy,那么初值就X=65536-N,得出的数化成十六进制就行了。这儿是用守时器O作业办法1做比如,假如是其它作业办法,就不能是65535了。作业办法0是8192,办法2,3是256。这儿有一个公式:
TH=(65536-TIme/(12/ft))/256
其间,TIme便是要延时的100ms(要取100000us),ft是晶振频率。这个式子又能够简化成
TH=(65536-TIme*ft/12)/256
TL=(65536-TIme*ft/12)%6
在一本书上还看到了这样核算守时初值的:
TH0=-(50235/256); //重装100ms守时初值
TL0=-(50235%6); ///这儿运用的6M晶体,
这儿是6M晶体,延时100ms,那么按上面讲的原理,6M是每个计数为2us,100ms守时便是计数50000个。
那么,守时器初值要 65536-50000=15536,转成16进是3CB0。这便是要送给TH(=3C) 和TL(=B0)的值。
程序中写 TH0=-(50235/256);其实它是这样的TH0=0x100-(50235/256); 在51中,取负数,其成果便是它的值取反+1,也能够用0x100(十进制的256)去减,成果是多少呢?成果便是3C。
以STM32F103为例,进行解析
STM32的TIM一般有高档守时器TIM1,(TIM8只需在互联性产品有),一般守时器TIM2,TIM3,TIM4,(TIM5,TIM6,TIM7有点设备中没有);今日就只介绍一般守时器,由于高档守时器我还不会!每一个一般守时器都有4路通道!
咱们先看看这个逻辑图吧!咱们今日先评论评论守时器的问题!我用红色笔标过的道路便是守时器的作业道路,时钟有内部时钟发生,到PSC哪里进行分频处理,然后CNT进行计数,上面还有一个主动重装载寄存器APP。
这个是分频器的作业原理,咱们能够看,分频器设定之前分频系数为1[1],后边的[2][3][4]分频系数为2,分频系数改动后,计数周期也跟着改动了;一起预分频设置收效时,他还会发生一个中止信号,这个中止信号不要管他,一个体系时钟周期后会主动消失,跟I2C的差不多!
这个是计数进程,上面说过了,计数跟分频后的周期有关;当计数抵达装载的数值之后,体系会发生一个三个信号,其间溢出信号和更新事情一个时钟周期后会主动消失,而这时分触发了更新中止标志位UIF,咱们能够用这个UPDATE来做守时器的中止标志信号!
TIM_ITConfig(TIM2, TIM_IT_UPDATE, ENABLE);
stm32f103xx器材功用与装备
3、stm32f103zet6 守时器
大容量的STM32F103XX增强型系列产品包括最多2个高档操控守时器、4个一般守时器和2个根本守时器,以及2个看门狗守时器和1个体系嘀嗒守时器。
下表比较了高档操控守时器、一般守时器和根本守时器的功用:
守时器功用比较
1)计数器三种计数形式
向上计数形式:从0开端,计到arr预设值,发生溢出事情,回来从头计时
向下计数形式:从arr预设值开端,计到0,发生溢出事情,回来从头计时
中心对齐形式:从0开端向上计数,计到arr发生溢出事情,然后向下计数,计数到1今后,又发生溢出,然后再从0开端向上计数。(此种技能办法也可叫向上/向下计数)
2)高档操控守时器(TIM1和TIM8)
两个高档操控守时器(TIM1和TIM8)能够被看成是分配到6个通的三三相PWM发生器,它具有带死区刺进的互补PWM输出,还能够被当成完好的通用守时器。四个独立的通道能够用于:
(1)输入捕获
(2)输出比较
(3)发生PWM(边际或中心对齐形式)
(4)单脉冲输出
装备为16位规范守时器时,它与TIMX守时器具有相同的功用。装备为16位PWM发生器时,它具有全调制能力(0~100%)。在调试形式下,计数器能够被冻住,一起PWM输出被制止,然后堵截由这些输出所操控的开关。许多功用都与规范的TIM守时器相同,内部结构也相同,因而高档操控守时器能够通过守时器链接功用与TIM守时器协同操作,供给步或事情链接功用。
3)通用守时器(TlMx)
STM32F103XC、STM32F103XD和STM32F103XE增强型系列产品中,内置了多达4 个可同步运转的规范守时器(TIM2、TIM3、TIM4和TIM5)。每个守时器都有一个16位的主动加载递加/递减计数器、一个16位的预分频器和4个独立的通道,每个通道都可用于输入捕获、输出比较、PWM和单脉冲形式输出,在最大的封装装备中可供给最多16个输入捕获、输出比较或PWM通道。它们还能通过守时器链接功用与高档操控守时器一起作业,供给同步或事情链接功用。在调试形式下,计数器能够被冻住。任一规范守时器都能用于发生:PWM输出。每个守时器都有独立的DMA恳求机制。
这些守时器还能够处理增量编码器的信号,也能处理1至3个霍尔传感器的数字输出。
4)根本守时器-TlM6和TIM7
这2个守时器主要是用于发生:DAC触发信号,也可当成通用的16位时基计数器。独立看门 狗独立的看门狗是根据一个12位的递减计数器和一个8位的预分频器,它由一个内部独立的40kHz的RC振动器供给时钟; 由于这个RC振动器独立于主时钟,所以它可运转于停机和待机形式。它能够被当成看门狗用于在发生问题时复位整个体系,或作为一个自在守时器为应用程序供给超时办理。通过选项字节能够装备成是软件或硬件发动看门狗。在调试形式下,计数器能够被冻住。
5)窗口看门狗
窗口看门狗内有一个7位的递减计数器,并能够设置成自在运转。它能够被当成看门狗用于在发生问题时复位整个体系。它由主时钟驱动,具有前期预警中止功用; 在调试形式下,计数器能够被冻住。
6)体系时基守时器
这个守时器是专用于实时操作体系,也可当成一个规范的递减计数器。它具有下述特性:
(1)24位的递减计数器
(2)主动重加载功用
(3)当计数器为0时能发生一个可屏蔽体系中止
(4)可编程时钟源
7)通用守时器的时钟来历;
a:内部时钟(CK_INT)
b:外部时钟形式1:外部输入脚(TIx)
c:外部时钟形式2:外部触发输入(ETR)
d:内部触发输入(ITRx):运用一个守时器作为另一个守时器的预分频器
8)通用守时期内部时钟的发生:
从截图能够看到通用守时器(TIM2-7)的时钟不是直接来自APB1,而是通过APB1的预分频器今后才抵达守时器模块。
当APB1的预分频器系数为1时,这个倍频器就不起效果了,守时器的时钟频率等于APB1的频率;
当APB1的预分频系数为其它数值(即预分频系数为2、4、8或16)时,这个倍频器起效果,守时器的时钟频率等于APB1时钟频率的两倍。
这儿要剖析一下几个概念,也是了解守时器的功用的中心概念,通用守时器有些类似于操作体系的守时器节拍,能够在守时器选用的时钟源的基础上再进行分频,然后再设定溢出巨细,从而完成守时的功用,当然主动重载功用更不再话下。
预分频的功用是使守时器在APB时钟的基础上再一次分频,使其独立的运转。就像上述代码中举例,预分频系数设定为36000-1,则表明该守时器的 时钟频率就变成了72MHz/36000 = 2KHz,而“计数溢出巨细”能够了解为主动装载数值,表明每隔x个计数溢出一次,能够发生1次中止,当然这个频率是通过预分频后的频率。
所以从上述的剖析可知,守时器的守时时刻核算为:
Tout = (TIM_Period+1)*(TIM_Prescaler+1)/72000000
在本程序事例中:Tout= 2000*36000/72000000=1s
需求留意的是,公式中的72000000的运用,是由于该守时器选用的时钟源为72MHz,假如装备成其他时钟源,则相应公式也应该改动。
别的TIM_ClockDivision为时钟切割,这个简略的讲,便是守时器的数字滤波功用,设置成默许即可。