找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 8520|回复: 0
打印 上一主题 下一主题
收起左侧

stm32时钟初始化配置问题

[复制链接]
跳转到指定楼层
楼主
ID:59284 发表于 2014-3-1 01:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
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的时钟下
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表