• 定时器功能简介

  STM32 一共有 8 个都为 16 位的定时器。其中 TIM6、 TIM7 是基本定时器;TIM2、TIM3、 TIM4、 TIM5 是通用定时器; TIM1 和 TIM8 是高级定时器。这些定时器使 STM32 具有定时、信号的频率测量、信号的 PWM 测量、 PWM输出、三相 6 步电机控制及编码器接口等功能。

  • 基本定时器 

  基本定时器TIM6 和TIM7,这两个定时器只具备最基本的定时功能,就是累加的时钟脉冲数超过预定值时,能触发中断或触发 DMA 请求。由于在芯片内部与 DAC 外设相连,可通过触发输出驱动 DAC。也可以作为其它通用定时器的时钟基准。

  这两个基本定时器使用的时钟源都是 TIMxCLK,时钟源经过 PSC 预分频器输入至脉冲计数器(TIMx_CNT) ,基本定时器只能工作在向上计数模式,在重载寄存器(TIMx_ARR) 保存的是定时器的溢出值。工作时, 脉冲计数器 TIMx_CNT 由时钟触发进行计数,当 TIMx_CNT 的计数值 X 等于重载寄存器 TIMx_ARR 中保存的数值 N 时,产生溢出事件,可触发中断或 DMA 请求。然后 TIMx_CNT 的值重新被置为 0,重新向上计数。

  • 通用定时器

  通用定时器为TIM2~TIM5,主要用在测量输入脉冲的频率、脉冲宽与输出 PWM 脉冲的场合,还具有编码器的接口。

  通用定时器比基本定时器多出的强大功能,就是因为通用定时器多出了一种寄存器——捕获/比较寄存器, TIMx_CCR(capture/compare register 简称CCR),它在输入时被用于捕获(存储) 输入脉冲在电平发生翻转时,脉冲计数器TIMx_CNT 的当前计数值,从而实现脉冲的频率测量;在输出时被用来存储一个脉冲数值,把这个数值用于与脉冲计数器 TIMx_CNT 的当前计数值进行比较,根据比较结果进行不同的电平输出 。

  • pwm输出:

  通用定时器可以利用 GPIO 引脚进行脉冲输出,在配置PWM输出功能时(或者比较输出功能时),捕获/比较寄存器 TIMx_CCR 被用作比较功能,配置脉冲计数器TIMx_CNT 为向上计数,重载寄存器 TIMx_ARR 被配置为 N,即 TIMx_CNT的当前计数值数值 X 在 TIMxCLK 时钟源的驱动下不断累加,当 TIMx_CNT 的数值 X 大于 N 时,会重置 TIMx_CNT 数值为 0 重新计数。而在 TIMxCNT 计数的同时, TIMxCNT 的计数值 X 会与比较寄存器TIMx_CCR 预先存储了的数值 A 进行比较,当脉冲计数器 TIMx_CNT 的数值 X小于比较寄存器 TIMx_CCR 的值 A 时, 输出高电平(或低电平),相反地,当脉冲计数器的数值 X 大于或等于比较寄存器的值 A 时,输出低电平(或高电平)。

  如此循环,得到的输出脉冲周期就为重载寄存器 TIMx_ARR 存储的数值(N+1)乘以触发脉冲的时钟周期,其脉冲宽度则为比较寄存器 TIMx_CCR 的值A 乘以触发脉冲的时钟周期,即输出 PWM 的占空比为 A/(N+1) 。

  • 测量 PWM 输入

  当定时器被配置为输入功能时,可以用于检测输入到 GPIO 引脚的信号(频率检测、输入 PWM 检测),此时捕获/比较寄存器 TIMx_CCR 被用作捕获功能。测量脉冲宽,需要两个捕获寄存器,在输入脉冲的不同边沿(pwm波的上升沿IC1和下降沿IC2)对TIM_CNT 的计数值进行捕获,得到这个 T1脉冲占空比为(N+1)/(A+1)。

  要测量的PWM 脉冲通过 GPIO 引脚输入到定时器的脉冲检测通道把脉冲计数器 TIMx_CNT 配置为向上计数,重载计数器重载寄存器TIMx_ARR 的 N 值配置为足够大。

  在输入脉冲 TI1 的上升沿到达时,触发 IC1 和 IC2 输入捕获中断,这时把脉冲计数器 TIMx_CNT 的计数值复位为 0,于是 TIMx_CNT 的计数值 X 在TIMxCLK 的驱动下从 0 开始不断累加,直到 TI1 出现下降沿,触发 IC2 捕获事件,此时捕获寄存器 TIMx_CCR2 把脉冲计数器 TIMx_CNT 的当前值 N1 存储越来,而 TIMx_CNT 继续累加,直到 TI1 出现第二个上升沿,触发了 IC1 捕获事件,此时 TIMx_CNT 的当前计数值 N2 被保存到 TIMx_CCR1。

  很明显 TIMx_CCR1(加 1)的值乘以 TIMxCLK 的周期,即为待检测的 PWM输入脉冲周期, TIMx_CCR2(加 1) 的值乘以 TIMxCLK 的周期,就是待检测的PWM 输入脉冲的高电平时间(小于预留值时为高电平),有了这两个数值,就可以计算出 PWM 脉冲的频率、占空比了。

  • 定时器的时钟源

  所有定时器(包括基本、通用、高级)使用内部时钟时,定时器的时钟源都被称为 TIMxCLK,但 TIMxCLK 的时钟来源并不是完全一样的。

  常见的配置中,AHB=72MHz,而APB1预分频器系数被配置为2,则PCLK1刚好达到最大值36MHz。如果APB1的分频系数不为1,则TIM2~7的时钟TIMxCLK = (AHB/2) × 2=72MHz。APB2预分频器的分频系数被配置为1时,PCLK2刚好达到最大值72MHz,而TIMxCLK则直接等于APB2分配器的输出。

 

