STM32F030的IAP应用简介

发布者:雅意盎然最新更新时间:2017-09-25 来源: eefocus关键字:STM32F030  IAP 手机看文章 扫描二维码
随时随地手机看文章

程序收尾总想着以后更新的方便性,采用在应用编程(In Application Programming),通过Bootload引导单片机自己往程序存储器里写数据或修改程序。下面简介STM32F030的IAP方法。不同于STM32F1系列,F0没有中断向量偏移寄存器。所以在APP程序的开头要添加以下代码。为什么这样做??

可以看到函数用了for循环将矢量表拷贝到0 x20000000 SRAM的基地址,即将矢量表由Flash映射到了SRAM。所以在MDK里面设置Flash偏移地址的时候,同时要设置SRAM偏移地址。如下截图

//APP程序开头加入IAP_Set(void)函数


  1. //Falsh address  

  2. #define  APPLICATION_ADDRESS    ((uint32_t)0x08001400)  

  3. //SRAM Address 0x020000C0  

  4. void IAP_Set(void)  

  5. {  

  6.    uint32_t i = 0;  

  7. /* Relocate by software the vector table to the internal SRAM at 0x20000000 ***/    

  8.   /* Copy the vector table from the Flash (mapped at the base of the application  

  9.      load address 0x08003000) to the base address of the SRAM at 0x20000000. */         

  10.   for(i = 0; i < 48; i++)  

  11.   {  

  12.     *((uint32_t*)(0x20000000 + (i << 2)))=*(__IO uint32_t*)(APPLICATION_ADDRESS + (i<<2));  

  13. }  

  14.   /* Enable the SYSCFG peripheral clock*/   

  15.   RCC_APB2PeriphClockCmd(RCC_APB2Periph_SYSCFG, ENABLE);   

  16.   

  17. /* Remap SRAM at 0x00000000 */  

  18.   SYSCFG_MemoryRemapConfig(SYSCFG_MemoryRemap_SRAM);  

  19.   

  20. }  




有Target对话框可以看出APP程序有Flash地址0x8001400开始执行。Sram数据则有0x20000c0出开始存储。

说完APP代码要处理事项,下面说一下IAP代码编写


  1. /* Keep the user application running */  

  2. /* Test if user code is programmed starting from address "APPLICATION_ADDRESS" */  

  3. if (((*(__IO uint32_t*)APPLICATION_ADDRESS) & 0x2FFE0000) == 0x20000000)  

  4. {  

  5.     /* Jump to user application */  

  6.     JumpAddress = *(__IO uint32_t*) (APPLICATION_ADDRESS + 4);  

  7.     Jump_To_Application = (pFunction)JumpAddress;  

  8.   

  9.   

  10.     /* Initialize user application's Stack Pointer */  

  11.     __set_MSP(*(__IO uint32_t*) APPLICATION_ADDRESS);  

  12.   

  13.   

  14.     /* Jump to application */  

  15.     Jump_To_Application();  

  16. }  

程序更新完以后执行以上跳转函数即可执行更新的APP代码。关于如何通过IAP将代码将APP代码(bin文件)传到单片机Flash,可以通过串口分包传输。因为F0Flash是1K为一页所以这里我用的是1K缓存,即接收串口1K的数据量就执行一次Flash写操作,传输到最后不满1K,填写0XFF按照1K数据写。写Flash代码如下


  1. //存满1K的数据 写入Flash  

  2. if (g_nFlashDataLen == FLASH_PAGE_SIZE)  

  3. {  

  4. #if (DEBUGIAP ==1)  

  5.       

  6.     USART1_SendBytesProc(g_nFlashBuf,FLASH_PAGE_SIZE);  

  7.     g_nSysCommTimerCtrl=0;  

  8.     while(g_nSysCommTimerCtrl < 200);//5ms         

  9. #else   

  10.     //擦除待写的Flash  

  11.     FLASH_If_Erase(g_nFlashAddr);  

  12. loop1:  

  13.     //写入Flash  

  14.     nFlashData = (u32)g_nFlashBuf;  

  15.     if (FLASH_If_Write(&g_nFlashAddr, (u32*)nFlashData, (u16)g_nFlashDataLen / 4) != 0)  

  16.     {  

  17.         if (nCount++ < 5)  

  18.             goto loop1;  

  19.     }  

  20.     //地址增加  

  21.     g_nFlashAddr += FLASH_PAGE_SIZE;  

  22. #endif  

  23.     //清除g_nFlashDataLen计数  

  24.     g_nFlashDataLen = 0;  

  25.                   

  26. }  

关于IAP如何接收串口的数据,我用的是正点原子的XCOM V2.0串口调试助手通过协议传输每次传输128字节数据,执行的IAP串口数据接收。具体操作可在原子论坛搜索。再此留下参考链接:http://www.openedv.com/thread-40143-1-1.html         http://www.openedv.com/thread-22994-1-1.html


关键字:STM32F030  IAP 引用地址:STM32F030的IAP应用简介

上一篇:关于STM32使用RTC唤醒停止模式的设置
下一篇:STM32F407时钟树

推荐阅读最新更新时间:2024-03-16 15:38

