1. IAP(bootloader)程序

1.1 内部Flash地址分配

/* Start of the Flash address */
#define STM32_FLASH_BASE 0x08000000
/* End of the Flash address */
#define STM32_FLASH_END_ADDRESS 0x081FFFFF //Flash Size 2MB
/* Define the IAP application size */
#define IAP_FLASH_SIZE 0x8000 //bootloader size 32KB
/* Define the address from where user application will be loaded. */
#define FLASH_APP_ADDR (uint32_t)(STM32_FLASH_BASE+IAP_FLASH_SIZE)
/* Define the user application size */
#define FLASH_APP_SIZE (STM32_FLASH_END_ADDRESS - FLASH_APP_ADDR + 1)

1)设置内部Flash起始地址(STM32_FLASH_BASE):固定值0x0800 0000

2)设置内部Flash结束地址(STM32_FLASH_END_ADDRESS):根据实际使用的芯片闪存大小进行设置,因为我使用的是STM32F429ZIT6,其闪存大小为2MB,这里设置为0x081F FFFF

3)设置IAP程序Size(IAP_FLASH_SIZE):一般为16Kb左右(0x4000)。这里设置为0x8000即32KB(0x0800 0000~0x0800 7FFF),占用扇区0和扇区1。

4)设置APP程序起始地址(FLASH_APP_ADDR):STM32F4内部Flash起始地址 + IAP程序Size=0x0800 8000

5)设置APP程序Size(FLASH_APP_SIZE):内部Flash结束地址 - APP程序起始地址 + 1

1.2 MDK编译器中设置IAP程序下载起始地址与大小

这里设置将IAP程序下载到STM32_FLASH_BASE = 0x0800 0000,大小IAP_FLASH_SIZE = 0x8000(这里设置和IAP_FLASH_SIZE值一致,可以保证当IAP程序大于32KB时,编译器会报错,这时你需要考虑修改IAP_FLASH_SIZE的值,或者精简代码)

1.3 设置中断向量表起始地址

  在main()函数开始的位置加入以下代码,设置中断向量表存放在SCB->VTOR + 4 = 0x0800 0004起始的地址:

SCB->VTOR = FLASH_BASE | 0x00;//设置中断向量表偏移量. 也可以在SystemInit() 里设置VECT_TAB_OFFSET

2. APP应用程序

2.1 MDK编译器中设置APP程序下载起始地址与大小

  APP起始地址和上面1.1.4)中FLASH_APP_ADDR的值一致,Size设置为0x0020 0000,即2MB。

2.2 设置中断向量表起始地址

  在main()函数开始的位置加入以下代码,设置中断向量表存放在SCB->VTOR + 4 = 0x0800 8004起始的地址:

#define IAP_FLASH_SIZE 0x8000 //bootloader size 32KB
SCB->VTOR = FLASH_BASE | IAP_FLASH_SIZE;//设置偏移量 FLASH_BASE | 0x8000
这里请注意:中断向量表存放的位置必须是0x200的倍数,因此,这里IAP_FLASH_SIZE 也必须是0x200的倍数,即0x00, 0x200, 0x400 ...

3. 在MDK生成.bin文件

D:\keil5\ARM\ARMCC\bin\fromelf.exe --bin --output ../OBJ/PWM.bin ../OBJ/PWM.axf

说明:
fromelf: D:\keil5\ARM\ARMCC\bin\fromelf.exe
MDK自带工具路径,笔者的路径如上所示,请修改为自己的路径(或者点击右边的文件夹小图标,找到该工具)。
[options]: --bin --output ../OBJ/PWM.bin
生成bin文件命令,想把生成的bin文件放在什么地方(记住路径最前面是 ../(两个点),而不是 ./(一个点),之前就被坑了)。
input_file: ../OBJ/PWM.axf
输入文件,这里是用axf格式的文件转换为bin文件,找到你工程里的axf文件所在位置,填上去就可以了。

