本帖最后由 学哥哥 于 2017-6-23 09:00 编辑
背景:当下载一个比较大的工程到32板子上时,如果每一次下载都花了大几十秒,个人觉得太费时间了,因此 就得改变一下思路了。就这样,有了这个帖子的出现
1.什么是自举配置
存储器采用固定的存储器映射,代码区域起始地址为 0x0000 0000(通过 ICode/DCode 总线访问),而数据区域起始地址为 0x2000 0000(通过系统总线访问)。Cortex™-M4FCPU 始终通过 ICode 总线获取复位向量,这意味着只有代码区域(通常为 Flash)可以提供自举空间。STM32F4xx 微控制器实施一种特殊机制,可以从其它存储器(如内部 SRAM)进行自举。在 STM32F4xx 中,可通过 BOOT[1:0] 引脚选择三种不同的自举模式,如表1所示。
表1 自举模式 器件退出待机模式时,还会对 BOOT 引脚重新采样。因此,当器件处于待机模式时,这些引脚必须保持所需的自举模式配置。这样的启动延迟结束后,CPU 将从地址 0x0000 0000 获取栈顶值,然后从始于 0x0000 0004 的自举存储器开始执行代码。
2.为什么设置自举配置
虽然目前flash寿命很长,但是在flash中调试烧录程序是一个较慢的过程,而选择在内存里调试程序,速度较快。另外要注意的是,建议SRAM调试时用,因为掉电后数据会丢失。
3.怎样设置自举配置
(1)BOOT0和BOOT1置1,系统将从内置SRAM中启动。
(2)如果器件从 SRAM自举,在应用程序初始化代码中,需要使用NVIC异常及中断向量表和偏移寄存器来重新分配 SRAM 中的向量表。中断向量表通常防止于用户程序开始,所以flash运行时,向量表位于0X08000000处,而当代码存于SRAM运行时,向量表位置为0X20000000。因此,初始化NVIC可以这样定义向量表位置
NVIC_SetVectorTable(0x20000000 , 0x0);
(3)在编译器中,要进行正确的设置。这里以IAR 5.4为例说明。
a)工程选项中Linker项,Config选项卡中,指定Linker Configuration File为stm32f10x_ram.icf, 该文件在FWLIB安装包中可以获得,IAR4和5分别有不同的配置文件。
b) 同样是工程选项中Debug项,Download选项卡中,去掉所有钩子,不下载代码到flash。
如有错误,烦请指正,谢谢
|