zoukankan      html  css  js  c++  java
  • STM32F103之定时器学习记录

    /==============翻译STM32F103开发手册定时器部分========================/

    14 高级控制计时器(TIM1和TIM8)

    14.1 TIM1和TIM8介绍

    高级控制定时器(TIM1和TIM8)由16位的自动重载计数器组成,

    计数器由可编程的预标定器驱动。

    它可用于各种各样的目的,包括测量输入信号的脉冲长度(输入捕获),

    或者生成输出波形(输出比较,PWM,互补的PWM与死区插入时间)。

    通过定时器预分频器和RCC时钟控制预分频器,

    脉冲的长度和波形周期可以在几微妙到几毫秒之间调整。

    高级控制定时器(TIM1和TIM8)和通用定时器(TIMx)是完全独立的,

    并且不公用任何资源。

    它们可以同步在一起,14.3.20章节有描述。

    14.2 TIM1和TIM8主要特征

    TIM1和TIM8定时器特征如下:

    (1)16位上,下,上/下自动重载计数器。

    (2)16位可编程预分频器,允许对计数器进行分度数(也可以动态分度数),

    频率可以是1到65536之间的任意因子。

    (3)最多四个独立通道:

    输入捕获

    输出比较

    PWM生成(边沿和中心对齐模式)

    单脉冲模式输出

    (4)互补的输出与可编程的死区时间

    (5)同步电路通过外部的信号控制定时器,

    并且与一些定时器相互联系在一起。

    (6)只有当给一些计数周期后,

    重复计数器将更新定时器存储器。

    (7)中断输入,使定时器的输出信号处于复位状态或已知状态。

    (8)在以下一些事件,将会产生中断/DMA:

    — 更新:计数器溢出/下溢,计数器初始化(通过软件或内部/外部触发器)

    — 触发事件(计数器开始,停止,初始化或者内部/外部触发计数)

    — 输入捕获

    — 输出比较

    — 输入中断

    (9)支持增量(正交)编码器,

    以及用于定位目的的霍尔传感器电路

    (10)触发外部时钟输入或者当前的逐周期管理

     对于上述模块图的解释:

    (1)如下图所示,这一部分主要用来提供CK_PSC时钟源。

    有内部时钟,也有外部时钟,

    还有的是通过级联提供时钟:一个定时器为另一个定时器提供时钟。

    (2)如下图所示:左边有定时器的相应通道,右边也有定时器的相应通道。

    左边的通道用来输入,右边的通道用来输出。

    对于同一个通道,例如TIMx_CH1不能既选择输入又选择输出,只能选择一个。

     

     (3)如下图所示:寄存器用来存储一些值,设置一些值。

    14.3 TIM1和TIM8功能描述

    14.3.1 时基单元

    可编程高级控制定时器的主要部分是一个16位的计数器,

    以及和它相关的自动重载寄存器。

    这个计数器可以向上计数,向下计数或上下计数。

    计数器时钟可以由分频器分频。

    计数器,自动重载寄存器以及预分频寄存器可以通过软件读或写。

    即使计数器运行时也是如此。

    时基单元包括:

    计数器寄存器(TIMx_CNT)

    预分频寄存器(TIMx_PSC)

    自动重载寄存器(TIMx_ARR)

    重复计数寄存器(TIMx_RCR)

    自动重加载寄存器是预加载的。

    向自动重载寄存器读或写来访问预加载寄存器。

    预加载寄存器的内容永久地转移到影子寄存器或者在每一个更新时间(UEV),

    这些都取决于TIMx_CR1寄存器的自动载入重载使能位(ARPE)。

    当计数器到达溢出(上溢或下溢),更新事件会发送,

    以及如果TIMx_CR1寄存器的UDIS位等于0。

    这也可以通过软件生成。

    更新事件的生成将详细描述每个配置。

    计数器由预标定器输出CK_CNT计数,

    只有当TIMx_CR1寄存器的计数使能位(CEN)被置1,

    计数器才能使能。

    注意,在设置TIMx_CR1寄存器的CEN位后,

    计数器开始计数一个周期。

    预分频器描述

    预分频器可以将计数时钟频率分频到1至65536中间的任意一个。

    是基于一个16位寄存器(TIMx_PSC寄存器)控制的16位计数器。

    当这个控制寄存器缓冲时,可以动态地改变它。

    新预分频率考虑在下一次更新事件中。

    14.3.2 计数模式

    向上计数模式

    在向上计数模式中,计数器从0开始向上计数,直到达到自动重载值(TIMx_ARR寄存器的内容),

    然后从0开始,并生成一个计数器溢出事件。

    当向上计数器重复编程的数字后,

    这个数字由重复计数器寄存器加1(TIMx_RCR+1)编程设置得到,

    如果使用重复计数器,就会生成一个更新事件。

    否则,更新事件在每个计数器溢出时生成。

    在TIMx_EGR寄存器中设置UG位,同样生成一个更新事件。

    可以通过软件设置TIMx_CR1寄存器的UDIS位,

    禁止更新事件。

    这是为了避免当给预装载寄存器写入新值时,

    将影子寄存器更新了。

    在将UDIS位写0之前,不会有跟新事件发生。

    但是,计数器以及预分频计数器从0开始。

    另外,如果TIMx_CR1寄存器的URS位置1,

    设置UG位会生成一个更新事件,

    是在没有设置UIF标志位的前提下。

    这是为了避免当在捕获事件中清除计数器时,

    生成更新和捕获中断。

    当发生一个更新事件,所有的寄存器都会更新,

    并且更新标志位也会被设置:

    重复计数器用TIMx_RCR寄存器的内容重新加载,

    使用TIMx_ARR寄存器里的值更新自动重载影子寄存器,

    预分频器的缓冲区用预加载值(TIMx_PSC寄存器的内容)重新加载。

    当TIMx_ARR=0x36时,

    下面的一些图表展示了一些计数器在不同时钟频率下计数行为例子。

     

     

     向下计数模式

     中心对齐模式

    14.3.3 重复计数

    时基单元 描述了计数器溢出时,如何生成更新事件。

    只有当重复计数器达到0,才会生成更新事件。

    这在产生PWM信号时很有用。

    这意味着数据从预加载寄存器转移到影子寄存器,

    每一个N+1计数器溢出或下溢,

    N是TIMx_RCR重复计数器寄存器的值。

    重复计数器递减:

    在溢出模式下,每一个计数器溢出,

    在下溢模式下,每一个计数器下溢,

    在中心对齐模式下,每一个计数器上溢或下溢。

    即使这限制了最大重复数128个PWM周期,

    它让每个PWM周期更新两次占空比成为可能。

    在中心对齐模式下,每一个PWM周期刷新比较寄存器一次,

    由于模式的对称性,最大分辨率为2*TCK。

    重复计数器是一种自动重新加载类型;

    重复率由TIMx_RCR寄存器的值定义。

    当由软件或硬件生成一个更新事件,

    它立即发生,

    无论重复寄存器的值是什么,

    无论重复计数器重新加载什么值,

    这些值是TIMx_RCR寄存器的内容加载进去的。

    在中心对齐模式,对于RCR的奇值,

    更新事件要么发生在上溢,要么发生在下溢,

    这取决于RCR寄存器什么时候被写以及计数器什么时候开始。

    如果RCR实在计数器启动之前被写的,

    更新事件将在上溢的时候触发。

    例如,RCR = 3,每4次上溢或下溢,更新事件将会产生,

    这取决于RCR什么时候被写。

    14.3.4 时钟选择

    计数器可由下列时钟源提供:

    内部时钟(CK_INT)

    外部时钟模式1:外部的输入引脚

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

    内部触发输入(ITRx):使用1个定时器作为另一个定时器的预分频器,

    例如,用户可以将定时器调成定时器2的预分频器。

    内部时钟源(CK_INT)

    如果从模式控制器被禁用(SMS = 000),

    那么CEN,DIR,UG位成为实际控制位,

    并且可以通过软件控制。

    当CEN位写1,预分频器有内部时钟CK_INT计时。

    外部时钟源模式1

     在TIMx_SMCR寄存器将SMS设置为“111”,就能选择该模式。

    在一个选择输入中,计数器在每一个上升沿或下降沿都会计数。

    外部时钟源模式2

    14.3.5 捕获/比较通道

    14.3.6 输入捕获模式

    14.3.7 PWM输入模式

    14.3.8 强制输出模式

    14.3.9 输出比较模式

    14.3.10 PWM模式

    14.3.11 互补输出与死区插入

    14.3.12 使用break函数

    14.3.13 清楚外部事件的OCxREF信号

    14.3.14 6步PWM生成

    14.3.15 单脉冲模式

    14.3.16 编码器接口模式

    14.3.17 定时器输入XOR功能

    14.3.18 与霍尔传感器接口

    14.3.19 TIMx和外部触发器同步

    14.3.20 定时器同步

    14.3.21 调试模式

    14.4 TIM1和TIM8寄存器

  • 相关阅读:
    [py]str list切片-去除字符串首尾空格-递归思想
    [py]python面向对象的str getattr特殊方法
    [py]python多态-动态语言的鸭子类型
    [py]py2自带Queue模块实现了3类队列
    【Unity技巧】制作一个简单的NPC
    java7 新特性 总结版
    【游戏周边】Unity,UDK,Unreal Engine4或者CryENGINE——我应该选择哪一个游戏引擎
    【Unity Shaders】Transparency —— 使用alpha通道创建透明效果
    记录最近的几个bug
    理解WebKit和Chromium: 调试Android系统上的Chromium
  • 原文地址:https://www.cnblogs.com/QQ2962269558/p/12350220.html
Copyright © 2011-2022 走看看