STM32-串口IAP升级

发布者:梦中的额吉最新更新时间:2018-08-15 来源: eefocus关键字:STM32  串口IAP升级 手机看文章 扫描二维码
随时随地手机看文章

对于写好的程序来说如何烧录到芯片中是十分重要的的过程,在平时测试开发的时候可以直接通过Jlink,swd,usart等方式直接将编译好的程序直接烧录到芯片的Flash中,但是对于已经开发好的产品来说,特别的已经进行了分布部署的设备来说,一个一个升级可以是不可能的事情,一般的升级方式都是通过网络或者其他远程方式来进行固件的升级,但是无论通过什么方式来进行升级,基本上都是将要升级的代码段下载到指定的Flash存储区域中,这也就是IAP升级的主要内容。


IAP升级主要是将不同的程序放置到内部存储区域的不同的位置,然后通过相应的跳转函数,来指向不同的地址空间,这样就可以运行不同的APP程序了。对于STM32来说内置的Flsah分为不同大小的,128,256,512不同大小的容量。首先要根据不同容量来确定不同程序段的存放位置,之后还有了解一下STM32的启动方式,两个方面,一是它不同BOOT电平的不同启动方式,可以通过手册来了解,二是它在启动的时候的寻址模式,因为如果我们需要执行新的APP程序的时候,就是进行中断响应,在我们的新程序中就要从新配置中断向量表的位置,是原先的中断向量表映射到我们新程序的地方,一般的程序都是从0x8000000的地址空间开始运行的,之后跟的就是中断向量表的地址。实现的方式就是更改一下相应的寄存器,但是原理一定要了解,这样才能根据实际的问题来解决。下面贴出一个实现程序跳转的JUMP函数,功能就是是程序运行的指针跳转到我们指定的地方执行,也就是我们新程序的起始地址。


void Jump(void)

{

       /*ÌøתÖÁÄ¿±ê³ÌÐò*/

        /* Test if user code is programmed starting from address "ApplicationAddress" */

        printf("%x\r\n",*(__IO vu32*)0x08010000);

        if (((*(__IO uint32_t*)ApplicationAddress) & 0x2FFE0000 ) == 0x20000000)

        { 

          /* Jump to user application */

          FLASH_Lock();

          JumpAddress = *(__IO uint32_t*) (ApplicationAddress + 4);

          Jump_To_Application = (pFunction) JumpAddress;

          /* Initialize user application's Stack Pointer */

          __set_MSP(*(__IO uint32_t*) ApplicationAddress);

          Jump_To_Application();

        }

}

我们程序的起始地址是需要在MDK中进行配置的

这里写图片描述

注意看那个IROM1的地址,需要自定义为0x8002000,这个就是我们程序的起始地址了,执行JUMP函数之后,我们的程序就开始运行我们所升级的程序了。

下面是两个我已经写好的工程,包含两个部分,一个是IAP的BootLoader,一个是执行的跳转程序,也就是我们通过串口进行下载到内部FLASH中的程序


关键字:STM32  串口IAP升级 引用地址:STM32-串口IAP升级

上一篇:创建keil工程并点亮STM32板子的LED灯
下一篇:STM32-PWM输出

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

