STM32 跳转系统BootLoader

STM32 进入系统 bootLoader 主要有两种方法:

(1)一种是设置 boot 引脚,进入系统 bootLoader。
(2) 一种是应用程序跳转到系统 bootLoader。

串口1配置如下:

使用LL库可以使生成的代码能小一点。
GPIO使用HAL库可以打开HAL库定义,如果使用Flash库函数时就要打开HAL库,因为flash没有LL库。

boot.c源码如下:

#include "main.h"
#include "boot.h"#define ENABLE_INT() __set_PRIMASK(0) /* 使能全局中断 */
#define DISABLE_INT() __set_PRIMASK(1) /* 禁止全局中断 */#if 1
//下面两个变量放进函数内部会跳转失败,跳件错误中断!
void (*SysMemBootJump)(void); /* 声明一个函数指针 */
__IO uint32_t BootAddr = 0x1FFFF000; /*   的系统 BootLoader 地址 *//*
地址是0x1FFF 000 ~ 0x1FFF 77FF。系统存储区是用户不能访问的区域,它在芯片出厂时已经固化了启动程序,它负责实现串口、USB以及CAN等isp烧录功能。*/
/* 函 数 名: JumpToBootloader
* 功能说明: 跳转到系统 BootLoader
* 形 参: 无
* 返 回 值: 无
******************************************************************************************************
*/
void JumpToBootloader(void)
{uint32_t i=0;/* 关闭全局中断 */DISABLE_INT();/* 关闭滴答定时器,复位到默认值 */SysTick->CTRL = 0;SysTick->LOAD = 0;SysTick->VAL = 0;/* 设置所有时钟到默认状态, 使用 HSI 时钟 */LL_RCC_DeInit();/* 关闭所有中断,清除所有中断挂起标志 */for (i = 0; i < 8; i++){NVIC->ICER[i]=0xFFFFFFFF;NVIC->ICPR[i]=0xFFFFFFFF;}/* 使能全局中断 */ENABLE_INT();/* 跳转到系统 BootLoader,首地址是 MSP,地址+4 是复位中断服务程序地址 */SysMemBootJump = (void (*)(void)) (*((uint32_t *) (BootAddr + 4)));/* 设置主堆栈指针 */__set_MSP(*(uint32_t *)BootAddr);/* 跳转到系统 BootLoader */SysMemBootJump();/* 跳转成功的话,不会执行到这里,用户可以在这里添加代码 */while (1){}
}
#endif
MDK调试:
在跳转前面打个断点:

等待跳转,成功后会跳转到 0x1FFFF000 附近。一般是0x1FFFF020。

(づ ̄3 ̄)づ╭❤~biubiu

1 程序将在 0x08000000开始运行,再进入main函数。
2 进入系统BootLoader后在汇编窗口才能看到,运行后就可以用串口烧写了。
3 串口配置要和mcu相同。

