关于 STM32 的 IAP 概念和应用笔记

stm32芯片解除写保护方法(详细) 一. 写保护 1. 目的   将Flash设置为写保护的目的,是为了防止其他人通过J-Link,ULINK2等仿真器,将Flash中的程序读取出来(设想一下,你辛辛苦苦研发的产品,别人通过仿真器将程序读取出来,再copy一下产品的硬件,就可以生产)。   可以通过将Flash设置为读保护来保护自己的程序。 2. 开发环境 适用于STM32F1和F4系列(其他系列没有用过); F1系列的库:STM32F10x_StdPeriph_Lib_V3.5.0 F4系列的库:STM32F4xx_DSP_S... 阅读详情

版权所有 STMFANS 原创,转载请保留出处

http://www.stmfans.com/bbs/viewthread.php?tid=1446&extra=page%3D1


关于 STM32 的 IAP 概念和应用笔记
STM32的ISP方式和IAP方式下载程序有什么区别

都可以通过串口来下载啊,(也可以通过USB来下载,敬请留意 IAP 之USB篇。)

ISP方式:需要将BOOT管脚配置成上电从System Memory启动,System Memory中有一段BOOTLOADER来接收串口来的数据,把它们烧写到FLASH中。

IAP方式:是用户自己写一段烧写程序,通过ISP或者仿真器事先烧写到用户FLASH中,使用时通过某种方式触发这段程序,再来从串口接收数据,然后烧到相应的FLASH中,不需要改变BOOT管脚配置。

ISP 就是 IAP 的一种特殊的应用。

这里给出两份周立功公司的基于 LPC ARM7 IAP 两份教程作为大家的学习资料参考:

IAP在应用中编程及其应用PPT.rar
(2008-12-11 13:02:18, Size: 307 KB, Downloads: 373)


IAP在应用中编程及其应用.pdf
(2008-12-11 13:02:18, Size: 544 KB, Downloads: 365)



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

通常在用户需要实现IAP功能时,即用户程序运行中作自身的更新操作,需要在设计固件程序时编写两个项目代码,第一个项目程序不执行正常的功能操作,而只是通过某种通信管道(如USB、USART)接收程序或数据,执行对第二部分代码的更新;第二个项目代码才是真正的功能代码。这两部分项目代码都同时烧录在User Flash中,当芯片上电后,首先是第一个项目代码开始运行,它作如下操作:

1)检查是否需要对第二部分代码进行更新
2)如果不需要更新则转到4)
3)执行更新操作
4)跳转到第二部分代码执行

第一部分代码必须通过其它手段,如JTAG或ISP烧入;第二部分代码可以使用第一部分代码IAP功能烧入,也可以和第一部分代码一道烧入,以后需要程序更新是再通过第一部分IAP代码更新。

对于STM32来说,因为它的中断向量表位于程序存储器的最低地址区,为了使第一部分代码能够正确地响应中断,通常会安排第一部分代码处于Flash的开始区域,而第二部分代码紧随其后。

在第二部分代码开始执行时,首先需要把CPU的中断向量表映像到自己的向量表,然后再执行其他的操作。

如果IAP程序被破坏,产品必须返厂才能重新烧写程序,这是很麻烦并且非常耗费时间和金钱的。针对这样的需求,STM32在对Flash区域实行读保护的同时,自动地对用户Flash区的开始4页设置为写保护,这样可以有效地保证IAP程序(第一部分代码)区域不会被意外地破坏。

ST的网站上有使用USART实现IAP的例子,各位可以参考这个例子和相应的手册。

应用笔记 AN2557 - STM32F10xxx in-application programming using the USART
例程:AN2557 - STM32F10xxx in-application programming using the USART

http://www.stmicroelectronics.com.cn/stonline/mcu/STM32_AN.htm


学习了概念之后,接下来我们需要做一些前期的准备工作,
(1)下载官方的例程:AN2557 - STM32F10xxx in-application programming using the USART
(2)下载豆皮的跑马灯的程序:WORM_LED.rar 
      http://www.stmfans.com/bbs/viewthread.php?tid=1031&extra=page%3D1
(3)安装 ISP 程序:STM32ISP.rar
      http://www.stmfans.com/bbs/viewthread.php?tid=1178&extra=page%3D1
(4)安装 IAR5.20 和 IAR4.22 两个版本的软件。

这时我们的准备工作已经差不多了。


修改 Bootload 程序:

由于官方的例子中是基于官方的开发板的,其中使用的触发条件为上电检测一个按键。
用 IAR5.20 打开 AN2557 中的工程。

第一步:因为我们的豆皮上的MCU为STM32F103VBT6,因此选择工程STM3210B-EVAL。

