1 STM32 IAP 应用编程几个要点-德赢Vwin官网 网
0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

STM32 IAP 应用编程几个要点

黄工的嵌入式技术圈 来源:黄工的嵌入式技术圈 2020-03-08 11:42 次阅读

我们常看到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为例来给大家讲述一下。(复杂都是从基础开始,后续逐步为大家更新更高级的IAP功能)

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

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

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

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

密码:2t3j

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

3IAP例程几个要点

1.例程概要说明

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

2.IAP软件工程

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

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

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

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

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

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

提示:

1.前提:MDK下载、安装

2.什么是目标?简述工作空间、工程、目标

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超级终端安装,程序下载

1.超级终端下载、安装

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

为方便大家调试,我这里提供下载链接

https://pan.baidu.com/s/13yjA9q0Eltfer4oLPbGceQ

密码:5r5m

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

2.程序下载

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

以上所有内容就是关于IAP的基础知识和例程说明,更多的IAP在线升级功能讲解敬请等待。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表德赢Vwin官网 网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • STM32
    +关注

    关注

    2270

    文章

    10895

    浏览量

    355711
  • IAP
    IAP
    +关注

    关注

    2

    文章

    163

    浏览量

    24279
  • ICP
    ICP
    +关注

    关注

    0

    文章

    70

    浏览量

    12778
收藏 人收藏

    评论

    相关推荐

    stm32单片机用什么软件编程

    STM32单片机是一种广泛应用于嵌入式系统领域的微控制器,具有高性能、低功耗、丰富的外设接口等特点。要对STM32单片机进行编程,需要选择合适的软件工具。 概述 STM32单片机
    的头像 发表于 09-02 10:16 1249次阅读

    请问怎么基于stm32实现IAP功能?

    以下boot leader 是设想最简单的功能,就是跳转到下一块程序地址为0x08008000,截图: 然后APP是从0x0800 8000 开始的,也在网络上的教程更改了偏移,但是boot一跳转就卡死,不知道怎么实现IAP最基础的功能(即boot和APP合并跳转),请懂的大佬教教。截图如下:
    发表于 05-20 06:59

    51、STM32单片机的编程方式一样吗?

    STM32和51单片机是两种常见的单片机系列,它们在硬件架构、性能特点和编程方式等方面有所不同。但是从c语言编程的角度来说,我认为是大同小异的。我们来对比一下它们的编程特点:51&am
    的头像 发表于 05-18 08:04 2165次阅读
    51、<b class='flag-5'>STM32</b>单片机的<b class='flag-5'>编程</b>方式一样吗?

    STM32F1 IAP操作读保护选项字节设置,APP使用系统复位跳转后无法运行IAP的原因?

    最近调试一个程序,是基于STM32F1做的IAP,升级前后需要修改选项字节,FLASH_EraseOptionBytes函数内OB->RDP=RDP_Key语句实现读保护的解除,如果我
    发表于 05-13 08:09

    STM32F767 USB是否能用IAP功能?

    如题,网上的帖子都是针对F1,F4的USB,IAP功能。 F767的IAP功能没有被提到过。 确认一下概念,我指的IAP功能是首先下载引导程序,然后通过USB可以随时更改程序的这种应用,不需要BOOT配合,不知各位前辈是否有过相
    发表于 04-29 07:08

    通过iap的方式对stm32f405进行升级,usb dfu数据传输出错的原因?

    想通过iap的方式对stm32f405进行升级,用usb传输 dfu格式; 在数据传输过程中,发现源文件和传到设备上的数据匹配不起来,有人遇到过吗??求助!!!! 是usb dfu传输协议的问题吗?谁有usb dfu格式iap
    发表于 04-28 08:56

    STM32F103RE只有挂调试器IAP程序才能正常跳转吗?

    最近在开发一款基于STM32F103RET6的产品,要求支持固件升级,目前是基于USART1的IAP,Toolchain是IAR。 IAP的程序是参考官方的例程做的,大体没变,只是BSP方面改了一下
    发表于 04-25 07:03

    IAP跳转APP开始可以,如果从APP跳回IAP后再跳到APP失败的原因?

    IAP 跳转APP 开始可以,但如果从APP跳回IAP后,再跳到APP失败。 我是按照 下面ST官方文档来的: AN4657 Application note STM32
    发表于 04-23 07:24

    STM32F0 IAP进入APP后 __disable_irq() 失效了的原因?

    如题,STM32F030C8T6 做 IAP 现能正确的从 bootloader 中跳转到 APP,在APP中也能正常的进入中断,为什么在APP中使用 __disable_irq();无法关闭 所有中断。 经测试 在bootloader中__disable_irq();是
    发表于 04-22 08:21

    CKS32F4xx系列产品的串口IAP功能详解

    IAP(In Application Programming)即在应用编程IAP是用户自己的程序在运行过程中对User Flash的部分区域进行烧写,目的是为了在产品发布后可以方便地通过预留的通信口对产品中的固件程序进行更新升
    发表于 04-05 15:11 550次阅读
    CKS32F4xx系列产品的串口<b class='flag-5'>IAP</b>功能详解

    使用STM32CubeIDE无法通过IAP跳转APP进行软件升级的原因?

    使用CUBE IDE无法通过IAP跳转APP进行软件升级 本人使用的是cubeide 1.7.0版本,单片机是STM32F407VET6.在这个IDE工具下,成功实现STM32
    发表于 03-28 06:47

    SiC驱动电源设计要点(变压器部分)

    在设计SiC(碳化硅)驱动电源时,需要考虑以下几个关键要点
    的头像 发表于 03-18 18:02 1724次阅读
    SiC驱动电源设计<b class='flag-5'>要点</b>(变压器部分)

    fpga编程与单片机编程的区别

    FPGA编程与单片机编程的主要区别体现在以下几个方面。
    的头像 发表于 03-14 17:16 976次阅读

    自举电路设计要点有哪些

    自举电路作为一种常见的电子电路,主要用于提升电压,以便为高侧开关提供足够的驱动能力。在设计自举电路时,有几个关键要点需要注意。下面我们将逐一探讨这些要点。 为了确保自举电路的正常工作,需要特别注意
    的头像 发表于 02-16 11:43 933次阅读

    什么ISP?什么是IAP

    做单片机开发的工程师经常会听到两个词:ISP和IAP,但新手往往对这两个概念不是很清楚,今天就来和大家聊聊什么是ISP,什么是IAP
    的头像 发表于 01-28 09:26 4449次阅读
    什么ISP?什么是<b class='flag-5'>IAP</b>?