STM32F4 IAP升级 Bootloader程序+上位机下载程序源码

目录

一、硬件设计

二、软件设计

三、上位机设计

四、IAP说明

五、下载验证

资料下载地址:STM32F4 IAP升级 Bootloader程序+上位机下载程序源码

一、硬件设计

        升级下载程序采用外部硬件触发的方式。
        PB-20M4硬件板 预留一个IO口处理代码下载及更新的功能。
        功能简介:开机前若将 PB4接口与GND用杜邦线(改进硬件后可用跳帽)短接, LED6闪烁状态,即可进入固件下载功能程序,然后等待串口输入接收APP程序(.bin文件,生成方法见后面说明、分段接收每包2K数据,进行CRC校验),在接收完APP程序包后,断开PB4与地线的连接即可进入用户程序。
        用到的资源:
        
  •         指示灯DS6
  •         一根短接线,优化硬件后 可用跳帽
  •         串口(共地)
图一  硬件指示图
图二  串口连接

二、软件设计

总共涉及三部分代码:1、Bootloader;2、Flash App;3、上位机程序

1.Bootloader;
        主函数进行任务判断,以及IAP更新和跳转等各项操作。串口中断中运行数据处理,数据检测,与上位机及握手校验等任务。Bootloader大小仅16K左右。
2、Flash App;
        需要下载的程序,设置flash起始地址偏移量,由bootloader串口中断中写到flash中去。在初始化的时候执行跳转,运行该代码程序。
3、上位机发送校验程序
        协议如下:            
/*---------------------------------------------------------------------
protocol-----|#|remainSend|#|length|data[]|CRC_check
---------------------------------------------------------------------*/            
        IAP不是一下子把所有BIN文件都接收过来写入FLASH,而是根据自己硬件的RAM空间,把BIN文件分成若干包,如每1K,2K等传送一次,传送当中加上帧头,帧尾,CRC,及总共多少包,及这是第几包等信息封装好的数据包,每接收一包写相应FLASH,下一包对应的FLASH地址++,如此完成固件更新。

三、上位机设计

        打开应用程序IAP_Download_USART\IAP_Download_USART\obj\Debug中exe文件。
或直接打开附件中IAP_Download_USART.exe应用程序
        运行界面
烧录过程:
开发环境如下:
VS2013上用C#设计的简单的串口应用程序,基于.net4.5。

 主要代码:

四、IAP说明

         IAP(In Application Programming)即应用编程,IAP是用户自己的程序在运行过程中对User Flash的部分区域进行烧写,后期可以方便的通过预留通信口对产品进行更新升级。在实现IAP功能时,需要在设计固件程序时编写两个项目的代码,第一个项目程序(bootloader程序)不执行正常的功能操作,而是只通过某种通信方式接收程序和数据,执行对第二部分代码的更新;第二个项目代码是功能代码(APP程序)。这两部分项目代码都同时烧录在User Flash中,在芯片上电后,首先执行第一个项目的代码,进行如下操作:
  •       检查是否需要对第二部分代码进行更新
  •       如果不需要更新,则运行第二部分代码
  •       若需要更新,执行更新操
  •       更新完成,执行第二部分代码
        Bootloader代码必须通过其他手段,如JTAG或ISP烧录;第二部分代码使用Bootloader程序IAP功能烧录,也可以通过JTAG烧录,以后需要更新时可以通过IAP代码进行烧录。
两部分代码存放在flash不同的地址位置,从最低地址区开始存放Bootloader,在其后指定位置存放APP程序。
        STM32F4的内部闪存(flash)地址起始于0x08000000,一般情况下,程序文就从此地址开始写入。此外STM32是基于Cortex-M4 内核的微控制器,其内部通过一张“中断向量表”来响应中断,程序启动后,将首先从“中断向量表”取出复位中断向量执行复位中断程序完成启动,而这张“中断向量表”的起始地址是0x08000004,当中断来临,STM32F4 的内部硬件机制亦会自动将PC 指针定位到“中断向量表”处,并根据中断源取出对应的中断向量执行中断服务程序。
