[应用相关] STM32 IAP应用编程几个要点

[复制链接]
 楼主| 烟雨蒙蒙520 发表于 2021-1-31 23:38 | 显示全部楼层 |阅读模式
1.ISP
ISP:In System Programing,在系统编程。
比如:使用STC-ISP对STC芯片编程,利用Flash loader对STM32编程等。
支持ISP的芯片一般在芯片内部固化了一段(用ISP升级的)boot程序。

 楼主| 烟雨蒙蒙520 发表于 2021-1-31 23:38 | 显示全部楼层
2.ICP

In Circuit Programing,在电路编程。

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

 楼主| 烟雨蒙蒙520 发表于 2021-1-31 23:40 | 显示全部楼层
ICP编程方式网上各有说法,从字面含义(在电路)来说,所有处于编程的芯片都需要上电,都处于电路中。不严格来说利用J-Link、ST-Link、e-Link32等工具进行编程也属于在电路编程(ICP)。
 楼主| 烟雨蒙蒙520 发表于 2021-1-31 23:41 | 显示全部楼层
在维基百科中,在系统编程(ISP),也称为在电路串行编程(ICSP)。
 楼主| 烟雨蒙蒙520 发表于 2021-1-31 23:42 | 显示全部楼层
3.IAP

In applicating Programing,在应用编程。

这里是本文说的重点,可以简单理解为:在程序运行的过程中进行编程(升级程序,更新固件)。
 楼主| 烟雨蒙蒙520 发表于 2021-1-31 23:42 | 显示全部楼层
IAP是用户自己的程序在运行过程中对User Flash的部分区域进行烧写,目的是为了在产品发布后可以方便地通过预留的通信口对产品中的固件程序进行更新升级。
 楼主| 烟雨蒙蒙520 发表于 2021-1-31 23:43 | 显示全部楼层
IAP通信口

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



本文结合STM32官网提供的例程,利用UART在应用编程(IAP)。
 楼主| 烟雨蒙蒙520 发表于 2021-1-31 23:43 | 显示全部楼层
2ST官网IAP例程
ST官网提供的IAP例程有很多很多,比如:

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

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

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

 楼主| 烟雨蒙蒙520 发表于 2021-1-31 23:44 | 显示全部楼层
ST官网提供的各种IAP,其方法和原理其实都类似:就是将程序文件(二进制文件)写入FLASH。

本文以最简单的基于(STM32F10x)利用SPL库+UART的IAP为例来给大家讲述一下。(复杂都是从基础开始,后续逐步为大家更新更高级的IAP功能)
 楼主| 烟雨蒙蒙520 发表于 2021-1-31 23:44 | 显示全部楼层
STM32F10xxx in-application programming using the USART官方地址:

https://www.stmicroelectronics.com.cn/content/st_com/en/products/embedded-software/mcus-embedded-software/stm32-embedded-software/stm32-standard-peripheral-library-expansion/stsw-stm32008.html
 楼主| 烟雨蒙蒙520 发表于 2021-1-31 23:45 | 显示全部楼层
734376016d07b7b6d2.png 相关参考文档和代码例程都在这个网址下载,下一章节针对这里该IAP讲述几点重要内容。
 楼主| 烟雨蒙蒙520 发表于 2021-1-31 23:46 | 显示全部楼层
我下载后上传至百度网盘地址:

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

密码:2t3j

(提示:该链接后期可能会失效,建议到官网下载)
 楼主| 烟雨蒙蒙520 发表于 2021-1-31 23:47 | 显示全部楼层
3IAP例程几个要点
1.例程概要说明

该代码工程基于STM32F1,使用UART通信口,利用超级终端(上位机)、通过YModem协议实现代码程序的数据传输和写入Flash。
 楼主| 烟雨蒙蒙520 发表于 2021-1-31 23:47 | 显示全部楼层
2.IAP软件工程

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

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

 楼主| 烟雨蒙蒙520 发表于 2021-1-31 23:48 | 显示全部楼层
因该工程代码是之前用MDK-ARM V4版本建立的,现在用V5版本打开会提示如下信息:



只需要点击“Migrate to Device Pack”即可,V5版本使用了“设备支持包”,这里大概意思就是使用设备支持包兼容以前老版本工程。
 楼主| 烟雨蒙蒙520 发表于 2021-1-31 23:48 | 显示全部楼层
选择对应的目标(我们以F103ZE为例,选择大容量、小容量在于他们的FLASH页大小不一样),选择10E-EVAL。



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



提示:

1.前提:MDK下载、安装

2.什么是目标? 简述工作空间、工程、目标
 楼主| 烟雨蒙蒙520 发表于 2021-1-31 23:50 | 显示全部楼层
3.说明

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

 楼主| 烟雨蒙蒙520 发表于 2021-1-31 23:50 | 显示全部楼层
因此,我们会将FLASH划分我两个区域:IAP程序区域,APP程序区域。 295106016d1bedaabe.png
 楼主| 烟雨蒙蒙520 发表于 2021-1-31 23:51 | 显示全部楼层
这里IAP程序有两个作用:1.对APP程序编程; 2.引导程序跳转至应用程序。所以,这段APP程序也叫BootLoader。
 楼主| 烟雨蒙蒙520 发表于 2021-1-31 23:52 | 显示全部楼层
为防止IAP程序不被(第一部分代码)不被意外破坏,一般建议对IAP程序进行“写保护”。



这个APP地址0x0800 3000是怎样来的呢?
您需要登录后才可以回帖 登录 | 注册

本版积分规则

40

主题

719

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部