• 定时器功能简介

  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分配器的输出。

 

最新文章

  1. netload 加载程序集抛异常----无法加载程序集解决办法
  2. 第三次个人作业——软件产品评测(K米Android端)
  3. C#基础之垃圾回收
  4. socket学习笔记——并发服务器与I/O程序分割客户端
  5. my vimrc
  6. Oracle分页查询语句的写法(转)
  7. freemark页面中获取list循环中的counter
  8. Bootstrap_Javascript_手风琴
  9. bootloader启动代码init.s解析----IRQ中断处理函数
  10. jQuery总结---版本一
  11. unity3D:游戏分解之角色移动和相机跟随
  12. 201521123050《Java程序设计》第1周学习总结
  13. hdu_1017(水水水,坑格式)
  14. 简说Python生态系统的14年演变
  15. 理解不为人知的ClassLoader
  16. git忽视上传规则文件 .gitignore
  17. 【转】百度UEditor控件中的map组件不支持https使用的问题解决
  18. Java编程实现多线程TCP服务器完整实例
  19. HDU 3579
  20. Rime输入法的配色方案

热门文章

  1. SQL Server Report Server
  2. [Luogu] 开关
  3. 《视觉SLAM十四讲》学习日志(二)——初识SLAM
  4. org.hibernate.TypeMismatchException: Provided id of the wrong type for class *** Expected ***
  5. let和const关键字
  6. Echarts 设置 图标 默认平铺 数据为零时绘画
  7. python中heapq对dict进行排序
  8. [MyBatis]浅谈如何实现事务处理
  9. hashMap 底层原理+LinkedHashMap 底层原理+常见面试题
  10. windows7安装docker异常:looks like something went wrong in step ‘looking for vboxmanage.exe’