STM32控制4个LED灯循环点亮源程序
电路原理图如下: 单片机源程序如下: #include led.h void Delay(unsigned int count); //延时函数 //int main(void) //{ // // LED_Init(); //初始化与LED连接的硬件接口 // while(1) // { // u32 LED=0x00000001;//设置初始控制码 // //逐一点亮 // for(u8 i=0;i 4;i++) // { // GPIO
[单片机]
<font color='red'>STM32</font>控制4个LED灯循环点亮源程序
SWD调试在STM32中REMAP调试的深入探究
首先说一下问题的现象,如果有这种现象的同学可以看看博主的这篇博文程序download一次后,第二次download就提示no target connect,除非长按reset键才能继续下载程序 首先上一组stm32的TIM2的端口使用组合有下面四种: 1.当不重映射时,默认TIM2四个的IO口是PA0、PA1、PA2、PA3 开启重映射__HAL_AFIO_REMAP_TIM2_ENABLE() 2.要使用PA15、PB3、PA2、PA3的端口组合,要调用下面的语句进行部分重映射: __HAL_AFIO_REMAP_TIM2_PARTIAL_1() 3.要使用PA0、PA1、PB10、PB11的端口组合,要调用下面的
[单片机]
STM32驱动LCD实战
01 驱动时序 我们通常说的MCU-LCD接口,就是8080接口,8080接口的详细介绍请看《STM32驱动LCD原理》。 下面是LMT028DN给出的8080模式总线时序 下面是总线时序中的参数 时序参数 Tast- 地址设置时间 Taht- 地址保持时间(写) Tchw- 芯片选择高脉冲宽度 Tcs- 芯片选择设置时间(写) Tcsf- 芯片选择等待时间(写) Twc- 写入周期 Twrh- 控制脉冲高电平时间 Twrl- 控制脉冲低电平时间 Tdst- 数据设置时间 Tdht- 数据保持时间 根据FSMC的配置和时序图,我们需要的3个时序参数是 3个重要参数 1、地址建立时间:5ns 2
[单片机]
<font color='red'>STM32</font>驱动LCD实战
STM32的ADC多通道采集的实现
在经过半个月的不懈努力下,终于将32的ADC多通道的信号采集完成,在网上能找到一些对于多通道信号采集的范例,要么就是用多个ADC,要么就是指贴出部分关键代码,也不对其中的配置及实现做一些细致的说明,这让人会走很多弯路,但也正是这样才能不断提升,才能认识自己的不足。好了,下面就先对STM的ADC做个简单的介绍; ADC又称'模拟/数字转换器',在 STM32 单片机 中模拟/数字转换器(ADC)是一种提供可选择多通道输入,逐次逼近型的模数转换器。分辨率为12位,在一般的信号采集应用中已经算是很高的分辨率了。 它有18个通道,可测量16个外部和2个内部信号源。各通道的A/D转换可以单次、连续、扫描或间
[单片机]
STM32编译环境、建立工程模板以及程序下载
1、之前写51的程序我们一般都是用的keil5软件,现在写32程序,要用到keil MDK软件,但是keil5和keil MDK不兼容,也就是说在keil5里面我们没办法写STM32F1之类的程序,而在keil MDK里面也没办法写51的程序,所以说为了让他们俩相互兼容,即我们要实现在keilMDK里面要既能够写51的程序,也能够写32的程序,我当初在网上找了好多方法都不行,最后发现一种特别简单好用的方法,就是在把keil5和keil MDK两个软件安装在同一个文件夹下面。具体步骤就是 (1)安装keil5软件(尽量不要安装在C盘),然后激活它。这里激活的时候要在注册机里选择C51。 (2)安装keil MDK软件,在安装
[单片机]
<font color='red'>STM32</font>编译环境、建立工程模板以及程序下载
关于STM32中断的部分理解
中断这个问题从学习stm32一开始就困扰着我,我想估计很多初学者都会有这样的问题。曾经问过隔壁实验室的职工,人家没告诉我,让我自己回去理解。同行是冤家,这句话很在理。 首先提出我对几个中断的理解不了的问题: 1、中断是干嘛的? 2、中断是如何从函数进入的? 3、中断相关设置是如何设置的? 第一个问题:关于中断可以有一个很形象的解释:你正在吃饭,突然尿急了,准备去尿尿,中断了吃饭的这一过程。从程序上解释就是吃饭可以分解为一系列的动作,称为主程序,每个动作相当于函数,组成了这个主程序。这时候你尿急了,产生了一个信号,相当于中断信号,告诉大脑CPU,现在尿急比较重要,不然会尿裤子。这时候大脑会停下吃饭这一主程序,去执行撒尿这程序
[单片机]
关于stm32的USB学习笔记之USB_HW.c
#include stm32f10x_lib.h #include stm32f10x_map.h #include usbreg.h #include usbuser.h #include usbcore.h #include usb_hw.h #define _DEBUG_ #include debug.h #define USB_EP_NUM 4 /*端点缓冲区的开始地址 *因为每个缓冲块都需要一个端点描术表 *而所有的端点描述表放在,USB缓冲区的首部 *此地址是相对于USB缓冲区的地址,我认为加上Offset更好些 *这里使用2个端点 *端点0与端点1 *此时EP_BU
[单片机]
使用VSCode搭建STM32开发环境
首先附上一张VS Code图一直都喜欢这种,黑色主题感觉高大上。 一、需要的软件和工具。 下载最新版VS Code: 安装好插件,具有良好的代码补全与调试功能。 “VS Code下载地址:https://code.visualstudio.com/” 下载 LLVM:用于代码补全,其实可以理解为 Clang。因为VS Code 中“C/C++”插件的自动补全功能不太好用。STM32中好多库函数都补全不出来。记得按照好之后,将路径添加到环境变量里。 “LLVM下载地址:http://releases.llvm.org/download.html” 下载安装 Git for Windows: 提供Git支持和MINGW64指令终端
[单片机]
使用VSCode搭建<font color='red'>STM32</font>开发环境
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

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

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

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