博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
STM32-IAP学习笔记
阅读量:2029 次
发布时间:2019-04-28

本文共 1044 字,大约阅读时间需要 3 分钟。

一、IAP名词解释

所谓的IAP(在应用编程)说白了,功能就是可以实现用户程序的升级。为此实际开发中需要准备两份工程代码,一份工程代码我们称之为BootLoader程序,另一份工程代码我们称之为APP程序。

在实际操作过程中是先通过软件(如keilMDK的download按钮)手动下载第一份BootLoader程序到STM32的FLASH中,该部分代码主要通过某种通信接口(常用USART)接收第二份APP程序,然后写入到FLASH中。

二、STM32运行流程

STM32的FLASH程序运行是从0x08000000开始的!

1、加入IAP前,程序运行流程

在这里插入图片描述

2、加入IAP后,程序运行流程

在这里插入图片描述

三、使用方法

另外需要注意,起始地址偏移量为 0X200的倍数即可

1、BootLoader程序

①、keil魔术棒中的Target配置如下:(不需要动,按照单片机选型就可以)

在这里插入图片描述
②、stmflash.h中需要注意如下内容:

在这里插入图片描述

BootLoader大小为10KB
在这里插入图片描述

2、APP程序

①、keil的魔术棒配置如下:(APP程序在FLASH中的起始地址和大小需要根据实际情况配置下,RAM的话默认即可)

在这里插入图片描述

②、设置APP程序的中断向量表偏移,如下图

在这里插入图片描述

如果不在APP程序里面做一下设置,那么APP程序里面的中断其实会跳进 bootloader 里面(假设bootloader 也使用了一样的中断)。故,需要让APP里面生成自己单独的一套中断。

所以,需要设置下中断向量偏移,一般是APP程序相对于Flash地址偏移了多少,就设置中断向量偏移多少。

SCB->VTOR = FLASH_BASE | 0x4000;

③、设置擦除FLASH方式Erase Sectors

Erase Full Chip:烧写程序之前擦除整个Flash存储器。Erase Sectors:  烧写程序之前擦除程序要使用的扇区。Do not Erase:   不进行擦除操作

不然小心把BootLoader也给擦除了。。。。

在这里插入图片描述

最后

BootLoader 程序里面设置的硬件配置,中断配置在跳转到APP程序里面的时候同样有效!除非APP里面重写硬件配置,中断配置,否则,还是默认运行的BootLoader里面配置的!

故,最好的方式是凡是BootLoader里面用到的中断函数,用户程序全部重新写一遍.可以不用,但是必须重写!

像这样:

BootLoader中的滴答定时器中断:

在这里插入图片描述

在APP程序中,即使我们没有用到,也要像如下所示写上去!

在这里插入图片描述

转载地址:http://gunaf.baihongyu.com/

你可能感兴趣的文章
LeetCode130. Surrounded Regions (思路及python解法)
查看>>
LeetCode179. Largest Number(思路及python解法)
查看>>
LeetCode227. Basic Calculator II(思路及python解法)
查看>>
LeetCode166. Fraction to Recurring Decimal(思路及python解法)
查看>>
LeetCode454. 4Sum II(思路及python解法)
查看>>
LeetCode395. Longest Substring with At Least K Repeating Characters(思路及python解法)
查看>>
LeetCode268. Missing Number
查看>>
iOS组件化开发一远端私有库建立(二)
查看>>
我们应当怎样做需求分析
查看>>
问题账户需求分析
查看>>
《uml大战需求分析》阅读笔记05
查看>>
远程办公之:向日葵X 使用教程
查看>>
Varnish4.x配置文件详解
查看>>
Roundcube Webmail 安装配置图文详情
查看>>
Mysql innodb_flush_log_trx_commit 简单调优
查看>>
Piranha web 界面LVS DR 模式配置图文详解
查看>>
Piranha LVS DR 模式 HA 集群配置
查看>>
Apache RewriteCond RewriteRule 跳转故障解决
查看>>
UII自动化之Appium
查看>>
Html
查看>>