STM32F0 IAP (使用stm32CubeMX)
BootLoader: main里调用函数跳转到APP地址0x8003000 typedef void (*pFunction)(void); #define ApplicationAddress 0x8003000 void UserAppStart(void) { if (((*(__IO uint32_t*)ApplicationAddress) & 0x2FFE0000 ) == 0x20000000) { /* Jump to user application */ JumpAddress = *(__IO uint32_t*) (ApplicationAddress + 4); J
[单片机]
在系统编程ISP及在应用编程IAP
在线编程目前有两种实现方法:在系统编程(ISP)和在应用编程(IAP)。ISP一般是通过单片机专用的串行口对内部的整个Flash存储器进行编程,而IAP技术是从结构上将Flash存储器分为两个部分,当运行一个存储体上的用户程序时,可对另一个存储体重新编程,之后将控制从一个存储体转向另一个。而IAP的实现更加灵活:通常可利用单片机的串口,网口,USB等接口在线编程,从而实现代码的远程升级。 有些用户希望产品在实际应用期间能够通过某种远程通信方式自动地更新程序内容,显然ISP已经无法满足这样的需求了。新出现的IAP烧录方式为程序的自我更新提供了有效手段。单片机内部的Flash存储器保存有用户的程序代码,这些代码在正常运行期间是不能
[单片机]
STM32F030模拟串口
由于项目需要用到很多串口,而STM32F030的串口资源较少,所以需要自己写模拟串口,下面是过程。 首先进行初始化: #define Auart1RxEXTIPort EXTI_PortSourceGPIOA #define Auart1RxEXTIPin EXTI_PinSource5 #define Auart1RxLineEXTI_Line5 #define Auart1RCC RCC_AHBPeriph_GPIOA #define Auart1Port GPIOA #define Auart1TxPin GPIO_Pin_6 #define Auart1RxPin GPIO_Pin_5 #define Auar
[单片机]
STM32F030_I2C详细配置说明
本文主要总结STM32F030_I2C的相关功能与源代码分享。 I2C(Inter-Integrated Circuit)总线是由PHILIPS公司开发的两线式串行总线,用于连接微控制器及其外围设备。是微电子通信控制领域广泛采用的一种总线标准。它是同步通信的一种特殊形式,具有接口线少,控制方式简单,器件封装形式小,通信速率较高等优点。I2C 总线支持任何IC 生产工艺(CMOS、双极型)。通过串行数据(SDA)线和串行时钟 (SCL)线在连接到总线的器件间传递信息。每个器件都有一个唯一的地址识别(无论是微控制器——MCU、LCD 驱动器、存储器或键盘接口),而且都可以作为一个发送器或接收器(由器件的功能决定)。除了发送器和接收器
[单片机]
STM32F030_I2C详细配置说明
如何建一个STM32F030工程模板(标准库版)
1.1建立工程前准备 (1)下载stm32f0标准库文件 在开始建立工程模板前需要先到ST官网下载最新的标准外设库,网址为https://www.st.com/en/embedded-software/stsw-stm32048.html 在网页中找到下载链接,点击下载。(需要登录账号或者填一些个人信息,这里自己操作) 下载下来的压缩包解压后得到STM32F0xx_StdPeriph_Lib_V1.5.0这个文件夹,里面包含STM32F0XX外设功能的例程及内核、外设相关的库文件。 (2)安装stm32f0芯片包 Keil5需要自己下载安装芯片包,才能在建立工程的时候选择自己要的MCU型号,若还没安装可到Kei
[单片机]
如何建一个<font color='red'>STM32F030</font>工程模板(标准库版)
【32位MCU】9G-STM32 简易BOOT及XMODEM串口IAP移植过程简介
9G-STM32 简易BOOT及XMODEM串口IAP移植过程简介 一,准备EWARM + AN2557软件包 1,在http://www.mcu123.com/news/Soft/embsof/arm/201001/514.html 上 下载 IAR Embedded Workbench for ARM version 5.41 (2010.1.5更新) 软件 CD-EWARM-5411-1760_mcu123.zip http://esoft.mcu123.com/MCU123_temp_20100103@/ARM/CD-EWARM-5411-1760_mcu123.zip 相关文件 IAR_EWARM5.4和谐文
[单片机]
stm32的IAP学习
几乎所有的同类书籍都介绍综合性的应用示例如 万年历 + 温度显示 + 闹钟响铃 + 计时表 这样的一个实时时钟范例或 STM32 + 音频解码 + 大容量存储方案 这样的MP3播放器范例。这些综合性实例的目的在于引领读者进行综合性实验,达到把单片机的基础模块整合运用的目的。这些实例普遍存在一种共同点,即 练手 意义要大于 实用 的意义。本文将讲述一个STM32的综合性应用示例,该示例将涉及到STM32微控制器的时钟系统、GPIO、定时器、中断系统、异步串口以及内置可编程flash等设备的应用,作为一个综合性实验的同时还具有很强的 实用 意义。这个示例就是STM32的IAP方案。 IAP,全称是 In-Application
[单片机]
stm32的<font color='red'>IAP</font>学习
基于P89C51RD2 IAP功能的数据存取与软件升级
摘要:分析Boot ROM中的部分源代码,重点是IAP功能以及ISP和IAP的相互关系;应用IAP功能将剩余程序空间转化为数据空间,以及自编ISP程序来实现仪器的软件升级。 关键词:P89C51RD2 Boot ROM IAP(ISP)功能 软件升级 1 概述 P89C51RD2是Philips公司的80C51系列单片机中的佼佼者,具有1KB的片上RAM和64KB的片上内存;具有3种编程方式,即在系统编程ISP(InSystem Programming)、在应用中编程IAP(In-Application Programming)以及通过商用编程器的并行编程。ISP是指电路板上的空白器件可以编程写入最终用户代码,而不需要从电路
[应用]
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved