stm32固件升级之U盘(四) 您所在的位置:网站首页 mugen10主程序升级11 stm32固件升级之U盘(四)

stm32固件升级之U盘(四)

2023-09-07 15:19| 来源: 网络整理| 查看: 265

目录

序言

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

图1 

图2 

  图3

总结

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

 Flash读写操作U盘移植使用

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



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有