STM32PWM之——定时器(1)的更多相关文章

  1. Objective-C三种定时器CADisplayLink / NSTimer / GCD的使用

    OC中的三种定时器:CADisplayLink.NSTimer.GCD 我们先来看看CADiskplayLink, 点进头文件里面看看, 用注释来说明下 @interface CADisplayLin ...

  2. 微信小程序中利用时间选择器和js无计算实现定时器(将字符串或秒数转换成倒计时)

    转载注明出处 改成了一个单独的js文件,并修改代码增加了通用性,点击这里查看 今天写小程序,有一个需求就是用户选择时间,然后我这边就要开始倒计时. 因为小程序的限制,所以直接选用时间选择器作为选择定时 ...

  3. [Java定时器]用Spring Task实现一个简单的定时器.

    今天做一个项目的的时候需要用到定时器功能.具体需求是: 每个月一号触发一次某个类中的方法去拉取别人的接口获取上一个月份车险过期的用户.如若转载请附上原文链接:http://www.cnblogs.co ...

  4. Node+fs+定时器(node-schedule)+MySql

    目标:将本人写博客时候的截图保存到桌面的图片 执行保存到指定文件进行整理 并写入数据库 先看最终的目录结构: package.json文件: { "name": "zqz ...

  5. 深入理解定时器系列第一篇——理解setTimeout和setInterval

    × 目录 [1]setTimeout [2]setInterval [3]运行机制[4]作用[5]应用 前面的话 很长时间以来,定时器一直是javascript动画的核心技术.但是,关于定时器,人们通 ...

  6. 前端开发:setTimeout与setInterval 定时器与异步循环数组

    前端开发:setTimeout与setInterval 定时器与异步循环数组 前言: 开通博客园三个月以来,随笔记录了工作中遇到的大大小小的难题,也看过无数篇令人启发的文章,我觉得这样的环境是极好的, ...

  7. 转载---javascript 定时器总结

    转载:http://www.jb51.net/article/40193.htm JS里设定延时: 使用SetInterval和设定延时函数setTimeout 很类似.setTimeout 运用在延 ...

  8. Node中的定时器详解

    在大多数的业务中,我们都会有一些需求,例如几秒钟实现网页的跳转,几分钟对于后台数据进行清理,node与javascript都具有将代码延迟一段时间的能力.在node中可以使用三种方式实现定时功能:超时 ...

  9. spring定时器,定时器一次执行两次的问题

    Spring 定时器 方法一:注解形式 配置文件头加上如下: xmlns:task="http://www.springframework.org/schema/task" htt ...

随机推荐

  1. angularjs 动态计算平均值

    <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...

  2. P3474 [POI2008]KUP-Plot purchase

    思路:单调栈 提交:>5次 错因:单调栈写法有问题+前缀和写错 题解: 若有\(>=k\ \&\&\ <=2\times k\)的点,显然直接选他就行了. 否则,我们 ...

  3. php中的print函数

    php print函数怎么用? 定义和用法 print() 函数输出一个或多个字符串. 注释:print() 函数实际不是一个函数,所以您不必对它使用括号. 提示:print() 函数比 echo() ...

  4. 五十六. playbook基础 、 playbook进阶

    1.playbook练习 安装Apache并修改监听端口为8080 修改ServerName配置,执行apachectl -t命令不报错 设置默认主页hello world 启动服务并设开机自启   ...

  5. Hihocoder #1333 : 平衡树·Splay2

    1333 : 平衡树·Splay2 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 小Ho:好麻烦啊~ 小Hi:小Ho你在干嘛呢? 小Ho:我在干活啊!前几天老师让我帮忙 ...

  6. 使用zabbix-proxy

    事情背景: vt上两个vps,只提供ipv6.(因为便宜嘛).而我的zabbix服务器在腾讯云.它丫的没有ipv6. 那么我没法监控它们了呀... 这咋个行呢? 想办法... 我还有另外的vps 可以 ...

  7. 高逼格Linux命令,忙的飞起

    以mac为例,先安装Homebrew 第一个命令:sl 安装命令:brew install sl 运行:sl 效果:小火车从右向左跑起来,污污污 第二个命令:cmatrix 安装命令:brew ins ...

  8. 什么是CSR

    CSR的全称是Certificate Signing Request. 是我们在申请Https证书是向CA所提供的一杯申请书.其内部储存了我们申请证书所需要的基本信息.它是一个经过Base64编码的纯 ...

  9. c++示例 计算器

    #include <iostream> using namespace std; int main() { char op; float num1, num2; cout << ...

  10. POJ 3616 Milking Time ——(记忆化搜索)

    第一眼看是线段交集问题,感觉不会= =.然后发现n是1000,那好像可以n^2建图再做.一想到这里,突然醒悟,直接记忆化搜索就好了啊..太蠢了.. 代码如下: #include <stdio.h ...