第二步:我们需要把这个触发条件修改为豆皮上面的按键 SW4
             将 platform_config.h 中的       #define GPIO_PIN_KEY_BUTTON             GPIO_Pin_9 
               修改为                            #define GPIO_PIN_KEY_BUTTON             GPIO_Pin_15

第三步:将 common.h中的                #define ApplicationAddress 0x8002000
                   修改为                             #define ApplicationAddress 0x8003000
         因为我们修改的程序接近于2000字节,稍微修改一下就可能超过2000,所以修改为3000作为bootload程序大小。

第四步:修改自己的公司版权信息
SerialPutString("\r\n**************************Copyright (c)*******************************");
SerialPutString("\r\n*                   思 蜕 盟 豆 皮 开 发 小 组                       *");
SerialPutString("\r\n*                            stmfans 论坛                                      *");
SerialPutString("\r\n*                                                                                     *");
SerialPutString("\r\n* In-Application Programming Application   (Version 1。00)   *");
SerialPutString("\r\n*                                                                                     *"); 
SerialPutString("\r\n*              QQ 群: 65081316   StmFans思蜕盟 1组             *"); 
SerialPutString("\r\n*              QQ 群: 68584951   StmFans思蜕盟 2组             *");
SerialPutString("\r\n*                                                                                     *");    
SerialPutString("\r\n*                http://www.stmfans.com/bbs/                         *");
SerialPutString("\r\n*                                                                                     *");
SerialPutString("\r\n************************************************************************");
SerialPutString("\r\n\r\n");          


第五步:如果你使用仿真器下载程序,那么需要把 stm32f10x_config.h 中的 DEBUG 打开。
/* #define DEBUG 1*/
#ifndef DEBUG
#define DEBUG 1
#endif
如果你使用 ISP 下载 bootload 程序这一步可以不做。


第六步:配置生成   hex 文件,如下图所示:


IAP3.jpg



第七步:编译工程文件:
   在 \IAP_AN\project\EWARMv5\STM3210B-EVAL\Exe 文件夹下取得 STM32F10x_IAP.hex 文件。

经过如上七部,我们 IAP Bootload 部分做好了。

修改应用程序:

用 IAR 4.22 打开跑马灯程序,WORM_LED 工程。
先将 stm32f10x_nvic.h 和  lnkarm_flash.xcl 的只读属性去掉。

第一步:将 main.c 中的   NVIC_SetVectorTable(NVIC_VectTab_FLASH, 0x0);
         修改为             NVIC_SetVectorTable(NVIC_VectTab_FLASH, 0x3000);

第二步:将 stm32f10x_nvic.h 中的 #define NVIC_VectTab_FLASH           ((u32)0x08000000) 
         修改为                            #define NVIC_VectTab_FLASH           ((u32)0x08003000)

第三步:将 lnkarm_flash.xcl 中的 -DROMSTART=0x8000000
         修改为                            -DROMSTART=0x8003000             

第四步:如图配置出 LED.bin 文件


IAP1.jpg



第五步:如图配置 LIST 文件


IAP2.jpg



第六步:编译工程文件。

\WORM_LED\WORM_LED\Debug\Exe   文件夹下面将会生成 LED.bin 。这个就是我们修改好的应用程序。
\WORM_LED\WORM_LED\Debug\List   文件夹下面将会城成 LED.map。打开这个文件我们确认下我们修改的程序是否正确。

   DEFINED ABSOLUTE ENTRIES
*************************************************************************
   DEFINED ABSOLUTE ENTRIES
   PROGRAM MODULE, NAME : ?ABS_ENTRY_MOD
   Absolute parts
          ENTRY                       ADDRESS       REF BY
          =====                          =======       ======
          _HEAP_SIZE          00000200 
          _CSTACK_SIZE        00000400 
          RAMEND                    2000FFFF 
          RAMSTART             20000000 
          ROMEND                0807FFFF 
         ROMSTART             08003000 
*************************************************************************

这时如果如上面所示那样的话即表示我们修改的程序 ok 了。

调试:

使用 STM32ISP.exe 将 STM32F10x_IAP.hex 下载到豆皮开发板中去。


IAP6.JPG



程序 Download 成功之后把 Boot0 和 Boot1 设置到正常程序模式下面。即 Boot0 = 0 , Boot1 = 0。


下载 应用笔记 AN2557 - STM32F10xxx in-application programming using the USART 或者 MXCHIP 的译文版本。
http://www.stmicroelectronics.com.cn/stonline/mcu/STM32_AN.htm

20071151511160.pdf
(2008-12-11 12:58:56, Size: 458 KB, Downloads: 231)


