每个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