IAP程序满足的要求:
  •    新程序必须在IAP程序之后的某个偏移量为x 的地址开始;
  •    必须将新程序的中断向量表相应的移动,移动的偏移量为x;
        1.程序起始地址设置方法
        打开pbdr_v110工程,点击Options for Target /Target选项卡,如图所示:
        默认条件下,图中IROM1的起始地址(Start)一般为0x08000000,大小1M(Size)为0x100000。而我们设置APP程序起始地址为0X08010000,即偏移量为0x10000(64K字节),留给用户flash空间(size)是1024k-64k=960K。偏移量是定义留给bootloader程序的地址空间大小。发布者可以定义bootloader空间的大小这里我定义的是64K,偏移量为0x200的倍数即可。(本设计的bootloader只有16K左右),这里留有余量,方便bootloader以后的升级修改。
        1.中断向量表的偏移设置方法

            在pbdr_v110版本中在mian.c中设置如下:

        MDK编译默认生成.hex文件,而升级程序需要生成.bin文件。MDK自带的格式转换工具fromelf.exe,来实现.axf文件到.bin文件的转换。该工具在MDK的安装目录\ARM\BIN40文件夹下。通过下一步设置,可以在MDK编译成功之后,调用fromelf.exe (注意,MDK的安装路径,我的路径D:\Keil_v5\ARM\ARMCC\bin),根据当前工程pbdr.axf,生成一个pbdr.bin文件。存放在OBJ文件夹下。在得到.bin文件后,我们只需要将这个bin文件通过串口传送给单片机,即可执行代码的下载以及升级。

五、下载验证

        将JTDO(PB4)与GND短接,上电后,LED灯D6开始闪烁,说明进入下载更新状态。

        通过TTL转usb连上电脑端串口,打开IAP更新软件(打开应用程序IAP_Download_USART\IAP_Download_USART\obj\Debug文件夹中IAP_Download_USART.exe文件或直接打开附件中IAP_Download_USART.exe应用程序),打开串口即可选则发送BIN文件进行代码下载。

关闭下载窗口,断开短接线即可运行更新后的程序。

stm32 IAP Bootloader V1.4源码:

/*--------------------------------------------------------------------------------------
@file:    IAP_Serial
@version: V1.0
@author:  Shanwu.5_W && Potter_lv
@Introduction : Unlock flash   load_app from serial 
--------------------------------------------------------------------------------------*/
#include "sys.h"
#include "delay.h"  
#include "usart.h"   
#include "led.h"  
#include "stmflash.h" 
#include "iap.h"  void Button_Switch_DFU_Init(void)    //按键升级初始化
{GPIO_InitTypeDef GPIO_InitStructure; RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOB, ENABLE);GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN;GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL;GPIO_InitStructure.GPIO_Pin = GPIO_Pin_3;GPIO_Init(GPIOB, &GPIO_InitStructure);
}
#define  GET_BUTTON_STATE   GPIO_ReadInputDataBit(GPIOB, GPIO_Pin_3)int main(void)
{ u8 t;NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);//设置系统中断优先级分组2delay_init(168);  //初始化延时函数uart_init(115200);                //初始化串口波特率为115200LED_Init();                                        //初始化LED Button_Switch_DFU_Init();                //初始化跳转APP程序接口while(1){t++;delay_ms(10);if(t==30){LED0=!LED0;                  //D6闪烁 等待更新状态t=0;}                        if(GET_BUTTON_STATE != 0x00)        //悬空进入更新进程{                                        if(((*(vu32*)(FLASH_APP1_ADDR+4))&0xFF000000)==0x08000000)   //判断是否为0X08XXXXXX.{         USART_Cmd(USART2, DISABLE);                                //失能串口2 ,防止跳转到App程序时死机                                        iap_load_app(FLASH_APP1_ADDR);                             //执行FLASH APP代码                }else {printf("非FLASH应用程序,无法执行!\r\n");           }}}                        
}

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/324965.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

数据采集:获取有价值信息的关键步骤

在当今数据驱动的时代,数据已成为企业、组织和个人做出明智决策的重要依据。而数据采集作为数据分析和应用的第一步,其重要性不言而喻。本文将探讨数据采集的概念意义、方法工具、面临的挑战和应对策略以及注意事项。 一、数据采集的定义和重要性 &…

