打印

使用USB时的外时钟问题

[复制链接]
3670|7
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
xing6507|  楼主 | 2008-1-2 14:19 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
因为项目的需要,外时钟为11.0592M,应当
如何设置,让STM32F103的USB可以使用
沙发
香水城| | 2008-1-2 15:04 | 只看该作者

如果外时钟为11.0592M时,无法得到USB的时钟

下图是STM32的时钟系统,从图中可以看到USB的时钟是从PLL的输出得到。

当使用外部时钟源时,PLL的输入为外部时钟或外部时钟除以2;如图所示,要使用USB,PLL的输出必须是48MHz或72MHz。

使用外部时钟时,因为振荡器的限制,外部晶体只能是4~16MHz之间;因为PLL的倍频系数为1~16中的任意值,因此外部晶体就有了如下一些数值可选:
  PLL输入直接使用外部时钟时:
 晶体频率(MHz)  倍频系数  PLL输出频率(MHz)
 16  3  48
 12  4  48
 9.6  5  48
 8  6  48
 6.857  7  48
 6  8  48
 5.333  9  48
 4.8  10  48
 4.364  11  48
 4  12  48

 晶体频率(MHz)  倍频系数  PLL输出频率(MHz)
 14.4  5  72
 12  6  72
 10.286  7  72
 9  8  72
 8  9  72
 7.2  10  72
 6.545  11  72
 6  12  72
 5.538  13  72
 5.143  14  72
 4.8  15  72
 4.5  16  72


  当PLL输入为外部时钟除2时,只需将上表中的晶体频率乘2即得可用的参数,当然晶体频率必须在4~16MHz的范围内。

使用特权

评论回复
板凳
xing6507|  楼主 | 2008-1-2 15:27 | 只看该作者

这样是一种限制

由于外围电路的需要,无法选择外时钟到上述频率,
USB接口就无法使用啦,为什么不独立出来USB的时钟

使用特权

评论回复
地板
香水城| | 2008-1-2 15:28 | 只看该作者

楼主可以试试使用PLL输入为外部时钟除2,再取PLL倍频系数为1

这样,经PLL倍频,你将得到:(11.0592 / 2) x 13 = 71.8848MHz,这个数值非常接近72MHz。

STM32是USB全速设备,USB协议规定全速设备的数据速率误差为+/-0.25%,按上面的配置也许可以使用,但我不敢保证一定能用,我也没有试过。

从另一方面讲,也许你可以换一个频率,通过分频得到你最终希望的频率。想必一定是你某个外设需要这个频率,查一下你的外设的频率误差,也许它的要求比USB要宽,这样你就可以迁就USB的频率了。

使用特权

评论回复
5
香水城| | 2008-1-2 15:33 | 只看该作者

楼主如果方便可以说说你的具体应用,外围电路要求的时钟

独立出来USB的时钟必然要占用一个管脚;STR71x系列就是独立出来USB的时钟占了一个管脚,结果很多用户有意见。

使用特权

评论回复
6
xing6507|  楼主 | 2008-1-2 17:37 | 只看该作者

如果外设要求低,就没必要使用外部时钟了

谢谢您的答复,我所说的独立时钟意思是芯片本身内部
有8M的时钟,直接6倍频出48M的USB时钟多好

使用特权

评论回复
7
香水城| | 2008-1-2 17:57 | 只看该作者

内部RC振荡器(HSI)不适合于做USB的时钟源

内部RC振荡器(HSI)不适合于做USB的时钟源,这是因为内部RC振荡器(HSI)在正常情况下(25°C)时的精度为+/-1%,在极端条件下为+/-3%;正像我上面说的USB要求+/-0.25%的误差,所以它不适合于做USB的时钟源。

请注意,RC振荡器受温度的影响很大,不能作为高精度时钟源。

使用特权

评论回复
8
YeCM| | 2008-6-3 14:34 | 只看该作者

学习了

使用特权

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

本版积分规则

11

主题

43

帖子

0

粉丝