STM32官方IAP例程详细说明,以及Demo演示

我们常看到ISP、ICP、IAP等英语缩写词组,它们的主要作用就是对程序代码进行下载(编程)。

下面将介绍关于编程的基础知识,以及结合STM32官方提供的Demo详细讲述一下其中的内容。

1关于ISP、ICP、IAP

1.ISP

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

比如:使用STC-ISP对STC芯片编程,利用Flash loader对STM32编程等。

支持ISP的芯片一般在芯片内部固化了一段(用ISP升级的)boot程序

2.ICP

In Circuit Programing,在电路编程。

ICSP:In-Circuit Serial Programming,在电路串行编程。如:对EEPROM编程等。

ICP编程方式网上各有说法,从字面含义(在电路)来说,所有处于编程的芯片都需要上电,都处于电路中。不严格来说利用J-Link、ST-Link、e-Link32等工具进行编程也属于在电路编程(ICP)。

在维基百科中,在系统编程(ISP),也称为在电路串行编程(ICSP)。

3.IAP

In applicating Programing,在应用编程。

这里是本文说的重点,可以简单理解为:在程序运行的过程中进行编程(升级程序,更新固件)。

IAP是用户自己的程序在运行过程中对User Flash的部分区域进行烧写,目的是为了在产品发布后可以方便地通过预留的通信口对产品中的固件程序进行更新升级。

[来自:百度百科]


IAP通信口

IAP的通信口有许多种:UART串口、ETH以太网、I2C、SPI......等。按理说只要能传输数据的通信口都能实现IAP的功能。

本文结合STM32官网提供的例程,利用UART在应用编程(IAP)。

2ST官网IAP例程

ST官网提供的IAP例程有很多很多,比如:

库:有使用标准外设库(SPL)的、有使用硬件抽象层库(HAL)的;

通信接口:有使用USART的,有使用I2C的,有使用ETH的等。

MCU型号:STM8S、STM32F1、F4、L1等几乎全系列都有。

ST官网提供的各种IAP,其方法和原理其实都类似:就是将程序文件(二进制文件)写入FLASH。

本文以最简单的基于(STM32F10x)利用SPL库+UART的IAP为例来给大家讲述一下。

STM32F10xxx in-application programming using the USART官方地址:

https://www.stmicroelectronics.com.cn/en/embedded-software/stsw-stm32008.html

提示:公众号不支持外部链接,请复制链接到浏览器下载)

图片

相关参考文档和代码例程都在这个网址下载,下一章节针对这里该IAP讲述几点重要内容。

我下载后上传至百度网盘地址:

https://pan.baidu.com/s/1umdwlShsJpL8rLdeb9n6Cw

密码:2t3j

提示:该链接后期可能会失效,建议到官网下载)

3IAP例程几个要点

1.例程概要说明

该代码工程基于STM32F1,使用UART通信口,利用超级终端(上位机)、通过YModem协议实现代码程序的数据传输和写入Flash。

2.IAP软件工程

我们解压(上面)下载好的软件工程包,进入目录,通过MDK-ARM(为例),如下图;

图片

本文以MDK-ARM为例,你也可以通过EWARM、TrueSTUDIO等工具打开。

因该工程代码是之前用MDK-ARM V4版本建立的,现在用V5版本打开会提示如下信息:

图片

只需要点击“Migrate to Device Pack”即可,V5版本使用了“设备支持包”,这里大概意思就是使用设备支持包兼容以前老版本工程。

选择对应的目标(我们以F103ZE为例,选择大容量、小容量在于他们的FLASH页大小不一样),选择10E-EVAL,如下图:

图片

直接编译,没有错误警告,此时如果有对应的板卡,可直接下载。

这里是Keil MDK现成的源代码工程,具体如何创建的,这里不描述,推荐阅读我的专栏:Keil系列教程

3.说明

这个程序只是IAP程序,放在以0x0800 0000为起始的地址。而IAP程序的作用是将应用程序(二进制文件)下载到应用程序对应的地址。

