本文章详细介绍如何在Keil开发环境中为基于STM32系列微控制器设置SRAM作为启动内存的步骤和注意事项。适合嵌入式开发者参考学习。
为了使STM32微控制器从SRAM启动而不是默认的Flash存储器启动,在硬件层面需要将BOOT0引脚设置为高电平(即1),同时保持BOOT1同样为高电平,这样设备会在上电或复位时直接进入SRAM模式并执行其中的第一条指令。
在软件配置方面,如果使用的是STMicroelectronics提供的标准库函数版本3.5及以上,则可以在`system_stm32f10x.c`文件中进行相应的设置。在这个文件里定义了宏`#define VECT_TAB_SRAM 2.x`,这指示中断向量表的位置被设定在SRAM区域。
对于动态切换中断向量表的地址位置,可以使用STM32微控制器内置的Nested Vectored Interrupt Controller (NVIC) 提供的功能。以下两个函数分别用于将IVT设置为Flash或SRAM起始地址:
1. `NVIC_SetVectorTable(NVIC_VectTab_FLASH, 0x00);` 将中断向量表的位置设在Flash存储器的开始位置,即0x00000000。这是默认配置,在从Flash启动时使用。
2. `NVIC_SetVectorTable(NVIC_VectTab_RAM, 0x2000000);` 将中断向量表的位置设在SRAM起始地址处,即地址为内存映射的开始位置(通常是0x2000000)。当从SRAM启动时需要调用此函数。
使用Keil MDK IDE配置STM32工程以支持SRAM启动的过程如下:
1. 打开项目属性对话框。
2. 在Target选项卡中,找到“Startup”类别,并将“Vector Location”的设置更改为Internal RAM。这指示编译器生成的中断向量表应位于SRAM区域而非Flash存储区。
3. 确保Code Location被正确配置为Internal FLASH, 以保证程序代码依然存放在Flash中,因为启动时需要加载到SRAM中的只是初始化数据和运行所需的少量代码片段而已。
完成上述设置后,Keil将生成一个适合从SRAM启动的映像文件。当编译并下载该映像至STM32设备上之后,在BOOT引脚配置正确的情况下,微控制器将会在复位时直接进入SRAM模式,并执行存储于其中的程序代码。
值得注意的是,由于SRAM本身不包含任何初始化信息,从SRAM启动的应用需要在其启动函数(例如`SystemInit()`)中自行加载Flash中的初始设置到内存并进行必要的跳转操作。这样可以确保在运行期间能够顺利访问和利用Flash中的完整应用程序库或数据结构。
综上所述,配置STM32微控制器以实现其从SRAM而非默认的Flash启动涉及硬件引脚设定、软件函数调用以及Keil IDE项目设置等多方面的知识和技术细节。这些步骤对于开发人员来说非常重要,能够帮助他们灵活地在不同存储介质之间切换启动方式,并根据具体需求选择最合适的解决方案。