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的工作效率。

结束

你有你的路,我有我的路。至于适当的路,正确的路和唯一的路,这样的路并不存在。 – 尼采

经验分享 程序员 微信小程序 职场和发展