打印

STM32 明明是32位的CPU,却将定时器设计成16位的!

[复制链接]
34410|59
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
dxfshsh|  楼主 | 2007-12-27 21:56 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
真不明白,明明是32位的CPU,却将定时器设计成16位的,对有些应用32位的定时器可是很重要的悠!
希望下一个版本能有所改进。ST加油!!!!
来自 2楼
香水城| | 2007-12-28 15:24 | 只看该作者

关于STM32的CPU为32位,定时器却为16位的探讨

首先,感谢dxfshsh提出了这个很好的问题,使我们可以就这个问题有一个交流的机会。


STM32的通用定时器可以实现很多功能,例如:定时计数、测量外部信号脉冲宽度、产生PWM波形、测量输入的PWM波形等。在所有这些操作中,定时器的位数主要影响两个参数,一个是定时或测量的精度,另一个是定时的时间长度。下面我们以一个列表看一下定时的精度和定时的长度有多少:



关于各个预分频器的作用请参考下图的右半部分:


从表中可以看出,在最高精度下(14ns)定时长度只有0.91ms,在精度为250ns(即4MHz)时定时长度可达16.38ms。这是仅使用了定时器的独立工作模式的情况。


对于需要高精度并且长延时的应用,16位的定时(上述精度和时间长度)就不够了,这个问题可以有两种解决办法;第一个办法是通过软件的接力完成,这个方法的可行性在于定时时间较长,允许软件有足够的时间介入计数,这种办法非常方便,多数情况都可使用。第二种办法是使用STM32特有的定时器级联功能,实现32位的计数效果,因为级联是由硬件触发的,当设置好各项寄存器后,软件不必中途干预,可以达到高精度长延时的要求。进一步地,STM32最多有四个定时器,如果串联起来,甚至可以实现4*16=64位的计数效果。

简单地说级联功能,即是一个定时器的定时条件满足后,可以产生一个触发信号启动另一个定时器的定时操作。

在ST的网站上有一个应用笔记和对应的例子程序,详细说明和演示了如何使用STM32的级联功能实现32位的输入捕获和32位的输出比较功能,各位可以研究一下:
   应用笔记下载地址:http://www.st.com/stonline/products/literature/an/13711.pdf
   演示程序下载地址:http://www.st.com/stonline/products/support/micro/files/an2592.zip

这是该应用笔记的摘要:
【AN2592 如何使用STM32F101xx和STM32F103xx的时钟链接功能实现定时器的32位精度】 (2007年8月)
  许多应用需要32位的精度,用于测量超过几百秒的外部信号的周期并产生延迟或较大间隔的周期信号。
  STM32F101xx和STM32F103xx提供了链接两个16位定时器借以获得32位精度的能力,这是使用了定时器的一种特殊配置和链接机制。
  本文给出了模拟一个32位定时器的基本原则;介绍了两个基本的操作模式:输入捕获模式和输出比较模式。每个模式都是单独介绍并附有实例。



最后希望各位朋友能够帮助我们更加深入地了解应用的需求,对于以工业控制和嵌入式控制仪器而言,因为我们接触的应用有限,不是很清楚哪里需要这样的高精度定时,如果方便我们可以做几个实例分析,这样更有利于我们对今后产品的升级和定位。

使用特权

评论回复
板凳
香水城| | 2007-12-27 22:35 | 只看该作者

哈哈,以前就有人问过这个问题

先做个记号,楼主也可以先看看以前这个帖子,请各位先帮忙对帖子中6楼的问题给点提示;等我们整理一下来回答楼主这个问题。

STM32F103增强型产品的基本信息

使用特权

评论回复
地板
hotpower| | 2007-12-28 00:37 | 只看该作者

哈哈~~~可能有时8位的更好~~~这和延时的长短有关~~~

与32位真没关系~~~

使用特权

评论回复
5
computer00| | 2007-12-28 00:52 | 只看该作者

我比较喜欢32位的计数器。

使用特权

评论回复
6
s99060| | 2007-12-28 01:02 | 只看该作者

既然有编码器接口功能是应该不止16位的了

2500线的编码器1圈就是2500/5000/10000个脉冲,最多能检测26圈多点
就算400线的要用的话应该用1600个脉冲了,也才41圈不到

使用特权

评论回复
7
hotpower| | 2007-12-28 04:07 | 只看该作者

哈哈~~~楼上肯定想要大位数的计数器了~~~

使用特权

评论回复
8
hexenzhou| | 2007-12-28 09:14 | 只看该作者

Atmel、Luminary也是16位的定时器,很不爽!

自从用了NXP的32位定时器后就喜欢上它,非常适合高频率的脉冲测量。不过STM32好像可以把两个16位定时器进行级联形成32位的定时器,不知好用否?

使用特权

评论回复
9
cauthy| | 2007-12-28 12:19 | 只看该作者

有预分频器

有预分频器,定时起多少位影响不大

使用特权

评论回复
10
香水城| | 2007-12-28 12:34 | 只看该作者

8楼点出了问题的关键

使用特权

评论回复
11
handerson| | 2007-12-28 12:35 | 只看该作者

以前就有人问过这个问题

使用特权

评论回复
12
s99060| | 2007-12-28 14:17 | 只看该作者

哈哈,预分频器相当于2500线的编码器换成25线的

那倒是可以省大笔钱了,25线的俺就自己做了哦

使用特权

评论回复
13
hotpower| | 2007-12-28 15:33 | 只看该作者

这个问题软件很好解决~~~原理和环型计数器相同

使用特权

评论回复
14
computer00| | 2007-12-28 15:36 | 只看该作者

总之就是不爽。增加到32位又复杂不了多少。

使用特权

评论回复
15
香水城| | 2007-12-28 15:42 | 只看该作者

硬件解决对于使用者来说肯定是最简单方便的

但从硬件设计上讲,16位变32位就意味着芯片面积不只是成倍地增加了,结果必然是成本的上升,搞不好这款芯片的成本优势都没了。

使用特权

评论回复
16
cauthy| | 2007-12-28 16:02 | 只看该作者

香版言之甚有理

相信做过CPLD/FPGA的,都有这种感觉

使用特权

评论回复
17
computer00| | 2007-12-28 16:31 | 只看该作者

不会吧?这么夸张?就几个计数器变成32位的,芯片面积就要

没搞过IC设计,不知道怎么会这样...

不就是多几个触发器而已吗?

从3个计数器增加到6个计数器芯片面积就要翻倍了?

使用特权

评论回复
18
john78| | 2007-12-28 16:43 | 只看该作者

就是,不知道怎么搞的str9也是16位的,郁闷

就是,不知道怎么搞的str9也是16位的,郁闷

使用特权

评论回复
19
s99060| | 2007-12-28 18:42 | 只看该作者

能级联倒是可以解决一下,但不能是预分频那种模式的

但这样对付一只编码器也要干掉3个定时器了:
两个串联成32bit编码器方式对外计数,1个产生固定时间触发捕捉寄存器用来测量速度

这种地方用软件就不方便了,电机可能刚好在进位处快速抖动着,1会儿加1会儿减的

使用特权

评论回复
20
xwj| | 2007-12-28 18:48 | 只看该作者

不足就是不足,不同意预分频器的解释

这一点上不知道ST是怎么想的...

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

38

主题

154

帖子

0

粉丝