因此,我们会将FLASH划分我两个区域:IAP程序区域,APP程序区域。

图片

这里IAP程序有两个作用:1.对APP程序编程;2.引导程序跳转至应用程序。所以,这段APP程序也叫BootLoader

为防止IAP程序不被(第一部分代码)不被意外破坏,一般建议对IAP程序进行“写保护”。

这个APP地址0x0800 3000是怎样来的呢?

见IAP程序代码:

图片

所以,我们APP应用程序的其起始地址就必须对应为0x0800 3000 才行。不然,跳转之后没有应用程序,则会出错。

提示:

它这里是通过按键方式选择执行IAP,还是执行APP;一般建议通过倒计时(比如5s):5s之内通过串口选择下载,否则自动跳转到APP程序执行。这里就需要自己根据情况修改代码。

Demo里程可以通过选择3跳转到APP程序,初学者可以直接不使用按键判断,进行测试,如下图,修改一下:

4APP代码和地址问题

上一章节是讲述的IAP程序,本节讲APP程序修改地址的问题。

1.添加代码

在代码开始设置向量表偏移:

NVIC_SetVectorTable(NVIC_VectTab_FLASH, 0x3000);

0x3000代表偏移量

2.修改配置

project -> Options 

3.生成Bin

具体可以参看我另外一篇文章:

MDK-ARM如何生产Bin文件

4.APP程序代码

为方便大家学习,我提供在按照上面修改过的APP代码工程给大家下载,地址和上面一样:

https://pan.baidu.com/s/1umdwlShsJpL8rLdeb9n6Cw

密码:2t3j

5超级终端安装,程序下载,Demo演示

1.超级终端下载、安装

官方提供的文档是HyperTerminal超级终端下载程序,这个可以百度谷歌搜索下载安装。我这后面一直使用SecureCRT这款终端,这终端属于商业软件,但在网上可以找到很多po解的办法。

2.程序下载,Demo演示

硬件连接好,将生成的程序文件(Demo.bin)指定位置(为方便测试下载,我拷贝到桌面)-> 打开终端 -> 键盘按1 ->选择文件 ->下载完成 -> 键盘按3 执行程序。

图片

以上所有内容就是关于IAP的基础知识和例程说明,希望对你有帮助。

  • 24
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
STM32F103是STMicroelectronics(意法半导体)推出的一款32位ARM Cortex-M3内核的微控制器系列,IAP(In-Application Programming)是一种在应用程序运行时对微控制器进行固件升级的技术。 STM32F103的IAP例程是指用于实现IAP功能的示例代码。通常,IAP功能可以通过串口、USB、网络等方式进行固件升级。IAP例程基于STM32F103的硬件和软件特性,提供了一套完整的功能接口,方便用户在其应用程序中添加和使用IAP功能。 IAP例程通常包括以下几个主要部分: 1. 引导程序(Bootloader):IAP功能通常需要一个引导程序,它负责在系统启动时检测是否需要进行固件升级,并根据需求进入IAP模式或正常模式。在IAP模式下,引导程序负责与外部设备通信,接收新固件并更新存储器中的应用程序。 2. 通信接口:IAP例程会提供一种或多种通信接口,如串口、USB、CAN等,用于与外部设备进行通信。通过这些接口,用户可以将新固件传输到微控制器,并获取升级过程的状态信息。 3. 存储器管理:IAP例程通过存储器管理模块进行固件升级。它可以对Flash、EEPROM等存储器进行读取、擦除和写入操作,实现对应用程序的替换和更新。 4. 升级过程控制:IAP例程还负责监控升级过程中发生的错误,并在固件传输、存储器操作等环节出错时进行相应的处理。例如,如果固件校验失败,IAP例程可能会回滚到原来的应用程序版本,并给出警告提示。 总之,STM32F103的IAP例程使得用户可以在应用程序运行时方便地进行固件升级,提高了系统的可靠性和可维护性。它为用户提供了一套完整的接口和功能模块,简化了IAP开发过程,并减少了潜在的错误。同时,用户也可以根据自己的需求进行定制和扩展。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值