STM32三种启动模式
在STM32F10xxx里,可以通过 BOOT[1:0] 引脚选择三种不同启动模式,如下图所示
在系统复位后,SYSCLK的第4个上升沿,BOOT引脚的值将被锁存。用户可以通过设置BOOT1和BOOT0引脚的状态,来选择在复位后的启动模式。
在从待机模式退出时,BOOT引脚的值将被被重新锁存;因此,在待机模式下BOOT引脚应保持为需要的启动配置。在启动延迟之后,CPU从地址0x0000 0000获取堆栈顶的地址,并从启动存储器的0x0000 0004指示的地址开始执行代码。
由于存储映射已经固定,代码区始终从地址0x0000 0000开始(通过ICode和DCode总线访问),而数据区(SRAM)始终从地址0x2000 0000开始(通过系统总线访问)。Cortex-M3的CPU始终从ICode总线获取复位向量,即启动仅适合于从代码区开始(典型地从Flash memory启动)。STM32F10xxx微控制器实现了一个特殊的机制,系统可以不仅仅从Flash memory或system memory启动,还可以从embedded SRAM启动。
根据选定的启动模式,main flash memory、system memory或SRAM可以按照以下方式访问:
● 从main flash memory启动:main flash memory被映射到启动空间(0x0000 0000),但仍然能够在它原有的地址(0x0800 0000)访问它,即flash memory的内容可以在两个地址区域访问,0x0000 0000或0x0800 0000。
● 从system memory启动:system memory被映射到启动空间(0x0000 0000),但仍然能够在它原有的地址(互联型产品原有地址为0x1FFF B000,其它产品原有地址为0x1FFF F000)访问它。
● 从embedded SRAM启动:只能在0x2000 0000开始的地址区访问SRAM。
注意: 当从内置SRAM启动,在应用程序的初始化代码中,必须使用NVIC的异常表和偏移寄存器,从新映射向量表之SRAM中。
内嵌的Bootloader
内嵌的Bootloader存放在system memory,由ST在生产时写入,用于通过可用的串行接口对flash memory进行重新编程:
● 对于小容量、中容量和大容量的产品,可以通过USART1接口启用bootloader
● 对于互联网型产品,可以通过以下某个接口启用bootloader:USART1、USART2、CAN2、USB OTG。USART接口依靠内部8MHZ振荡器(HSI)运行,CAN和USB OTG接口只能当外部有一个8MHZ、14.7456MHZ或25MHZ时钟(HSE)时运行。