stm32固件升级之U盘(四) | 您所在的位置:网站首页 › mugen10主程序升级11 › stm32固件升级之U盘(四) |
目录 序言 什么是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会出现各种问题。具体的流程图如下: 本篇文章以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 实验室设备网 版权所有 |