原创 STM32配置时钟时注意设置FLASH等待周期

2009-8-4 08:55 3587 4 5 分类: MCU/ 嵌入式

来源 CEPARK网站http://www.cepark.com/Index.html  作者: hnrain


今天是2008年7月28日,广州天气热啊,热得叫人受
不了。中午回来啥活都不想干了,还是玩玩手头上的
STM32板吧。
    兴致勃勃地把复位及时钟控制(RCC)的寄存器定义写
完了,没得午觉睡倒算了,还累得满头大汗……看来这
事有点吃力不讨好,真想用别人现成的头文件算了,最后
还是咬咬牙自己写吧,至少可以让自己对寄存器结构熟悉
一些。
    傍晚回来再写个测试程序,满以为一次就OK的,可
调试时却发现,运行到选择PLL时钟后程序就跑飞……
顿时就傻眼了……检查各个寄存器配置,似乎没什么问题
啊:选择外部8M时钟,不分频输入到PLL,设置PLL为9倍
频(注意实际写入到寄存器中为7),AHB、ABP2不分频,
ABP1为2分频(注意设置为8才是2分频),都没有超过最大
频率啊。看来想要搞个72M的主频遇到麻烦了……试着将倍
频降下来,当主频为48M时,系统可以正常工作了,莫非是
USB模块的时钟没有设置为1.5分频?再检查,没错啊,是
1.5分频的。找不到原因,额头上开始冒出了豆大的汗珠,
还好今天天气热,被掩饰过去了,不然让那些行家看到笑
死...莫非俺的片子是被人打磨过的...
    最后去论坛问了下,斑竹提示说是否忘记了设置FLASH
等待周期?哈哈,好象我的程序是没有这个步骤,因为手册
里没有关于FLASH的寄存器描述,所以把它给忽略了...不过
里面也有提到系统时钟不同时,需要设置不同的等待周期,
24M以下使用0等待,24M~48M使用1等待,48M~72M使用2等
待。找到FALSH的手册,看了下上电复位后的等待设置为0,
晕,72M主频不跑飞才怪了。在配置时钟之前,增加了一句
FLASH_ACR=0x32,将等待周期设置为2,再次运行程序,
流水灯流了起来~~~
    根据圈圈以往的经验,通常像访问存储器的相关寄存
器,复位后都会设置为最坏条件下的值(例如等待周期设置
为最大),然后再由用户自己配置以达到最佳性能。不过,
STM32这个是内部的FLASH,上电复位后系统将自动使用内部
8M时钟做为系统时钟,因而设置为0等待是没问题的。

PARTNER CONTENT

文章评论1条评论)

登录后参与讨论

用户1393282 2009-8-6 08:28

呵呵,看看
相关推荐阅读
ruanwentao 2009-08-04 08:56
【分析】STM32从Flash中运行程序的时序分析
来源 CEPARK网站http://www.cepark.com/Index.html  作者: hnrain大家都知道STM32的CPU时钟频率可以达到72MHz,以后还会更快,但是由于半导体制造工...
ruanwentao 2009-08-04 08:55
关于调试STM32程序时,某些标志位被调试软件意外清除的问题
在调试的过程中,使用调试软件的寄存器或存储器显示窗口,可以很方便地查看外设寄存器的状态。很多朋友都碰到过这样的问题:在单步调试时始终不能在显示窗口看到某些标志位的变化,应该设置这些标志位的时候,窗口中...
ruanwentao 2009-08-04 08:54
STM32温度传感器的使用和计算
来源 CEPARK网站http://www.cepark.com/Index.html  作者: hnrainSTM32内置一个温度传感器,通过ADC_IN16这个通道可以读出温度传感器的电压。在ST...
ruanwentao 2009-08-04 08:53
STM32系列产品编号信息
来源 CEPARK网站http://www.cepark.com/Index.html  作者: hnrain每种STM32的产品都由16个字母或数字构成的编号标示,用户向ST订货时必须使用这个编号指...
ruanwentao 2009-08-04 08:53
STM32三种启动模式中存储器的存储介质
来源 CEPARK网站http://www.cepark.com/Index.html  作者: hnrainSTM32三种启动模式对应的存储介质均是芯片内置的,它们是:1)用户闪存 = 芯片内置的F...
EE直播间
更多
我要评论
1
4
关闭 站长推荐上一条 /3 下一条