zoukankan      html  css  js  c++  java
  • Stm32之通用定时器复习

    因为毕业设计要用到PWM调光很久都没用到Stm32的定时器,有些内容已经遗忘,为了回顾复习相关内容今天开下通用定时器这一章节的数据手册。

    1、时钟

    通用定时器一般是TIM2~TIM5,TIM1、TIM8是高级定时器,TIM6、TIM7是基本定时器。

    既然名字都叫定时器,时钟一定是最重要的,所以在看其相关工作模式和特性之前,先看下他的时钟。

    通用定时器和基本定时器都是挂载在APB1时钟总线,这条时钟总线最大时钟频率36MHz。PCLK1经过倍频后供给通用定时器时钟,这里要注意的是,分频系数为1时TIMx_CLK=PCLK1,其他的分频系数无论多少只要不是1,TIMx_CLK=2*PCLK1。(关于这里为什么叫分频系数确是倍频作用,我猜测是因为翻译原因)。

    这里注意的是,在MDK开发环境下,只要外部的晶振接的是8M,默认的系统时钟SYSCLK=72MHz,默认的PCLK1=36MHz,PCLK2=72Mhz。

    所以,在配置定时器工作模式和管脚复用前,记得需先配置好时钟。(第一步)

    2、定时器

    接下来开始读数据手册:

    定时器作为一种集成在芯片内部的外设,要把它当做一个独立的器件看待,因为是集成在内部所以供电管脚不用我们考虑,此外他具有4个独立的功能通道,可以复用到4个对应的GPIO引脚。独立的意思就是可以单独使用其中的一个。

    每个通道都有四种功能,分别是:

      输入捕获:就是测量输入信号的脉冲长度。

      输出比较:

      PWM生成:有边缘和中间对齐模式。PWM的应用很广,在LED调光和PWM调速都有广泛应用,原理是通过控制占空比调节平均输出,需要结合高频率的开关器件使用。

      单脉冲模式输出:

    因为毕业设计要用到PWM调光很久都没用到Stm32的定时器,有些内容已经遗忘,为了回顾复习相关内容今天开下通用定时器这一章节的数据手册。

    1、时钟

    通用定时器一般是TIM2~TIM5,TIM1、TIM8是高级定时器,TIM6、TIM7是基本定时器。

    既然名字都叫定时器,时钟一定是最重要的,所以在看其相关工作模式和特性之前,先看下他的时钟。

    通用定时器和基本定时器都是挂载在APB1时钟总线,这条时钟总线最大时钟频率36MHz。PCLK1经过倍频后供给通用定时器时钟,这里要注意的是,分频系数为1时TIMx_CLK=PCLK1,其他的分频系数无论多少只要不是1,TIMx_CLK=2*PCLK1。(关于这里为什么叫分频系数确是倍频作用,我猜测是因为翻译原因)。

    这里注意的是,在MDK开发环境下,只要外部的晶振接的是8M,默认的系统时钟SYSCLK=72MHz,默认的PCLK1=36MHz,PCLK2=72Mhz。

    所以,在配置定时器工作模式和管脚复用前,记得需先配置好时钟。(第一步)

    2、定时器

    接下来开始读数据手册:

    定时器作为一种集成在芯片内部的外设,要把它当做一个独立的器件看待,因为是集成在内部所以供电管脚不用我们考虑,此外他具有4个独立的功能通道,可以复用到4个对应的GPIO引脚。独立的意思就是可以单独使用其中的一个。此外还有一个用于外部提供时钟源的时钟输入引脚ETR,一般不会用到。

    每个通道都有四种功能,分别是:

      输入捕获:就是测量输入信号的脉冲长度。

      输出比较:

      PWM生成:有边缘和中间对齐模式。PWM的应用很广,在LED调光和PWM调速都有广泛应用,原理是通过控制占空比调节平均输出,需要结合高频率的开关器件使用。

      单脉冲模式输出:

     

    时基单元由计数寄存器,预分频寄存器,自动装载寄存器组成,其中自动装载寄存器有个不可操作的对应的寄存器影子寄存器,我们不能对其读写,只能由cpu自动操作。这个自动装载寄存器就是用来保存每次更新的装载的值的,在我们想写入新的装载值时,CPU会自动写到预装载寄存器。

    计数器是由预分频器的时钟CK_CNT驱动的,需要使能才有效,使能之后的一个时钟周期生效。(也就是说我们在设置预装载值时数值需要减1)

    预分频器的作用就是在TIM_CLK的基础上再分频,这个寄存器也是有缓冲器的,在发生更新事件后把值写到预分频寄存器。

    对于定时器这个外设,有一个叫做更新事件UEV的东东,在每次产生这个东西时,定时器所有的具有缓存功能的寄存器开始更新数值,把预装载的数写进去。这个更新事件可以由硬件产生(计数溢出计数值达到最大值),也可由软件产生,我们用指令控制EGR寄存器的UG位置高也可产生。灵活的在代码中应用这个功能,将会给编程带来极大的便利。

    。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。

    分界线

    。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。

    一下子读了那么大一段还是很吃力,现在脑子很热,眼皮特别沉。还是看关键部分。

     3、PWM模式

    相关寄存器:TIMx_CCMRx----------------OCxM  PWM模式设置

                |---------------OCxPE  使能预装载寄存器

          TIMx_CR1-----------------APRE  使能自动重装载的预装载寄存器。

               TIMx_EGR--------------UG  在计数前设置UG位来初始化所有的寄存器

          TIMx_CCER--------------CCxP  可以设置OCx的极性(高/低电平有效)

                |-------------CCxE  控制OCx输出使能

    计数器有三种计数模式分为向上/向下计数和向上向下交替计数,而PWM模式根据计数方式的不同分为两大类中央对齐模式(向上向下交替计数)以及边沿对齐模式,这两种模式是由其计数方式区分的。

    而依据PWM波的产生原理,即CNT在0到ARR之间不断增加或减少期间一直与CCR进行比较,根据比较的结果输出高地电平。而比较结果对于输出的高地的影响有两种,一是CNT<=CCR时输出高电平,反之输出低电平,对应的是PWM1模式,二是CNT>=CCR时输出高电平,反之输出低电平,对应的是PWM2模式。

    上面一句话解释得很清楚,PWM模式下不同PWM模式以及对齐模式的由来,对齐模式有关的寄存器是TIMx_CCR1寄存器

     

  • 相关阅读:
    python脚本2_输入2个数比较大小后从小到大升序打印
    python脚本1_给一个半径求圆的面积和周长
    配置双机互信
    如何在 CentOS7 中安装 Nodejs
    Git 服务器搭建
    docker安装脚本
    CentOS7下安装Docker-Compose
    Linux 文件锁
    6 系统数据文件和信息
    bash脚本编程之二 字符串测试及for循环
  • 原文地址:https://www.cnblogs.com/geekj/p/10644702.html
Copyright © 2011-2022 走看看