打印

请教:STM3F103时钟问题

[复制链接]
2286|4
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
ifreecoding|  楼主 | 2012-1-28 16:17 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
最近在用一块STM32F103VB的板子,用的3.5的固件库,程序跑起来了,功能也实现了,但感觉时钟频率不对,用一段死循环的程序测试主频,有的时候正常有的时候不正常,但串口外设的打印都是正常的,说明外设频率没有问题,只是CPU内核的主频有变化。
有时候将编译选项从O0换到O2问题消失,但有时候不消失,有时候加一行无用的代码问题消失,有时候又不消失。
把设置PLL的超时时间宏HSE_STARTUP_TIMEOUT改为最大值也无法解决问题。

我使用的是外部8M晶振,在stm32f10x.h文件里打开了STM32F10X_MD和USE_STDPERIPH_DRIVER宏定义,应该是将单板配置成了72MHZ。

试了很多种方法,但问题仍然不确定出现。

将程序烧写到芯片内部,无论如何上下电,如果是出现则一直出现,如果不出现则一直不出现。
将程序增减一些无关的代码,重新烧写,问题就有可能出现或者不出现,无论如何上下电,如果是出现则一直出现,如果不出现则一直不出现。

不知道哪位遇到过这种情况没有,请给指条明路,万分感谢!
沙发
ifreecoding|  楼主 | 2012-1-28 17:45 | 只看该作者
我再补充一下,我在里面做了一个10ms Tick定时器,然后执行一段2秒钟的循环程序,在循环程序执行完毕后将当时的tick打印出来。通过打印数据可以看出,这段循环程序执行完的时间是不同的,有时候时间正确,现实tick是200,有时候错误,现实tick是250。而与实际的钟表时间对比,发现tick定时器的时间是正确的,无论打印是200还是250,都是正确的,问题在,这段2秒的循环程序执行的时间不同。

求解!

使用特权

评论回复
板凳
sjnh| | 2012-1-29 13:16 | 只看该作者
本帖最后由 sjnh 于 2012-1-29 13:17 编辑

外设时钟没有问题,说明PLL等都没有问题,问题可能出在你的测试程序中。
编译器把你的一些数据优化了,导致出现时间不准确问题。
例如你在主程序和中断中使用同一个变量

使用特权

评论回复
地板
ghpzhu| | 2012-1-31 10:14 | 只看该作者
如3楼,有的时候变量前加一个volatile就可以解决问题了。

使用特权

评论回复
5
香水城| | 2012-1-31 11:27 | 只看该作者
可以从几个方面考虑:
1)测试方法有问题
2)程序编写有问题
3)观测方法有问题
4)对编译器的理解问题
5)硬件的问题

使用特权

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

本版积分规则

2

主题

68

帖子

3

粉丝