标题:
stm32时钟初始化配置问题
[打印本页]
作者:
3lian
时间:
2014-3-1 01:18
标题:
stm32时钟初始化配置问题
stm32虽然已经用了一段时间了,但是一直用的都是教程里带的程序,最近想自己写写代码了,结果各种碰壁,一点小小的问题也能让我忙活一两天,真让人郁闷,这里说一下stm32最基础的时钟配置上我遇到的麻烦。
时钟配置我是使用RCC的库函数完成的,基本思路就是打开8M的HSE时钟,然后使用PLL倍频9倍成72M的系统时钟。但是看似简单的函数写好后片子一直工作不起来,我开始以为是在检测时钟是否启动的while循环中给卡住了,还以为外部8M晶振不起振,后来经过一个下午的测试程序,竟然是配置PLL成9倍的函数出了问题,我把倍频倍数调小就ok了。但是这没道理啊。72M的时钟在不到9倍的pll中根本没法到达啊,我网上找了一下总算发现了一个我漏掉的细节,那就是rcc配置的时候还需要配置flash!
我网上原本找的代码里有配置flash的库函数调用,但我以为是其他应用所以就没放在心上,结果就是在这里吃了大亏。我翻了一下技术手册,有这么一段
这些选项应与闪存存储器的访问时间一起使用。等待周期体现了系统时钟 (SYSCLK) 频率与闪存访问时间的关系:
0 等待周期,当 0 < SYSCLK < 24MHz
1 等待周期,当 24MHz < SYSCLK ≤ 48MHz
2 等待周期,当 48MHz < SYSCLK ≤ 72MHz
预取缓冲区(2个64位):在每一次复位以后被自动打开,由于每个缓冲区的大小(64位)与闪存的带宽相同,因此只通过需一次读闪存的操作即可更新整个缓冲区的内容。由于预取缓冲区的存在,CPU可以工作在更高的主频
所以在初始化的时候还需要加上两个函数
FLASH_SetLatency(FLASH_Latency_2);
FLASH_PrefetchBufferCmd(FLASH_PrefetchBuffer_Enable);
这样系统可以工作在72M的时钟下
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1