stm32固件升级之U盘(四)

2023-11-12

目录

序言

什么是IAP升级?

STM32代码启动介绍

IAP设计思路

bootloader设计

stm32内部flash分区

移植U盘底层源码

总结

序言

        对于嵌入式软件开发来说:U盘离线更新固件是一种常用的更新手段。本篇文章讲述了如何通过U盘更新固件。

什么是IAP升级?

     IAP,即In Application Programming,IAP是用户编写的程序运行在用户自定义的Flash部分区域进行烧写。   

STM32代码启动介绍

        设计IAP,首先需要对MCU的代码启动过程有个简单的认识。stm32的代码启动如下:

            1. 通过BOOT1和BOOT0确定代码区域首地址,具体看用户手册有关“自举配置”这一章节;
            2. 启动文件源码分析,具体的分析过程见:(https://blog.csdn.net/qq_16519885/article/details/120374800)
            3. stm32启动步骤如下:
                1. 上电复位后,从0x00000000地址取出栈顶地址赋值给MSP寄存器,即MSP=__initial_sp;
                2. 从0x00000004地址取出复位程序地址赋值给PC寄存器,即PC = Reset_Handler;
                3. 跳转C库到__main函数初始堆栈和代码重定位(初始化RW和ZI段),最后跳转到main函数执行应用程序。

IAP设计思路

        设计思路大体分为bootloader和APP分开设计,bootloader用于检查APP区代码是否需要更新以及跳转到APP执行APP代码的功能。

bootloader设计

        1. 确定bootloader和APP在flash中的首地址;
        2. 首先检查是否要升级
            1. 是,执行升级固件代码;
            2. 否,直接跳转到APP。
                注意:跳转之前要关闭所有中断,否则进入APP会出现各种问题。具体的流程图如下:

stm32内部flash分区

 本篇文章以stm32f407ZGTx为例,其共有12个扇区,具体分配情况如下: 

  • 0-3:每扇区的大小16k;
  • 4:扇区大小64k;
  • 5-11:每扇区大小128k。
  •  在操作内部flash时,要注意先擦除然后再4字节对齐写入否则会出错。以下所示是内部flash设计分区的情况:

stm32分区步骤说明:

  • bootloader引导区:用于升级固件,引导APP跳转;
  • APP区:用于存放用户功能应用代码;
  • 用户参数区:用于存储用户一些参数。  

移植U盘底层源码

  1. 下载ST官方有关U盘的底层源码:STM32_USB-Host-Device_Lib_V2.1.0(正点原子获取);
  2. 添加USB_Driver驱动文件,具体如下图1所示;
  3. 添加USB_Host大容量驱动文件,具体如下图2所示;
  4. 添加USB_APP使用文件,具体如下图3所示;
  5. MDK中c/c++添加USE_USB_OTG_FS,USE_EMBEDDED_PHY;
  6. 编写OTG_FS_IRQHandler中断。​​​​​​

图1 

图2 

  图3

总结

        上述的文章主要使用到了以下知识点:

  1.  Flash读写操作
  2. U盘移植使用

通过本次总结可以加深对IAP升级的理解,为以后其他方式IAP打下良好基础。在此希望本篇文章对大家有帮助。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

stm32固件升级之U盘(四) 的相关文章

  • 粒子滤波(Particle filter)matlab实现

    粒子滤波是以贝叶斯推理和重要性采样为基本框架的 因此 想要掌握粒子滤波 对于上述两个基本内容必须有一个初步的了解 贝叶斯公式非常perfect 但是在实际问题中 由于变量维数很高 被积函数很难积分 常常会给粒子滤波带来很大的麻烦 为了克服这
  • Python 正则表达式

    最近研究Python爬虫 很多地方用到了正则表达式 但是没好好研究 每次都得现查文档 今天就专门看看Python正则表达式 本文参考了官方文档 re模块 模式 首先正则表达式的语法我就不说了 这玩意倒是不算难 用的时候现查就行了 正则表达式

随机推荐

  • 从0开始阿里云裸机安装java开发环境 Linux + Nginx+ MySQL+ Tomcat(lnmt)

    步骤1 更新阿里云的安装系统yum源 参考 https help aliyun com knowledge detail 5974184 html 参考 http blog csdn net endall article details 1
  • 数据库项目四总结:MySQL数据表的检索

    任务4 1 查询时选择列 1 基本查询语句 MySQL从数据表中查询数据的基本语句为SELECT语句 SELECT语句的基本格式是 SELECT lt 字段列表 gt FROM lt 表1 gt lt 表2 gt WHERE lt 表达式
  • MySQL的多表操作

    文章目录 1 多表关系 2 外键约束 2 1创建外键约束 2 2删除外键约束 3 对表联合查询 3 1交叉连接 3 2内连接 3 3外连接 4 子查询及子查询关键字 4 1 ALL关键字 4 2 ANY和SOME关键字 4 3 IN关键字
  • Python解析XML示例与解释

    使用工具包xml解析 python自带的工具 可以直接使用 使用示例如下 文章目录 简单案例 nodeType对应数字及其含义 简单案例
  • Sensor 结构——前照、背照、堆栈

    优异的工艺和技术可以使得即便不使用更新结构的CMOS 同样拥有更好的量子效率 固有热噪声 增益 满阱电荷 宽容度 灵敏度等关键型指标 在相同技术和工艺下 底大一级的确压死人 全画幅和aps c 人类的进步就是在不断发现问题 解决问题 背照式
  • redis master配置了密码进行主从同步

    1 如果master不设置密码 那么直接在slave服务器配置slaveof即可 配置如下 slaveof ip 端口 slaveof 221 224 85 186 6379 配置好我们看下redis的日志 看是否同步成功 5014 S 2
  • 生产线程池的定义与使用

    定义线程池 Slf4j Component public class PalmThreadPool public static int CORE POOL SIZE 4 private final AtomicInteger atomicI
  • C++ 中的常量,Const 关键字的用法(C++复习向p6)

    Const 常量 常量是固定的 程序执行期间不改变 又叫字面量 常量的类型 整数常量 0x23 浮点常量 1 23 布尔常量 true false 字符常量 n 字符串常量 nihao 定义常量 把字面量写成大写字母形式 是一个好习惯 方法
  • sql语句中分组取每组的最新数据

    今天敲sql的时候遇到了一个问题 业务流程是 检查记录 gt 整改通知 gt 整改回复 gt 检查组复查 如果复查不通过 则 检查组复查 gt 整改通知 gt 整改回复 gt 检查组复查 此时一条检查记录就可能对应多条整改通知去最新数据就用
  • JavaScript 将扁平的数组输出转为树形结构(需要考虑性能)

    扁平数组转为树形结构 做后台管理系统时也是经常用到的功能 面试时也是常常出现的 今天实现一下 引用两篇掘金大佬的文章 感谢大佬 一 什么是好算法 什么是坏算法 判断一个算法的好坏 一般从执行时间和占用空间来看 执行时间越短 占用的内存空间越
  • 刷脸设备引进越来越多的人喜欢靠脸消费

    刷脸支付已经成为今年比较热门的一个话题了 随便刷个新闻 微博或各大网络平台等都不免会看到有关刷脸支付的消息 感觉不了解刷脸支付就好像与这个时代脱离轨道了似的 那么今天就来给大家讲一讲刷脸支付对于消费者和商家各具有优势它比扫码支付更加安全便捷
  • gdb调试时显示数组

    可以用下面的方法来显示数组 p array len 其中p相当于print array就是数组首地址 也可以是数组名 len是想要显示的数组的长度 比如我有一个数组的定义 int a 1 2 3 4 5 那么想要显示的时候就可以写 p a
  • 基于百度PaddleHub实现人像美颜V1.0

    AI美颜核心技术之一就是人脸关键点检测 PaddleHub已经开源了人脸关键点检测模型 face landmark localization 人脸关键点检测是人脸识别和分析领域中的关键一步 它是诸如自动人脸识别 表情分析 三维人脸重建及三维
  • Spring入门-基本介绍和IOC控制反转(注解方式)

    1 Spring概述 Spring官网 Spring 顾名思义 java软件行业的春天 彻底解放了程序员从原生的开发中 一个轻量级的非侵入式的框架 特点 控制反转 IoC 面向切面 Aop 组成 组成 Spring 框架的每个模块 或组件
  • 工作学习中对 Windows 的积累

    wscript 命令 bat 文件 vbs 文件 wshell wshshell Sleep 1000 wshshell SendKeys 123 wshshell Sleep 1000 全局搜索 链接 https blog csdn ne
  • 跟奥巴马一起编程 C语言

    美国总统奥巴马不仅呼吁所有人都学习编程 甚至以身作则编写代码 成为美国历史上首位编写计算机代码的总统 2014 年底 为庆祝 计算机科学教育周 正式启动 奥巴马编写了很简单的计算机代码 在屏幕上画一个正方形 现在你也跟他一起画吧 输入格式
  • Activiti使用教程

    1 概念 首先需要分清三个概念 流程 流程实例 任务实例 Activiti提供4个bean来操作流程 RepositoryService RuntimeService TaskService HistoryService 2 流程 针对于某
  • 我们为什么使用KafKa

    为什么我们需要使用KafKa https blog csdn net SJF0115 article details 78480433
  • Atlas VPN 曝零日漏洞,允许查看用户真实 IP 地址

    Atlas VPN 已确认存在一个零日漏洞 该漏洞允许网站所有者查看 Linux 用户的真实 IP 地址 不久前 发现该漏洞的人在Reddit上公开发布了有关该零日漏洞的详细信息以及漏洞利用代码 关于 Atlas VPN 零日漏洞 Atla
  • stm32固件升级之U盘(四)

    目录 序言 什么是IAP升级 STM32代码启动介绍 IAP设计思路 bootloader设计 stm32内部flash分区 移植U盘底层源码 总结 序言 对于嵌入式软件开发来说 U盘离线更新固件是一种常用的更新手段 本篇文章讲述了如何通过