首页 | 新闻 | 新品 | 文库 | 方案 | 视频 | 下载 | 商城 | 开发板 | 数据中心 | 座谈新版 | 培训 | 工具 | 博客 | 论坛 | 百科 | GEC | 活动 | 主题月 | 电子展
返回列表 回复 发帖

定时器与蜂鸣器(1)

定时器与蜂鸣器(1)

STM32 入门系列教程
  定时器与蜂鸣器
  前一期教程已经详细讲述了 STM32 中断编程,本来不想再讲述定时器。因 为定时器自然也是用到中断处理。但一想,既然作为入门系列教程,就应该具备 完整性。实际上,笔者在网上搜了一下,发现仍然有许多网友卡在定时器这里, 因此有必要专门列出一期教程讲述定时器。 相信您一定学习过单片机的定时器。 没错~! STM32 系列的 CPU 定时器与单 片机定时器操作类似。只要去配置自动装载寄存器、时钟预分频、溢出方式(向 上溢出还是向下溢出)等等。当然 STM32 寄存器比较复杂,远不止这些,本系 列教程主要是入门型,如果您希望深入学习 STM32 定时器,我们在论坛上传了 一篇比较不错的文章,好像叫《STM32 入门篇之通用定时器彻底研究》 ,作者不 详STM32 一、STM32 通用定时器原理
  STM32 系列的 CPU,有多达 8 个定时器,其中 TIM1 和 TIM8 是能够产生三 对 PWM 互补输出的高级定时器,常用于三相电机的驱动,它们的时钟由 APB2 的输出产生。其它 6 个为普通定时器,时钟由 APB1 的输出产生。 下图是 STM32 参考手册上时钟分配图中,有关定时器时钟部分的截图:
  实际上 STM32 的 CPU 文档给出的图与这个图略有区别。 但是我们还是想研 究这个图。原因是这个图对我们思路的理解比较有帮助。从图中可以看出,定时 器的时钟不是直接来自 APB1 或 APB2,而是来自于输入为 APB1 或 APB2 的一 个倍频器,图中的蓝色部分。 下面以通用定时器 2 的时钟说明这个倍频器的作用: APB1 的预分频系数 当 为 1 时,这个倍频器不起作用,定时器的时钟频率等于 APB1 的频率;当 APB1 的预分频系数为其它数值(即预分频系数为 2、 8 或 16)时, 4、 这个倍频器起作用, 定时器的时钟频率等于 APB1 的频率两倍。 可能有同学还是有点不理解, OK, 我们举一个例子说明。 假定 AHB=36MHz, 因为 APB1 允许的最大频率为 36MHz,所以 APB1 的预分频系数可以取任意数 值;当预分频系数=1 时,APB1=36MHz,TIM2~7 的时钟频率=36MHz(倍频器不 起作用);当预分频系数=2 时,APB1=18MHz,在倍频器的作用下,TIM2~7 的 时钟频率=36MHz。 有人会问,既然需要 TIM2~7 的时钟频率=36MHz,为什么不直接取 APB1 的预分频系数=1?答案是:APB1 不但要为 TIM2~7 提供时钟,而且还要为其它 外设提供时钟;设置这个倍频器可以在保证其它外设使用较低时钟频率时, TIM2~7 仍能得到较高的时钟频率。
   再举个例子:当 AHB=72MHz 时,APB1 的预分频系数必须大于 2,因为 APB1 的最大频率只能为 36MHz。 如果 APB1 的预分频系数=2, 则因为这个倍频 器,TIM2~7 仍然能够得到 72MHz 的时钟频率。能够使用更高的时钟频率,无 疑提高了定时器的分辨率,这也正是设计这个倍频器的初衷。
返回列表