STM32开发笔记: HAL_Init函数——配置Flash预取
HAL_Init函数的定义就是初始化HAL库
该函数用于初始化HAL库;这一定是第一次在主程序中执行的指令(在调用任何其他指令之前)
-
HAL_Init,其执行如下: *配置Flash预取。 *配置SysTick每1毫秒产生一个中断, 由HSI计时(在这个阶段,时钟还没有配置,因此系统运行从内部HSI在16 MHz)。 *“NVIC组优先级”设置为“4”。 *调用HAL_MspInit()
这里只对配置Flash预取进行介绍
配置预取指缓存Configure the Flash prefetch.
Flash通过AHB协议执行指令存取和数据存取,它以预存取缓冲的方式,加速CPU代码的执行。
HAL_StatusTypeDef HAL_Init(void) { /* Configure Flash prefetch */ #if (PREFETCH_ENABLE != 0) #if defined(STM32F101x6) || defined(STM32F101xB) || defined(STM32F101xE) || defined(STM32F101xG) || defined(STM32F102x6) || defined(STM32F102xB) || defined(STM32F103x6) || defined(STM32F103xB) || defined(STM32F103xE) || defined(STM32F103xG) || defined(STM32F105xC) || defined(STM32F107xC) /* Prefetch buffer is not available on value line devices */ __HAL_FLASH_PREFETCH_BUFFER_ENABLE(); #endif #endif /* PREFETCH_ENABLE */
1.有关PREFETCH_ENABLE的定义 预取启用 2.defined(STM32F103x6) 定义芯片 3.HAL_FLASH_PREFETCH_BUFFER_ENABLE() 启用FLASH预取缓存
Flash文档
1.FLASH_ACR介绍 通过以上3 个步骤的学习,才算对预取指缓存的配置(Confgure Flash prefetch)有全面的认识,
也许读者会觉得这样学起来比较累,不过一旦你学会了方法, 再去看这些会觉得轻松很多,而且资料的内容很多,也不需要我们一一去阅读、 记忆,学会查我就可以了,这就是学习方法要远比一两个知识点的学习重要。
总结:
简单来说,预取指缓存(Flash Prefetch)就是CPU从Flash读取指令时的缓存器,该缓存器有2个,每个64 位,每次从Flash读取指令时,一次读取64位(因为Flash的带宽是64位),而CPU每次取指最多是32位,这样CPU在读取指令时,下一条指令已经装载在缓冲区中,从而可以提高CPU的工作效率。
结束
你有你的路,我有我的路。至于适当的路,正确的路和唯一的路,这样的路并不存在。 – 尼采