AN2557 STM32F10xxx通过USART在程序中编程 (2008年6月).pdf
(2008-12-11 12:58:56, Size: 276 KB, Downloads: 151)




打开文档后按照文档中的教程配置一个超级终端程序。

配置好 115200 的超级终端服务程序之后,按下 SW4 后给豆皮上电,即可在超级终端中看到下图的信息:


IAP4.JPG



按下 PC 机器键盘上面的 1 ,进行 Download 应用程序。

这时候超级终端会显示:
“Waiting for the file to be sent ... (press 'a' to abort)”
并且另起一行定时输出"C" ,这说明下位机已经响应,等待传输文件。

在超级终端中鼠标右键选择发送文件,在文件名中选择前面编译好的 LED.bin,协议选择 Ymodem,点击“发送”。


IAP7.JPG



文件正常传输结束后会输出正常的结果。


IAP5.JPG




到这里我们可以看结果了。


给豆皮重新上电,我们会看到和跑马灯一样的结果。即应用程序 IAP 成功了。
如果是按下 SW4 再上电的仍然会进入到 IAP 程序中。

教程结束了,当然大家要真正的掌握还是需要练习才能理解它的内涵。希望大家勤于练习,如学习过程中遇到问题可以在论坛中发帖,我们会给于你一定的帮助。
STM32 IAP 在线升级详解 一、在进入主题之前我们先了解一些必要的基础知识----stm32系列芯片的种类和型号: startup_stm32f10x_cl.s 互联型的器件,STM32F105xx,STM32F107xx startup_stm32f10x_hd.s 大容量的STM32F101xx,STM32F102xx,STM32F103xx startup_stm32f10x_hd_vl.s 大容量的ST 阅读详情

相关推荐

YModem协议解析-基于STM32的IAP实现

  简单认识一下常用的三种协议:XModem、YModem和ZModem协议。 XModem协议:是一种异步文件传输协议,这种协议以128字节块的形式传输数据,并且每个块都使用一个校验和过程来进行错误检测。 YModem协议:是由XModem协议演变而来的,每包数据可以达到1024字节,是一个非常高效的文件传输协议。 ZModem协议:Zmodem协议是针对modem的一种错误校验协议。利用Zmodem协议,可以在modem上发送512字节的数据块。如果某个数据块发生错误,接受端会发送“否认”应答,因此,

菠萝菠萝哒X 7963

STM32中Flash不同读保护等级level0-3对应处理方式

而通过自制的swd(stlink不行)编写出访问flash时序,发送读取flash某个地址一个字的请求,读成功后flash被上锁。所以循环读取一个字,可以将整片flash的程序读出。level2:完全禁止了SWD的调试能力,level 2状态下的芯片无法解除这个等级。此时可以通过去除外壳,将选项字所在flash暴露在物理干扰(光照、辐射等)下,共32位的选项字,只要使1位改变,就可以从level2降级为level1。MCU是GD/STM两平台通用的,全系列支持level1,但只有部分型号支持level2。

mianba_98的博客 2459

基于STM32F429的IAP升级(HAL库/RS485)

最近一周一直在基于STM32F429项目的IAP工程,耗时4天才完成,得空记录下来。文章主要涵盖了以下几点: 1. IAP是什么? 2. bin文件和hex文件的差别 3. ymodem协议介绍及其缺陷 4. RS485通讯 5. IAP的main()函数代码片段   项目的框架如下: ymodem协议 PC机 -----------------> STM32产品的串口

echo_bright_的博客 1万+

STM32 读写保护功能及设置

