ST 推出自家的IDE:STM32 CubeIDE 有一段时间了,现在正好有新的项目了,尝试直接把它用起来了,不用再来回去切换 CubeMX 和其他 IDE 了。

目前的项目是要做一个 IAP 的框架,那就先从 Bootloader 到 APP 的程序跳转开始。手头正好有一块 NUCLEO-F072RB,就用它了。

首先新建一个工程:IAP_Bootloader

Bootloader 的一项任务就是要跳转到用户 APP 去执行。在 main.c 中新建一个函数 go2APP

#define FLASH_APP_ADDR 0x8008000

typedef void (*pFunction)(void);

void go2APP(void) {

uint32_t JumpAddress;

pFunction Jump_To_Application;

printf("BOOTLOADER Start\n");

//Check

if (((*(__IO uint32_t*) FLASH_APP_ADDR) & 0x2FFE0000) == 0x20000000) {

printf("APP Start...\n");

HAL_Delay(100);

// Jump to user application //

JumpAddress = *(__IO uint32_t*) (FLASH_APP_ADDR + 4);

Jump_To_Application = (pFunction) JumpAddress;

// Initialize user application's Stack Pointer //

__set_MSP(*(__IO uint32_t*) FLASH_APP_ADDR);

Jump_To_Application();

} else {

printf("No APP found!!!\n");

}

}

先简单预留 32KB 给 Bootloader,所以 FLASH_APP_ADDR 就是从 0x8008000 开始。如何从串口 printf,可以参考这里 (STM32 Cube IDE 下实现串口 printf)

可以看到现在打出的 log 是:No APP found。简单说明一下判断是否有APP存在的机制,就是判断APP开头是否是合理的堆栈地址,而RAM地址是从 0x20000000 开始的。

接下里再来建立一个 IAP_APP 的工程。在 main.c 中,只是简单添加一句 printf(“APP Run\n”)。主要需要修改的生成的可以执行文件的起始地址,需要修改 STM32F072RBTX_FLASH.ld

找到 FLASH (rx) : ORIGIN = 0x8000000, LENGTH = 128K 一句,修改为 FLASH (rx) : ORIGIN = 0x8008000, LENGTH = 96K。再来编译运行一下

如果使用了中断(通常都会用),还需要修改中断向量表的偏移量。

对于 STM32F1 系列,在文件 system_stm32f1xx.c 中搜索 VECT_TAB_OFFSET,原本的值通常为:0,在本例中需要改成0x8000 即可。

对于 STM32F0 系列,由于没有中断向量偏移寄存器,需要手动复制中断向量表。在 main 函数开始处加入:

memcpy((void) 0x20000000, (void) 0x8000, 0x100);

SYSCFG->CFGR1 |= 0x03;

将中断向量复制到内存,并映射内存地址到 0x00000000 。

由于占用了系统内存的前256个字节,还需要再修改一下 STM32F072RBTX_FLASH.ld 排除这部分内存,以免被覆盖。找到 RAM (xrw) : ORIGIN = 0x20000000, LENGTH = 16K,修改为 RAM (xrw) : ORIGIN = 0x20000100, LENGTH = 16128 即可。

看到 APP Run 的 log 打出来,这样一个简单的从 bootloader 到 APP 的跳转就算完成了 ^o^