win10电脑提示“KBDSG.DLL文件缺失”,软件游戏无法启动运行,快速修复方法

很多用户在日常使用电脑的时候,或多或少都遇到过,在启动游戏或软件的时候,Windows桌面会弹出错误提示框“KBDSG.DLL文件缺失,造成软件无法启动或运行,请尝试重新安装解决”。 不少用户,会根据提示重装游戏或…

Nginx 的 gzip 压缩

目录 1. 为什么要开启gzip 压缩 2.对网站配置文件进行修改 1. 为什么要开启gzip 压缩 nginx使用gzip压缩主要是为了降低网站的带宽消耗和提升访问速度。通过对页面进行压缩,可以减少传输的数据量,从而减少网络传输的时间和带宽消耗。 当浏览器接收到压…

MySQL——视图

目录 一.视图介绍 二.基本使用 三.视图规则和限制 一.视图介绍 视图是一个虚拟表,其内容由查询定义。同真实的表一样,视图包含一系列带有名称的列和行数据。视图的数据变化会影响到基表,基表的数据变化也会影响到视图。 二.基本使用 创…

rancher 手册

官方 https://www.rancher.com/https://github.com/rancher/rancherhttps://docs.rke2.io/ rancher 安装要求kubernetesl yaml deploy rancher serverHelm Deploy Online Rancher DemoHelm & Kubernetes Offline Deploy Rancher v2.7.5 Demohelm upgrade rancher server…

一篇文章认识微服务中Eureka的原理和服务注册与发现

目录 1、认识Eureka 2、Eureka原理 2.1 和Dubbo架构对比: 2.2 三大角色 3、微服务常见的注册中心 3.1 Zookeeper 3.2 Eureka 3.3 Consul 3.4 Nacos 3.5 区别 Netflix 在设计Eureka 时,遵循的就是AP原则。 CAP原则又称CAP定理,指的…

LeGO-LOAM 安装以及运行

一、源码地址: GitHub - RobustFieldAutonomyLab/LeGO-LOAM: LeGO-LOAM: Lightweight and Ground-Optimized Lidar Odometry and Mapping on Variable TerrainLeGO-LOAM: Lightweight and Ground-Optimized Lidar Odometry and Mapping on Variable Terrain - GitH…

第三届先进控制、自动化与机器人国际会议(ICACAR 2024) | Ei、Scopus双检索

会议简介 Brief Introduction 2024年第三届先进控制、自动化与机器人国际会议(ICACAR 2024) 会议时间:2024年5月24-26日 召开地点:中国重庆 大会官网:ICACAR 2024-2024 3rd International Conference on Advanced Control, Automation and Ro…

Git LFS: 简单高效的大文件版本控制

Git Large File Storage 问题 在使用git上传大文件时候,git push时候会报错: remote: error: File xxx.tar.gz is 135.17 MB; this exceeds GitHubs file size limit of 100 MB可以看到,git限制上传大小是100MB,超过的话就会报错&#xff…

在 IDEA 中创建JavaWeb 项目的方式(超详细步骤教程和遇到的问题)

目录 0-1项目图片操作步骤链接0-2项目结构预览1.新建Project2.定义项目名称3.创建完成后项目结构4.创建config文件夹4.1 作用 5.在WEB-INF下创建lib文件夹5.1然后搞几个常用的jar包放入5.1.1jar包全选中后右键选择放入类库5.1.2jar包全选中后右键选择放入类库 6.创建src下文件夹…

JetBrains Rider使用总结

简介: JetBrains Rider 诞生于2016年,一款适配于游戏开发人员,是JetBrains旗下一款非常年轻的跨平台 .NET IDE。目前支持包括.NET 桌面应用、服务和库、Unity 和 Unreal Engine 游戏、Xamarin 、ASP.NET 和 ASP.NET Core web 等多种应用程序…

跨境电商企业必备:在线客服系统的关键作用与优势

众所周知,客户服务在企业运营中占据着重要的地位。特别是在现如今市场,客户不仅关注于品牌影响力、产品功能质量,更关注于企业是否能提供优质的客户服务。在跨境电商行业中,也免不了遇到形形色色客户服务问题,设计和布…