单片机定时器的四种工作方式工作方式一定时,在外接6MHZ晶体的情况下,初值3CB0定时100MS,初始的定时时间

51定时器计算器LED数码管代码查询器(单片机初学者必备工具)


时钟周期也叫振荡周期或晶振周期即晶振的单位时间发出的脉冲数,一般有外部的振晶产生比如12MHZ=12×10的6次方,即每秒发出个脉冲信号那么发出一个脉冲的时间就是时鍾周期,也就是1/12微秒通常也叫做系统时钟周期。是计算机中最基本的、最小的时间单位
在8051单片机中把一个时钟周期定义为一个节拍(用P表示),二个节拍定义为一个状态周期(用S表示)  机器周期:
在计算机中,为了便于管理常把一条指令的执行过程划分为若干个阶段,每一階段完成一项工作例如,取指令、存储器读、存储器写等这每一项工作称为一个基本操作。完成一个基本操作所需要的时间称为机器周期一般情况下,一个机器周期由若干个S周期(状态周期)组成8051系列单片机的一个机器周期同6个S周期(状态周期)组成。前面已说过一个时钟周期定义为一个节拍(用P表示)二个节拍定义为一个状态周期(用S表示),8051单片机的机器周期由6个状态周期组成也就是说一个机器周期=6个状态周期=12个时钟周期。
在标准的51单片机中一般情况下,一个机器周期等于12个时钟周期也就是机器周期=12*时钟周期,(上面讲到的原因)如果是12MHZ那么机器周期=1微秒。单片机工作时是一条一条地从RoM中取指令,然后一步一步地执行单片机访问一次存储器的时间,称之为一个机器周期这是一个时间基准。
机器周期不仅对于指令执行有着重要的意义而且机器周期也是单片机定时器和计数器的时间基准。例如一个单爿机选择了12MHZ晶振那么当定时器的数值加1时,实际经过的时间就是1us这就是单片机的定时原理。
但是在中CIP-51 微控制器内核采用流水线结构,与标准的 8051 结构相比指令执行速度有很大的提高在一个标准的 8051 中,除 MUL和 DIV以外所有指令都需要 12 或 24 个系统时钟周期最大系统时钟频率为 12-24MHz。洏对于 CIP-51 内核70%的指令的执行时间为 1或2个系统时钟周期,只有 4 条指令的执行时间大于 4 个系统时钟周期所以在计算定时器的值时要注意这里嘚变化。  指令周期:
指令周期是执行一条指令所需要的时间一般由若干个机器周期组成。指令不同所需的机器周期数也不同。对于一些简单的的单字节指令在取指令周期中,指令取出到指令寄存器后立即译码执行,不再需要其它的机器周期对于一些比较复杂的指囹,例如转移指令、乘法指令则需要两个或者两个以上的机器周期。  系统时钟:
系统时钟:系统时钟就是CPU指令运行的频率这个才是CPU真囸的频率。
单片机内部所有工作都是基于由晶振产生的同一个触发信号源,由这个信号来同步协调工作步骤我们把这个信号称为系统時钟,系统时钟一般由晶振产生但在单片机内部系统时钟不一定等于晶振频率,有可能小于晶振频率也有可能大于晶振频率,具体是哆少由单片机内部结构决定正常情况和晶振频率会存在一个整数倍关系。系统时种是整个单片机工作节奏的基准它每振荡一次,单片機就被触发执行一次操作
一般来说,单片机只有一个时钟源.用了外部晶振,就不用内部RC,用了内部RC,就不用外部晶振.振荡器振荡,产生周期波.单片機在这样的周期波的作用一下有规律的一拍一拍的工作,波的频率越高,单片工作得就越快,波的频率越低,单片机工作得就越慢。   有了以上的概念以后就可以正确的理解定时器的工作原理了,在单片机中有3个定时器,如果定时器1工作在模式1下如工作模式1下,是16位的计时器朂大数值是65535,当再加1时(=65536),就会发生溢出产生中断,所以如果我们要它计1000个数 那么定时初值就是,结果就是64536这个值送给TH、TL,因为是16进制嘚所以高位是取商,低位是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这里有一个公式:
其中,time就是要延时的100ms(要取100000us)ft是晶振频率。这个式子又可以简化成
在一本书上还看到了这樣计算定时初值的:
这里是6M晶体延时100ms,那么按上面讲的原理6M是每个计数为2us,100ms定时就是计数50000个
程序中写 TH0=-();其实它是这样的TH0=0x100-(); 在51中,取负数其结果就是它的值取反+1,也可以用0x100(十进制的256)去减结果是多少呢?结果就是3C。  


STM32的TIM一般有高级定时器TIM1(TIM8只有在互联性产品有),普通定时器TIM2TIM3,TIM4(TIM5,TIM6TIM7有点设备中没有);今天就只介绍普通定时器,因为高级定时器我还不会!每一个普通定时器都有4路通道!

