上一篇笔记分享了STM32的串口IAP实例:STM32串口IAP分享。其中,下载IAP程序时用ISP的方式进行下载。这里的ISP又是什么呢?

ISP方式下载程序原理

ISP:In System Programing,在系统中编程

在STM32F10xxx里有三种启动方式:

以ISP方式下载程序时需要把STM32的BOOT0引脚置1、BOOT1引脚置0,即从系统存储区(System Memory)启动。为什么设置从System Memory启动就可以使用串口来下载我们的程序呢?那是因为在芯片出厂前ST官方已经把一段自举程序(BootLoader程序)固化到这一块存储区。对于STM32F103ZET6来说,System Memory的起始地址为0x1FFFF000,可在芯片手册的内存映射图里找到:

其通过串口来接收数据并烧写到用户闪存存储器的起始地址(0x08000000)。只能烧写到这个地址,若keil里设置的地址不是这个地址,则编译出来的文件将烧录不成功。

用户闪存,即User Flash,同时也称为Main Flash。

这一段BootLoader程序源码是没有开源出来的,用户是不可修改的。我们在上一篇笔记的IAP实验中,IAP程序通过FlyMCU软件进行烧录,烧录的地址就是0x08000000

注意:不同系列不同型号的STM32固化的BootLoader是不同的,即使用的通讯接口是不同的。如STM32F1xxx系列只支持USART1:

STM32F4xxx系列只支持USART1、USART3、CAN2等接口:

其他型号的BootLoader支持的接口可查看AN2606文档,链接:

https://www.st.com/content/ccc/resource/technical/document/application_note/b9/9b/16/3a/12/1e/40/0c/CD00167594.pdf/files/CD00167594.pdf/jcr:content/translations/en.CD00167594.pdf

这里,关于数据协议的内容不展开讨论,有兴趣的朋友可自行研究。

IAP程序与ISP程序有什么不同?

从基本功能来看,IAP程序与ISP程序所做的事情好像是一样的,都是引导加载程序,所以网上有很多文章把IAP程序与ISP程序都称为BootLoader程序,要注意区分。但是,ISP与IAP还是有点区别的。

STM32内部Flash分为两部分,System FlashUser Flash。上电之后执行哪个Flash里的程序有boot脚来控制。

System Flash内存放的是ST官方编写的自举程序(ISP程序),我们是没有办法改变的。

User Flash是我们可以使用的Flash空间,我们编写的代码就是要烧录到User Flash中。我们可以把User Flash分为两部分,前面一部分空间用于烧写我们编写的IAP程序,后面一部分用于烧写我们编写的应用程序。其中,IAP程序用于更新我们的应用程序。

ISP程序用于把我们编写的程序更新到0x08000000地址上,如果我们的产品中的程序有IAP程序+应用程序,则此时0x08000000地址存放的程序就是IAP程序。ISP程序、IAP程序、应用程序的关系示意图如下:

如果我们的产品中的程序只有应用程序,则此时0x08000000地址存放的程序就是应用程序。ISP程序、应用程序的关系示意图如下:

以上就是今天的分享,如有错误,欢迎指出!

我的个人博客:https://zhengnianli.github.io/

我的微信公众号:嵌入式大杂烩

最新文章

  1. 敏捷开发与jira之项目现状
  2. 10月28日下午MySQL数据库的增加、删除、查询(匹配数据库登录和可以增、删、查的显示数据库内容的页面))
  3. 集合迭代器快速失败行为及CopyOnWriteArrayList
  4. C#中判断字符串中包含某个字符
  5. hdu 1044(bfs+状压)
  6. SUID ,SGID ,Sticky
  7. 用Hexo搭建属于自己的Blog
  8. android——仿微拍贷滑动圆形菜单
  9. Android签名机制---签名过程
  10. (转)Java中使用正则表达式的一个简单例子及常用正则分享
  11. PHP 5.0~5.6 各版本兼容性的 cURL 文件上传
  12. Python:从入门到实践--第十一章--测试代码--练习
  13. Promise实践
  14. PS制作动感酷炫水人街舞照
  15. SHA1算法原理【转】
  16. Oracle10g 64位 在Windows 2008 Server R2 中的安装 解决方案
  17. 搭建项目vue + vue-router + vuex + vue-i18n + element-ui + egg + sequelize
  18. 【转载】maven用处
  19. (转)SQL Server 2008无法修改表的解决办法
  20. C/C++ -- Gui编程 -- Qt库的使用 -- QtWidget

热门文章

  1. JAVA MAP转实体
  2. MyBatis基础之几道常见面试题详解
  3. CountDownLatch、CyclicBarrier和Semaphore使用
  4. glusterfs详解及kubernetes 搭建heketi-glusterfs
  5. Winform中跨窗体设置Zedgraph的属性并刷新曲线图
  6. Hive数据导入/导出
  7. sys模块理解补充
  8. Java开发者薪资最低?程序员只能干到30岁?国外真的没有996?Intellij真的比Eclipse受欢迎?
  9. 2019 DevOps 必备面试题——配置管理篇
  10. Hadoop 之 深入探索MapReduce