stm32cubeide烧写程序_STM32 Cube IDE 下实现 IAP —— (1) 程序跳转相关推荐

  1. 关于C#开发山寨操作系统,程序语言,浏览器,IDE,Office,Photoshop等大型程序的可行性歪论及意义...

    首先,起这么个大标题不是为了眼球,也决非本人自大,本人对技术是很一般的也就是个普通人.不过因为受一些言论,贴子,新闻等综合思考而产生. 有些人认为C#这不行那不行,只能做做"企业管理&quo ...

  2. stm32cubeide烧写程序_STM32Cube工具,覆盖开发全过程(一)

    STM32Cube家族的软件工具,从选型到开发/调试,到代码二进制烧录,选项字节操作,到运行监测,覆盖了全部的开发过程.它们各自有功能侧重,也有功能重叠,但是合在一起,就提供给STM32开发者,一个无 ...

  3. linux串口程序不能,在uclinux下编写串口通信程序,COM2只能发送数据不能接收,是怎么回事呢?...

    菜鸟 2005-08-17 20:59:00    评分 3楼 嵌入式Linux开发板上NFS文件系统的使用 浏览过442次 作者:深圳远峰 近年来,随着计算技术.通信技术的飞速发展,嵌入式产品成为信 ...

  4. linux32位运行64位程序,32位windows下可以运行的程序在64位linux下报错

    已结贴√ 问题点数:20 回复次数:3 32位windows下可以运行的程序在64位linux下报错 filt.c在32位windows code:blocks 10.05下运行无任何异样. 传到64 ...

  5. stm32cubeide烧写程序_stm32mp157 Cortex M4开发篇:stm32CubeIDE开发环境搭建

    写在前面: 本文章为<STM32MP1系列教程之Cortex-M4开发篇>系列中的一篇,全系列总计11篇.笔者使用的开发平台为华清远见FS-MP1A开发板(STM32MP157开发板).针 ...

  6. stm32cubeide烧写程序_STM32CubeIDE使用入门的几个常见问题

    ST公司为广大STM32用户提供了免费的集成开发工具STM32CubeIDE有一段时间了.常言道,万事开头难.这里就其入门使用的几个常见问题分享交流下. 1.STM32CubeIDE该免费工具哪里可以 ...

  7. stm32cubeide烧写程序_初学STM32CubeIDE

    初学 STM32CubeIDE 一.关于安装 安装已经有好多人说过了,我就不重复. 二.认识界面 初初打开软件, 自动打开 " Information Center " 就是信息中 ...

  8. uboot模式下烧写Android分区表,xboot-Android4.0下烧录遇到的问题 001 fastboot + SD 的办法 - Powered by Discuz!...

    1 方法一: ubuntu下用fastboot烧录SD卡uboot的问题: 1.1 我参照手册:x210v3 android4.0平台用户手册 20130724 的第5.6章的方法: 先用 ./mk ...

  9. 怎么用centos7运行c语言程序_在Linux下运行C语言程序

    市面上常见的Linux都是发行版本,典型的Linux发行版包含了Linux内核.桌面环境和各种常用的必备工具,国内使用较多的是Ubuntu(乌班图).CentOS.Fedora. 我以Fedora 2 ...

最新文章

  1. rn+与android+交互,React native 与Android原生交互方式(一)
  2. java单例注册表_Spring对单例的底层实现,单例注册表
  3. 《I'm a Mac:雄狮训练手册》——1.12 开机快捷键
  4. ssl2646-线段树练习3【线段树】
  5. 我的第一程序语言python
  6. 重磅开源|AOP for Flutter开发利器——AspectD
  7. 配色没有灵感?最流行的配色案例!没有一个人不爱的
  8. 深入理解Intel Core Microarchitecture
  9. 程序员的每个阶段,都应该需要思考自己要什么?
  10. mysql 数据库和实例_mysql中数据库和数据库实例的概念区别
  11. 细胞生长曲线拟合matlab,绘制细胞生长曲线及细胞群体倍增时间的简化计算
  12. 南方cass简码识别大全_cass-简码识别详细分解.doc
  13. 用Java给您的图片瘦身之Thumbnailator技术
  14. 当你半夜失眠时,玩手机越玩越精神怎么办
  15. SSL证书的加密算法都有哪些?
  16. Java基础学习经验分享
  17. Debian安装redis
  18. 《邂逅美丽》之赏析2
  19. Modelsim10.5和ISE14.7安装及联合仿真
  20. 撸一个基于VUE的WEB管理后台(一)

热门文章

  1. 续谈大数据之足球盘口赔率水位分析思路及其实现利器
  2. hive删除表或表信息出现的问题
  3. 关于python语言和人工智能以下哪个说法不正确_以下关于机器学习说法正确的是?_学小易找答案...
  4. 10. 哈夫曼树、Trie、补充
  5. 实名推荐的神器,你安排上了几款?
  6. 3d游戏建模行业真的能一直走下去麽?兴趣爱好能否带来面包
  7. 游戏代理要把用户数据和充值数据牢牢抓在自己手上
  8. 【华大九天Aether芯片EDA模拟电路仿真 Centos7安装】
  9. 每日一练20210426
  10. Spring详解—— IOC 和 DI 区别