STM32工作笔记0061---通用定时器基本原理

技术交流QQ群【JAVA,C++,Python,.NET,BigData,AI】:170933152 

对于STM32F103系列,有三种定时器,有高级定时器,有通用定时器,还有基本定时器

这里咱们讲解的是通用定时器.

其实他们的基本原理都是一样的.

 

实际的应用当中我们主要用,这个定时器的中断,和PWM输出,还有输入捕获实验

可以看到这里STM32F103ZE,有4个 16/16/16  16位的的通用定时器,有2个8/8/12的 8位,8位,12位的高级定时器

这个高级定时器有16位,支持向上计数,向下计数,可以看升DMA请求,有4个捕获,比较通道,可以互补输出.

这里,注意,计数器的时钟频率来源于APB1,但是还可以进行分频处理,经过了分频,实际上是做除法,也就是

定时器的定时时间会变长,可以根据需要来调整.

然后他有4个独立的通道,每个通道都可以进行输入信号的捕获,输出的比较,pwm生成,单脉冲模式输出.

这里,前4个中断是经常用的,后两个用的不多,然后,

测量输入信号的脉冲长度,就是上面,横着的部分的长度.,还可以产生波形,这个可以用到,比如信号强弱的时候,灯会跟着强弱显示.

,脉冲长度和波形周期可以调整,定时器还可以实现计数,这个是基本的功能.

可以看到向上计数,就是向上计数器从0自动加载到某个值,然后接着产生一个向上的溢出事件.

向下计数,就是向下计数到0,然后产生一个溢出事件,觉得应该是一个向下的溢出事件,0再往下就是负数了所以是向下溢出

然后中央对齐模式是,计数器先从0开始,计数加1,直到计数到自动装载值的数值-1的时候,会产生一个

向上的溢出事件,然后接着向下计数,计数到1的时候,就会产生一个向下溢出事件.

接下来看通用定时器的框图,也就是了解,通用定时器的工作过程.

可以看到上面,这个通用定时器,有4个通道,TI1,TI2,TI3,TI4

可以看到下面还有两个通道.

看一下通用定时器的,框图,可以看到,上面的图的部分,第1部分是,产生时钟的部分.

第2部分是使用时钟的部分,可以对时钟进行分频等待,

然后第3个部分是捕获输入信号的部分,

第4个部分是输出比较

第5部分,是寄存器,是捕获,比较寄存器.

接下来看这四个部分:

先看这个时钟源,这个时钟源可以看到来源于第一个时钟是内部时钟RC振荡器,

的APB1的时钟来源,然后经过从模式控制器,最终可以看到这个时钟给了PSC这个预分频器.

第二个时钟来源,可以看到标志2的地方,实际上是来源于外部的晶振,外部时钟,然后经过极性选择,

边沿检测,然后预分频器,然后输入滤波,就可以到触发控制器,然后最终也可以给CK_PSC经过预分频器,

进行提供时钟来源.,注意这个只是给定时器2,3,4提供时钟来源.

然后第3个时钟来源,可以是来源别的定时器的时钟,比如这里的ITR0,ITR1,ITR2,ITR3,这几个,实际上就是来源于

TRGO,可以看到右边有个TRGO,至其他定时器至DAC/ADC,这个来源,也就是这几个的时钟来源是来源于其他的

定时器的.

然后第4个时钟来源,可以是来源于其他定时器的外部通道可以看到TIMX_CH1左下角,这里

可以通过异或处理,然后输入滤波器,边沿检测器,然后到TI1F_ED再经过预分频器,然后

经过TRC,再经过TRGI,然后通过从模式控制器,最终给CK_PSC提供时钟来源.

这里我们用的比较多的是,内部时钟来源,这个是用的比较多的.

然后再看下面的部分,时基单元:

任何一个定时器都有自己的时基单元

可以看到这里:
这个时基单元的用处:

首先把时钟来源,CK_PSC,给经过预分频器,PSC,产生一个CK_CNT时钟,这个时钟就可以给计数器来用了

然后计数器,可以向上计数从0计数到自动重装载寄存器中的值,然后产生向上溢出事件.

这个自动重装载寄存器中的值,可以在触发控制器中去配置,响应的寄存器.

当然也可以向下计数.产生向下溢出事件.

然后左侧是输入捕获,这实际上就是捕获的向上横着的部分,

也就是识别具体的输入的是哪个引脚.

注意这里的TIMX_CH1也就是定时器的通道1,实际上是对应MCU 的一个引脚的.

可以看到每个定时器的通道都是有对应的引脚的.

可以看到,这里 ,比如TIMX_CH1这个通道,他比如捕获到了上升沿,然后经过异或,然后经过滤波,这个滤波,实际上

稳定信号用的,然后再经过边沿检测器,这个是检测边沿的,比如检测了上升沿,然后经过ICIPS,最后到

捕获寄存器,然后下降沿的时候同样可以去捕获,最后就可以,通过定时器,然后,

检测了上升沿,和下降沿以后,就可以通过定时器,计算出,上升沿,和下降沿,之间的宽度了.

这里通过记录上升沿的值和下降沿的值,通过比较计算就可以计算出上升下降的宽度了.

检测这个宽度,是我们经常会用到的.

右边是输出高电平低电平的实验,比如这里我们再计数器中设置一个值是100,他从100来计数到0

那么这个时候,检测到的值如果是50的话,也就是捕获比较寄存器,检测的宽度是的值如果是50的话

那么这个时候计数器开始倒计数,如果当前计数器中的值,比50大,这里TIMX_CH1输出控制,就输出

高电平,如果比50小,就输出一个低电平,这样,计数器不停的计数,就会产生一个波形.

这里如果我们要调整这个波形的占空比,也就是波形的宽度,就可以调整这个捕获比较器的值,

也就是上面的50,如果要调整脉冲的周期,那么就需要,调整这里的计数器中的值,比如这里的初始值是100

要调整成200.

对于,上面的每个部分的使用都有对应的实验来讲解,

这里不要是,捕获输入信号的实验

输出控制信号的实验

还有计数器设置的实验.

猜你喜欢

转载自blog.csdn.net/lidew521/article/details/108273964