stm32f103c8t6最小系统板上的BOO
时间: 2024-05-14 13:11:29 浏览: 229
在STM32F103C8T6最小系统板上,BOO代表的是“Boot0”,它是一个引脚,用于控制芯片的启动方式。当Boot0引脚被拉高电平时,芯片会从Flash中启动程序,而当Boot0引脚被拉低电平时,芯片则会进入STM32的系统下载模式,可以通过外部下载器或者串口下载程序到芯片中。
如果您需要更加详细的介绍或者了解关于STM32F103C8T6最小系统板的其他问题,可以继续提问哦!
相关问题
stm32 boo0
STM32是一种由意法半导体(STMicroelectronics)生产的32位微控制器系列。在STM32系列中,BOO0是STM32微控制器的一种启动模式。
BOO0启动模式是指在微控制器上电或复位时的一种启动模式选择。在BOO0模式下,微控制器会从用户定义的引脚读取引导信息来确定启动方式。这使得开发者可以通过改变引脚的电平状态来选择不同的启动模式,从而实现不同的功能。
BOO0模式的选择通常通过外部跳线或开关来实现。在特定的引脚配置下,当微控制器上电或复位时,会读取BOO0引脚的电平状态。根据不同的电平状态,可以选择不同的启动方式,比如从Flash存储器、SRAM或外部存储器中启动。
BOO0启动模式的灵活性使得开发者能够根据具体的应用需求选择不同的启动方式,从而实现更多的功能和灵活性。这在一些特殊的应用场景下非常有用,比如支持多种引导方式或者在开发过程中进行调试。
总之,STM32 BOO0模式是STM32微控制器的一种启动模式选择方式,通过改变引脚电平状态来选择不同的启动方式,从而实现不同的功能和应用需求。
STM32BOO跳转APP
### STM32 Bootloader 跳转至应用程序的方法
#### 1. 设置BOOTLOADER 和 APP 的空间
为了使STM32能够区分BOOTLOADER和应用程序,需要合理规划两者占用的闪存区域。通常情况下,BOOTLOADER会被放置在较低地址处,而应用程序则位于较高地址位置。例如,如果使用的是0x80000字节大小的Flash存储器,则可以将前4K保留给BOOTLOADER,剩余部分留给应用代码[^5]。
#### 2. 接收并写入应用程序BIN文件到FLASH
当通过UART或其他接口接收到新的固件更新数据包后,应将其保存为二进制格式(.bin),随后利用HAL库中的`HAL_FLASH_Program()`函数逐页编程的方式把该镜像写入指定的应用区段内。注意要确保擦除目标扇区后再进行写操作,并且每次写之前都要验证CRC校验码以保证数据完整性。
#### 3. 修改应用程序链接脚本与启动文件
对于应用程序而言,必须调整其ROM起始地址以便于正确加载到预设的位置上(如前所述可能是0x08002000);同时还需要更改中断向量表偏移量指向新基址处,这可以通过修改startup_stm32xxx.s汇编源码里的Vectors定义来完成。此外,在编写C/C++项目时记得同步更新scatter file或.ld文件内的MEMORY布局描述语句。
#### 4. 实现从BOOTLOADER 到 APP 的跳转逻辑
一旦确认有合法有效的用户程序存在于外部Flash中之后就可以准备切换控制权了。具体做法是在适当时候调用如下所示的一组指令序列:
```c
void JumpToApplication(uint32_t *pAppVectorTable){
/* Enable instruction cache */
SCB_EnableICache();
/* Disable interrupt before jumping to application */
__disable_irq();
/* Remap RAM at address 0x0000_0000 (optional depending on device family)*/
// SYSCFG->MEMRMP |= SYSCFG_MEMRMP_SWAP_BANK;
/* Set stack pointer and program counter from vector table of the app*/
uint32_t StackPointer = *(volatile uint32_t*) pAppVectorTable;
void (*ResetHandler)(void)=*(void (**)(void))(pAppVectorTable + 1);
/* Load new SP value into MSP register */
__set_MSP(StackPointer);
/* Execute reset handler which will start user code execution */
ResetHandler();
}
```
上述代码片段展示了如何安全地转移处理器上下文环境至另一份独立存在的可执行体当中去。这里的关键在于读取目的映像的第一项作为堆栈指针初值(MSP),第二项则是入口点即复位处理程序(RST Handler)。
阅读全文
相关推荐













