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寄存器
STM32F103之定时器学习记录的更多相关文章
- STM32F103之DMA学习记录
/================翻译STM32F103开发手册DMA章节===========================/ 13 DMA(Direct memory access) 13.1 ...
- STM32F103之ADC学习记录
1.问题 1)10位ADC的误差是多少? 首先要分清分辨率与精度的区别. 10cm的尺子,有100个等分刻度,则该尺子的分辨率为1mm. 但不能说这把尺子的精度是1mm. 在冬天,尺子会热胀冷缩,依然 ...
- STM32F103之GPIO学习记录
9 GPIO:通用I/O口 AFIO:可供选择的I/O口 9.1 GPIO功能描述 每一个通用的I/O口都有: 两个32位的配置寄存器(配置寄存器低和配置寄存器高): 两个32位的数据寄存器(输入数据 ...
- STM32F103之I2C学习记录
26.3.1 模式选择 该外设可以在以下四种模式之一 1)从机发送模式 2)从机接收模式 3)主机发送模式 4)主机接收模式 IIC协议时序 MSB:Most Significant Bit(最高有 ...
- STM32F103之USART学习记录
1.USART的主要特性 1)名称:串行异步通信接口 2)全双工.异步通信 3)发送和接收速率最高可达4.5MBits/s 4)可编程数据长度8或9bits 5)可配置的停止位:支持1或2位停止位 6 ...
- Python大神成长之路: 第三次学习记录 集合 函数 装饰 re
学习记录day03 字符串可以直接切片,But字符串不可修改 字符串修改:生成了一个新的字符串 LIst修改,在原基础上修改(原内存上) 集合是一个无序的,不重复的数据组合,它的主要作用如 ...
- vue.js学习记录
vue.js学习记录 文章已同步我的github笔记https://github.com/ymblog/blog,欢迎大家加star~~ vue实例 生命周期 beforeCreate:不能访问thi ...
- Quartz 学习记录1
原因 公司有一些批量定时任务可能需要在夜间执行,用的是quartz和spring batch两个框架.quartz是个定时任务框架,spring batch是个批处理框架. 虽然我自己的小玩意儿平时不 ...
- Java 静态内部类与非静态内部类 学习记录.
目的 为什么会有这篇文章呢,是因为我在学习各种框架的时候发现很多框架都用到了这些内部类的小技巧,虽然我平时写代码的时候基本不用,但是看别人代码的话至少要了解基本知识吧,另外到底内部类应该应用在哪些场合 ...
随机推荐
- 数据库中间件DBLE学习(一) 基础介绍和快速搭建
dble基本架构简介 dble是上海爱可生信息技术股份有限公司基于mysql的高可用扩展性的分布式中间件.江湖人送外号MyCat Plus.开源地址 我们首先来看架构图,外部应用通过NIO/AIO进行 ...
- 图像读取函数cv::imread()的几种使用方式
string imgpath = "C:\Users\Y\Pictures\miao.jpg"; OpenCV的imread()函数不支持单右斜线形式的路径,即不支持上述形式的路径 ...
- Java第四节课总结
动手动脑1:如果类提供了一个自定义的构造方法,将导致系统不再提供默认构造方法.Foo obj1=new Foo()在此处调用应增加参数. 动手动脑2:静态初始化块只执行一次.创建子类型的对象时,也会导 ...
- codechef Counting D-sets
难度 \(hard\) 题意 官方中文题意 做法 为避免数重,强制每维至少有一个\(0\),这个可以简单容斥 直径恰好为\(d\),不好求,也容斥一下
- Python标准库之hashlib模块与hmac模块
hashlib模块用于加密相关的操作.在Python 3.x里代替了md5模块和sha模块,主要提供 SHA1.SHA224.SHA256.SHA384.SHA512 .MD5 算法.如果包含中文字符 ...
- H5_0012:js事件冒泡和捕获
捕获(capture)和冒泡(bubble)是事件传播过程中的两个概念, 比如用户单击某个元素, 但由于元素处于父元素内, 该父元素又处于document对象中, document对象又处于windo ...
- 138.更改session的存储机制
修改session的存储机制: 默认情况下,session数据时存储到数据库中,当然也可以将session数据存储到其他地方.可以通过设置SESSION_ENGINE来更改session的存储位置,这 ...
- Java实现的上传并压缩图片功能【可等比例压缩或原尺寸压缩】
本文实例讲述了Java实现的上传并压缩图片功能.分享给大家供大家参考,具体如下: 先看效果: 原图:1.33M 处理后:27.4kb 关键代码: package codeGenerate.util; ...
- sap gui中打断点,进入不了断点
1: 当abap development tool 打开时,会影响sap gui中的断点进入. 2: 需要sap gui和abap development tool 都关闭,重新进入sap gui打 ...
- idea软件操作
1.快捷键: 1.1.格式化代码:crtl+alt+L 1.2.一些构造啊,setter/getter等方法:alt+insert 1.3.crtl + f 搜素当前页面