STM32中关于“闪存读取”的一些细节问题

每个STM32的参考程序中都会见到以下的函数 

 /* Enable Prefetch Buffer */
    FLASH_PrefetchBufferCmd(FLASH_PrefetchBuffer_Enable); 

//使能或者失能预取指缓存 

    /* Flash 2 wait state */
    FLASH_SetLatency(FLASH_Latency_2); 

//设置代码延时值 

这些函数什么意思,为什么要这样设置。STM32参考手这样表述的。

闪存读取
闪存的指令和数据访问是通过AHB总线完成的。预取模块是用于通过ICode总线读取指令的。仲裁是作用在闪存接口,并且DCode总线上的数据访问优先。
读访问可以有以下配置选项:

等待时间:可以随时更改的用于读取操作的等待状态的数量。

预取缓冲区(2个64位):在每一次复位以后被自动打开,由于每个缓冲区的大小(64位)与闪存的带宽相同,因此只通过需一次读闪存的操作即可更新整个缓冲区的内容。由于预取缓冲区的存在,CPU可以工作在更高的主频。CPU每次取指最多为32位的字,取一条指令时,下一条指令已经在缓冲区中等待。

半周期:用于功耗优化。
注: 1. 这些选项应与闪存存储器的访问时间一起使用。等待周期体现了系统时钟(SYSCLK)频率与闪存访问时间的关系:
存储器和总线架构 STM32F10xxx参考手册
23/524
参照2008年12月 RM0008 Reference Manual 英文第7版
本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本
0等待周期,当 0 < SYSCLK < 24MHz
1等待周期,当 24MHz < SYSCLK ≤ 48MHz
2等待周期,当 48MHz < SYSCLK ≤ 72MHz

永不止步步 发表于12-22 14:08 浏览65535次
分享到:

已有0条评论

暂时还没有回复哟,快来抢沙发吧

添加一条新评论

只有登录用户才能评论,请先登录注册哦!

话题作者

永不止步步
金币:67410个|学分:345327个
立即注册
畅学电子网,带你进入电子开发学习世界
专业电子工程技术学习交流社区,加入畅学一起充电加油吧!

x

畅学电子网订阅号