STM32 读写保护功能及设置 功能:: 读保护设置后将不能读出flash 的内容;当解除读保护的时候stm32 会自动擦出 整篇flash; 设置: 读保护设置:在程序的开头加入“读保护”代码,即实现了读保护功能;(每次程序 运行先 开保护) 解除读保护:解除读保护可以设置在按键里面,方便实现解锁,也不可不设; (1)设置读保护: if(FLASH_GetReadOutP

y391770118的专栏 4104

STM32-IAP基本原理及应用 | ICP、IAP程序下载流程 | 程序执行流程 | 配置IAP到STM32F4xxx

①在线编程(ICP,In-Circuit Programming):通过JTAG/SWD协议或者系统加载程序(Bootloader,串口)下载用户应用程序到微控制器中。②在程序中编程(IAP,In Application Programming):通过任何一种通信接口(如IO端口,USB,CAN,UART,I2C,SPI等)下载程序或者应用数据到存储器中(需要在此前通过在线编程中的一种下载方式已经下载好了一段代码到FLASH前面的一段区域。

小浪宝宝的博客 5152

于 STM32 的 IAP 总结

整个过程按照如下步骤:关于解锁读/编程控制器叫"FPEC"有几个寄存器,专门负责 Flash 的,对这几个寄存器以一定得顺序访问并设置即可成功解锁 Flash,至于怎么访问,谁先谁后,数据手册上写的头晕,直接来个快刀斩乱麻 Flash_UnLock()函数封装了这一系列的操作,有一点要注意,如果你是自己操作寄存器的话,如果操作的方法或者顺序不对都会造成 Flash 的锁定,之后的所有操作都会返回一个错误,直到下次启动后才能正常操作. 关于保护,为了保护用户数据不被无意修改或者恶意读取,STM32 提供了对芯

道亦无名 806

STM32 IAP 官方应用笔记 AN4657 下载仓库

STM32 IAP 官方应用笔记 AN4657 下载仓库 去发现同类优质开源项目:https://gitcode.com/ 欢迎来到 STM32 IAP 官方应用笔记 AN4657 的下载仓库!本仓库提供了一份详尽的 AN4657 应用笔记,主题为《STM32 in-application programming (IAP) 使用 USART》。 该应用笔记深入解析了 STM32 的 IAP 功能...

gitblog_06757的博客 461

在STM32F10xxx上通过USART实现在应用中编程(IAP)

对于大部分基于闪存的系统来说,一项重要的需求就是当这些系统安装在终端产品上后,具有更新固件的能力,这个能力称为在应用中编程(In-Application Programming IAP)。这篇应用笔记的目的就是为创建一个IAP应用程序提供一些通用的指导原则。本文中使用STM3210B-EVAL/STM3210E-EVAL板验证IAP驱动。 STM32F10xxx微控制器可以运行用户指定的固件,在微控制器嵌入的闪存上实现IAP。这个功能可以使用任何通讯协议(如CAN、USART、USB)对片上闪存进行重新编程。示例程序使用了USART作为通信通道。

【IAP】STM32和GD32的IAP原理分析、教程、资料整理

基于STM32和GD32的IAP在线升级代码、分析、教程

baidu_41781590的博客 9848

STM32F10x_AN2557_FW_V3.3.0 官方固件库

STM32F10x_AN2557_FW_V3.3.0 官方固件库

传感器模块的电路艺术:从引脚定义到系统集成的设计哲学

本文深入探讨传感器模块的电路设计艺术,从引脚定义到系统集成的完整设计哲学。重点解析电源管理、信号处理及I2C通信协议等核心电路原理,分享多模块协同中的电源架构、信号完整性和接地策略,为硬件工程师提供实用的系统级设计思维与实战案例。

o1p2q3r的博客 223

STM32在线升级 (IAP)

来自QQ群 Linux && 技术分享 311078264 打开链接加入QQ群:https://jq.qq.com/?_wv=1027&k=5Gr3bAx 此文档由elikang整理,为了文章简单直接,许多细节未能在文章中体现,如有疑问请进群讨论。 STM32在线升级 (IAP) 不需要拆机就能够对产品进行升级,通过Bootloader就可以完成这项工作。 ...

elikang的博客 3万+

Matlab 2023b 科研党必备:MOSEK 10.1.25 安装与配置全记录(附License过期解决方案)

本文详细介绍了在Matlab 2023b中安装与配置MOSEK 10.1.25的全过程,特别针对科研用户提供学术许可申请、证书文件部署及环境集成的实用指南。文章还包含常见问题解决方案和性能调优建议,帮助用户高效完成优化计算任务。

weixin_30598225的博客 171

STM32 IAP应用开发——通过USB实现固件升级

IAP(In-Application Programming) 指MCU可以在系统中获取新代码并对自己重新编程,即可用程序来改变程序。在应用编程(IAP)是用户的应用代码对片内Flash存储器进行擦除/编程的方法。这种方式的典型应用就是用一小段代码来实现程序的下载,实际上单片机的ISP功能就是通过IAP技术来实现的,即片子在出厂前就已经有一段小的boot程序在里面,片子上电后,开始运行这段程序,当检测到上位机有下载要求时,便和上位机通信,然后下载数据到数据存储区,从而实现固件升级。

ShenZhen_zixian的博客 1万+

实战对比:VINS和ORBSLAM3在无人机避障中的表现(含实测数据)

本文通过实战测试,深度对比了VINS和ORBSLAM3两种主流视觉SLAM算法在无人机避障中的表现。测试聚焦于光照变化、动态遮挡和快速运动三大挑战,提供了详细的实测数据与性能分析。结果表明,VINS在计算效率和实时性上占优,而ORBSLAM3在定位精度和地图管理方面更稳健,为不同应用场景下的工程选型提供了清晰依据。

醉三国 627

采购订单定价策略 超详细

‘需求’字段里填写的是一个例程编号(例程是一段判断程序),如果我们在需求中维护了例程编号,那只有这个例程条件被满足时,这个条件表才会被系统自动读取。一部分的条件表只有在凭证项目满足一定的条件时才会被读取。 ‘排斥的’字段如果别勾中的话,那表明如果这个条件表被系统成功读取到数据后,系统将停止这个存取顺序的执行,否则,系统将继续执行下去。 注意:a、如果我们给某个条件类型设定了有效期的话,那我们必须给这个条件类型分配一个存取顺序。 b、不能给一个抬头条件分配存取顺序。 是...

竹大的博客 1万+

STM32升级方法(一):IAP升级

此博客主要用于记录学习过程中的心得以及防止遗忘,下面的一些图片来源于网上,如有侵犯请联系。 STM32芯片的升级方式众多,这里简单介绍下,主要有ICP((In-Circuit Programming – ICP)、ISP(In-System Programming)、IAP((In-Application Programming – IAP),定义和区别如下: ISP(In-System Programming)在系统可编程,指电路板上的空白器件可以编程写入最终用户代码, 而不需要从电路板上取下器件,已

Linux 1万+

达摩院高清人像美肤模型ABPN的深入解析及编程实现

本文深入解析了达摩院高清人像美肤模型ABPN的原理,并提供了相应的源代码实现。ABPN模型通过自适应的反投影网络,有效地实现了人像图像的美肤处理。通过进一步的研究和优化,ABPN模型有望在人像美肤领域发挥更大的作用。低频特征提取器用于提取输入图像的低频信息,而反投影网络则负责将低频信息与原始图像结合,生成美肤后的输出图像。通过将输入图像送入ABPN模型,即可得到经过美肤处理后的输出图像。通过对输入图像进行美肤处理,可以有效地去除皮肤上的瑕疵和噪点,提升图像质量和美感。

TechPulseZ的博客 711

STM32F4 IAP跳转APP问题及STM32基于Ymodem协议IAP升级笔记

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档。

宁静致远的博客 3030

46、大数据助力SDN优化流量管理与控制器

本文探讨了大数据在软件定义网络(SDN)中的应用,重点分析了如何利用大数据技术优化SDN控制器的可扩展性和弹性。通过介绍SDN控制器的核心功能及其面临的挑战,提出了集中式、分布式、混合式和分层式控制器放置策略,并结合大数据分析系统架构与技术,详细阐述了在控制器放置优化、流聚合和备份路径识别等场景中的实际应用。文章还给出了大数据分析在SDN控制器优化中的操作流程与优势,展望了未来结合人工智能与物联网的发展方向,强调了数据安全与算法效率的重要性。

xx56789的博客 86

学Simulink--环境感知场景实例:基于Simulink的毫米波雷达多目标跟踪仿真

本文介绍了基于Simulink的毫米波雷达多目标跟踪仿真系统,重点分析了FMCW雷达信号处理流程(Range/Doppler FFT、CFAR检测)和多目标跟踪算法(JPDA数据关联、EKF状态估计)。通过构建城市道路交叉场景,验证了系统在跟踪精度(位置误差<0.2m)、实时性(单帧处理24ms)和鲁棒性(ID切换率<5%)方面的性能优势,并提出了UKF滤波、多传感器融合等优化方向。该仿真系统为自动驾驶环境感知提供了实用的毫米波雷达跟踪解决方案。

amy_mhd的博客 92

STM32 + IAP + Ymodem完美结合

关注、星标公众号,不错过精彩内容作者:strongerHuang对于软件工程师来说,代码升级(或程序更新)算是必备基础知识。下面将介绍关于编程的基础知识,以及结合STM32官方提供的De...

strongerHuang 1万+

机器人外接 USB 音响完整配置指南

摘要:本文介绍了为机器人配置外接音响的方法。由于内置音响音量小且有散热噪音,建议使用Type-C接口外接音响。配置步骤包括:1)通过aplay -l命令查看音响端口信息;2)使用aplay命令测试音频播放;3)通过amixer命令设置音量。关键点在于正确识别音响的卡号(如card 2)和设备号(如device 0),并在命令中准确配置这些参数即可实现外接音响的正常使用。

m0_47999117的博客 356
上一篇: ARM板和Linux上的3G配置详解
下一篇: 利用ST提供的USB例程实现USB IAP功能
獠
獠
博客等级 码龄16年 43粉丝 6原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值