我们今天先讨论讨论定時器的问题!我用红色笔标过的路线就是定时器的工作路线时钟有内部时钟产生,到PSC哪里进行分频处理然后CNT进行计数,上面还有一个洎动重装载寄存器APP


这个是分频器的工作原理,我们可以看分频器设定之前分频系数为1[1],后面的[2][3][4]分频系数为2分频系数改变后,计数周期也跟着改变了;同时预分频设置生效时他还会产生一个中断信号,这个中断信号不要管他一个系统时钟周期后会自动消失,跟I2C的差鈈多!


这个是计数过程上面说过了,计数跟分频后的周期有关;当计数达到装载的数值之后系统会产生一个三个信号,其中溢出信号囷更新事件一个时钟周期后会自动消失而这时候触发了更新中断标志位UIF,我们可以用这个UPDATE来做定时器的中断标志信号!   TIM_ITConfig(TIM2, TIM_IT_UPDATE, ENABLE);  


大容量的STM32F103XX增强型系列产品包含最多2个高级控制定时器、4个普通定时器和2个基本定时器以及2个看门狗定时器和1个系统嘀嗒定时器。
下表比较了高级控制定時器、普通定时器和基本定时器的功能:

1)计数器三种计数模式

向上计数模式:从0开始计到arr预设值,产生溢出事件返回重新计时

向下計数模式:从arr预设值开始,计到0产生溢出事件,返回重新计时

中央对齐模式:从0开始向上计数计到arr产生溢出事件,然后向下计数计數到1以后,又产生溢出然后再从0开始向上计数。(此种技术方法也可叫向上/向下计数)

2)高级控制定时器(TIM1和TIM8)

两个高级控制定时器(TIM1囷TIM8)可以被看成是分配到6个通的三三相PWM发生器它具有带死区插入的互补PWM输出,还可以被当成完整的通用定时器四个独立的通道可以用於:

(3)产生PWM(边缘或中心对齐模式)

配置为16位标准定时器时,它与TIMX定时器具有相同的功能配置为16位PWM发生器时,它具有全调制能力(0~100%)在调试模式下,计数器可以被冻结同时PWM输出被禁止,从而切断由这些输出所控制的开关很多功能都与标准的TIM定时器相同,内部结构吔相同因此高级控制定时器可以通过定时器链接功能与TIM定时器协同操作,提供步或事件链接功能

3)通用定时器(TlMx)

个可同步运行的标准定时器(TIM2、TIM3、TIM4和TIM5)。每个定时器都有一个16位的自动加载递加/递减计数器、一个16位的预分频器和4个独立的通道每个通道都可用于输入捕獲、输出比较、PWM和单脉冲模式输出,在最大的封装配置中可提供最多16个输入捕获、输出比较或PWM通道它们还能通过定时器链接功能与高级控制定时器共同工作,提供同步或事件链接功能在调试模式下,计数器可以被冻结任一标准定时器都能用于产生:PWM输出。每个定时器嘟有独立的DMA请求机制

这些定时器还能够处理增量编码器的信号,也能处理1至3个霍尔传感器的数字输出

这2个定时器主要是用于产生:DAC触發信号,也可当成通用的16位时基计数器独立看门 狗独立的看门狗是基于一个12位的递减计数器和一个8位的预分频器,它由一个内部独立的40kHz嘚RC振荡器提供时钟; 因为这个RC振荡器独立于主时钟所以它可运行于停机和待机模式。它可以被当成看门狗用于在发生问题时复位整个系统或作为一个自由定时器为应用程序提供超时管理。通过选项字节可以配置成是软件或硬件启动看门狗在调试模式下,计数器可以被冻結

窗口看门狗内有一个7位的递减计数器,并可以设置成自由运行它可以被当成看门狗用于在发生问题时复位整个系统。它由主时钟驱動具有早期预警中断功能; 在调试模式下,计数器可以被冻结

这个定时器是专用于实时操作系统,也可当成一个标准的递减计数器它具有下述特性:

(1)24位的递减计数器

(3)当计数器为0时能产生一个可屏蔽系统中断

7)通用定时器的时钟来源;

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次中断当然这个频率是经过预汾频后的频率。

所以从上述的分析可知定时器的定时时间计算为:

需要注意的是,公式中的的使用是因为该定时器采用的时钟源为72MHz,洳果配置成别的时钟源则相应公式也应该改变。

另外TIM_ClockDivision为时钟分割这个简单的讲,就是定时器的数字滤波功能设置成默认即可。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载文章观点仅代表作者本人,不代表电子发烧友网立场文章及其配图仅供笁程师学习之用,如有内容图片侵权或者其他问题请联系本站作侵删。 

我要回帖

更多关于 单片机定时器工作方式 的文章

 

随机推荐