STM32 跳转系统BootLoader相关推荐

  1. STM32 W5500 OTA功能 - bootloader及app的设计和实现

    通过W5500的网络功能,到文件服务器下载STM32要更新的固件(可执行bin文件),存储到STM32片内FLASH的APP备份区中,以待bootloader拷贝到APP代码执行区,以实现OTA在线升 ...

  2. 基于STM32的环境检测系统(DHT11、BMP280、1602、MQ2)

    基于STM32的环境检测系统 闲来无事,用手头STM32做个项目. 成品功能: 功能说明 材料 STM32ZET6开发板 LCD1602显示屏 DHT11温湿度模块 BMP280大气压强模块 MQ2烟 ...

  3. STM32的最小系统组成的详解

    经常使用STM32开发的工程师对于它的开发环境的最小系统是必须要有所了解的,特别是硬件工程师在设计硬件的时候对这个最小系统就要更加的深入了解了,如果最小系统的搭建都有问题,那以后的使用很难避免不出现问 ...

  4. 硬件断点反跳似乎_高性能应用程序:多路复用,反跳,系统字体和其他技巧

    硬件断点反跳似乎 by Atila Fassina 通过阿蒂拉·法西纳(Atila Fassina) 高性能应用程序:多路复用,反跳,系统字体和其他技巧 (High Performance Apps: ...

  5. Android WiFi热点完全研究(自定义创建、跳转系统界面设置、读取配置、切换,Android6.0适配)...

    前言: WiFi热点设置页面的安全性选项在Android 4.x上有"无"."WPA PSK"."WPA2 PSK"三个选项,在Androi ...

  6. 嵌入式系统串口解析二进制数_嵌入式系统Bootloader分析及DSP56F800串口加载功能实现...

    嵌入式系统 Bootloader 分析及 DSP56F800 串口加载功 能实现 张小平 ; 谷勇 ; 丰新龙 [期刊名称] <海军航空工程学院学报> [年 ( 卷 ), 期] 2010( ...

  7. stm32 U盘升级 bootloader程序 基于stm32f407 将升级包下载到U盘中,插入到设备中,完成对主程序的升级

    stm32 U盘升级 bootloader程序 基于stm32f407 将升级包下载到U盘中,插入到设备中,完成对主程序的升级,无需上位机操作. 清单: u盘升级的bootloader源码. YID: ...

  8. Android 从应用程序跳到系统应用管理和应用的权限管理页面

    今天给app添加权限,当用户禁止后会弹出alert提示用户,咱们这个app需要这个权限 没这个权限app的一些功能就不能使了,但用户已经关了 也不知道在哪打开 所以加个去设置的按钮 点击然后跳到系统应 ...

  9. 【STM32】时钟系统RCC

    目录 一.时钟树 1.时钟源 2.高速外部时钟信号(HSE) 3.低速外部时钟信号(LSE) 4.系统时钟(SYSCLK) 5.时钟输出(MCO) 6.AHB 参考文献 一.时钟树 本文以STM32F ...

最新文章

  1. 在线和本地两种方法构建 RAxML 进化树方法和解读
  2. Mybatis使用时因jdbcType类型大小写书写不规范导致的异常
  3. 高精度除以低精度板子
  4. android fragment传递数据,Android 两个Fragment之间传递数据实例详解
  5. 一步步用zTree(1)
  6. 九十四、一文带你玩转简单的flask
  7. 修改WordPress中上传附件2M大小限制的方法
  8. redhat rpmforge epel 安装源配置
  9. 在Eclipse中如何操作zookpeer
  10. rails再体验(第一个程序)
  11. 数据结构与算法基础-02
  12. Linux 命令(120)—— route 命令
  13. python自动化上传文件_python接口自动化测试二十三:文件上传
  14. 详解百度地图API之地图操作
  15. Protues 8.8 SP1 无需破解 可用直装版 指路
  16. 《学会提问——批判性思维指南》完整读书笔记
  17. g120xa正反转参数_原创分享 | 西门子G120变频器的参数备份
  18. 知识图谱-知识体系与知识融合-实体消歧
  19. 老徐和阿珍的故事:强引用、软引用、弱引用、虚引用,傻傻分不清楚
  20. 像模拟人生的 java游戏下载_我的世界1.7.2模拟人生整合包

热门文章

  1. AVfoundation中焦距的设置(slider实现拉近拉远镜头)
  2. 【Simulink教程案例8】基于simulink的LQR控制器设计——以环形倒立摆为控制对象
  3. Python 编程的入门不二之选——Python编程:从入门到实践
  4. 网络综合布线工程后期验收
  5. Testin云测率先全面支持Android 5.0手游云测试
  6. GBase 8a集群v953版本自增列介绍
  7. UG NX 12 曲线分析
  8. 基于vue房屋合租网站的设计与实现
  9. 无线网络与广域网技术
  10. 粒子群算法的函数极值求解