STM32F4 串口IAP程序要点的更多相关文章

  1. STM32F103 串口-IAP程序升级

    STM32F103 串口-IAP程序升级 通常情况下我们给STM32系列的单片机烧录程序文件的时候,使用SWD.J-link或者通过设置BOOT引脚后,使用串口进行程序下载,这样的方式直接一次性将程序 ...

  2. STM32F103/429串口IAP+Ymodem升级

    起因: 串口IAP升级在正点原子的例程中有讲解,正点原子的方法是:在RAM中开辟一个120K的数据空间,用来存放bin文件,bin文件通过串口一次性发送到单片机,然后再实现程序的跳转.但是这种方法在实 ...

  3. STM32之串口IAP更新升级

    一.IAP简介 IAP是应用编程,目的是为了在产品发布后可以方便地通过预留的通信口对产品中的固件程序进行更新升级,后续产品发布后,更新程序我只需要把.bin文件通过串口发送给芯片就可以执行更 新,很方 ...

  4. STM32串口IAP分享

    什么是IAP? IAP是In Application Programming的首字母缩写,IAP是用户自己的程序在运行过程中对User Flash的部分区域进行烧写,目的是为了在产品发布后可以方便地通 ...

  5. STM32 Bootloader基于ymodem传输协议串口IAP升级详解

    硬件:stm32f103cbt6 软件:STM32F10x_StdPeriph_Lib_V3.5.0 文章目录 1 预备知识 2 Bootloader 2.1 启动流程 2.2 校验跳转地址是否有效 ...

  6. C语言PIC16 serial bootloader和C#语言bootloader PC端串口通信程序

    了解更多关于bootloader 的C语言实现,请加我QQ: 1273623966 (验证信息请填 bootloader),欢迎咨询或定制bootloader(在线升级程序). 新PIC16 Boot ...

  7. C#--简单的串口通信程序

    前几天做毕业设计,其中要用到串口和下位机进行通信,于是自己捣鼓了一个简单的串口通信程序. 在做通信之前要先弄一个SerialPort组件出来,当然也可以通过程序来创建.本次设计中采用的是拖的winfo ...

  8. 创建C#串口通信程序详解

    在.NET平台下创建C#串口通信程序,.NET 2.0提供了串口通信的功能,其命名空间是System.IO.Ports.这个新的框架不但可以访问计算机上的串口,还可以和串口设备进行通信.我们将使用标准 ...

  9. Apple Watch: WatchKit 应用程序要点

    Apple Watch: WatchKit 应用程序要点 本文译自:Apple Watch: WatchKit App Essentials WatchKit 应用程序架构 上一篇文章简单介绍了 Wa ...

随机推荐

  1. nginx 与 uWsgi 详解

    什么是nginx nginx是一个开源的,支持高性能,高并发的代理服务软件 nginx不但是一个优秀的web服务软件,还可以作为反想代理和负载均衡,以及缓存服务或使用 为什么使用nginx 支持高并发 ...

  2. HAproxy四层TCP负载均衡配置及测试

    --------------------------------------------------centos 7 处理--------------------------------------- ...

  3. Pwnable-cmd1

    ssh cmd1@pwnable.kr -p2222 (pw:guest) 先看一下c的源码 #include <stdio.h> #include <string.h> in ...

  4. 【转】Restful架构详解

    1. 什么是REST REST全称是Representational State Transfer,中文意思是表述(编者注:通常译为表征)性状态转移. 它首次出现在2000年Roy Fielding的 ...

  5. MySQL 王者晋级之路

    3.2 Query Cache: 3.3 存储引擎 一.TokuDB的特点: – 插入性能加快20到80倍– 压缩数据减少存储空间– 数据量可扩展到几个TB– 不会产生索引碎片– 支持Hot Colu ...

  6. [日常] SNOI2019场外VP记

    SNOI2019场外VP记 教练突然说要考一场别省省选来测试水平...正好还没看题那就当VP咯w... Day 1 八点开题打 .vimrc. 先看了看题目名...一股莫名鬼畜感袭来... 怎么T1就 ...

  7. CSP-J&S2019第二轮游记认证

    Day 0 我毕竟不是竞赛省,在黑龙江这个弱省任何初中都没有竞赛生的----在初中,文化课第一----永远如此. 因而,我并不能翘掉周五的文化课来复习或是提前前往省城参加下午2:00~6:00的试机. ...

  8. Spring Boot(十二):LocalDateTime格式化处理

    Java 8之后,日期类的处理建议使用java.time包中对应的LocalDateTime, LocalDate, LocalTime类.(参考Java8新特性) 在Spring Boot中(验证版 ...

  9. Linux中$()和${}区别(转)

    文章转自  https://blog.csdn.net/hxchuangxiaochuan/article/details/81204084 $( )中放的是命令,相当于` `,例如todaydate ...

  10. PHP 中的关于 trait 的简单

    什么是 trait 看看 PHP 官网的介绍. 自 PHP 5.4.0 起,PHP 实现了一种代码复用的方法,称为 trait. Trait 是为类似 PHP 的单继承语言而准备的一种代码复用机制.T ...