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 静态内部类与非静态内部类 学习记录.
目的 为什么会有这篇文章呢,是因为我在学习各种框架的时候发现很多框架都用到了这些内部类的小技巧,虽然我平时写代码的时候基本不用,但是看别人代码的话至少要了解基本知识吧,另外到底内部类应该应用在哪些场合 ...
随机推荐
- BZOJ#2121. 字符串游戏 [区间dp]
// powered by c++11 // by Isaunoya #include<bits/stdc++.h> #define rep(i , x , y) for(register ...
- Visual Studio Code 搭建 C/C++开发环境方法总结
之前看错资料踩了不少坑,先将可行经验总结如下: 1. 下载 Visual Studio Code 并安装.地址:https://code.visualstudio.com 2. 安装 C/C++插件与 ...
- jQuery---width和height的方法
width和height的方法 //获取div的宽度 $("div").css("width", "400px"); console.log ...
- 845. 八数码(bfs+map)
在一个3×3的网格中,1~8这8个数字和一个“X”恰好不重不漏地分布在这3×3的网格中. 例如: 1 2 3 X 4 6 7 5 8 在游戏过程中,可以把“X”与其上.下.左.右四个方向之一的数字交换 ...
- PHP代码安全杂谈
虽然PHP是世界上最好的语言,但是也有一些因为弱类型语言的安全性问题出现.WordPress历史上就出现过由于PHP本身的缺陷而造成的一些安全性问题,如CVE-2014-0166 中的cookie伪造 ...
- PPTP搭建
一.装包 yum -y install pptpd-1.4.0-2.el7.x86_64.rpm //系统光盘不自带,需要自行下载 二.修改配置文件并启动软件 rpm -qc ...
- 【PAT甲级】1118 Birds in Forest (25分)(并查集)
题意: 输入一个正整数N(<=10000),接着输入N行数字每行包括一个正整数K和K个正整数,表示这K只鸟是同一棵树上的.输出最多可能有几棵树以及一共有多少只鸟.接着输入一个正整数Q,接着输入Q ...
- linux 安装 Django
安装django的命令 pip install Django ## 这样运行默认安装的是最新版 备注 根据测试在python3.4基础上安装Django 1.8.9正式版是没有问题的,所以要执行下面命 ...
- python3运行调用htmltestrunner时,报错UnicodeDecodeError: 'ascii' codec can't decode byte 0xe5 in position 0
之前解决过一次,又忘了,这次写下来了..百度没有的,跟我环境有关! 环境:自动化运行环境python3.6.5 上期说到了,写了一个bat来运行runallcase.py. 但是双击运行却报错:Uni ...
- 4817 [Sdoi2017]树点涂色
题目描述 Bob 有一棵 n 个点的有根树,其中 1 号点是根节点.Bob 在每个点上涂了颜色,并且每个点上的颜色不同. 定义一条路径的权值是:这条路径上的点(包括起点和终点)共有多少种不同的颜色. ...