利用ST提供的USB例程实现USB IAP功能

【STM32Cube开发记录】固件升级失败“ST-Link is not in the dfu mode Please restart it“ 已解决 STM32CubeIDE使用STLINK时,固件升级失败出现"ST-Link is not in the dfu mode Please restart it" 已解决 阅读详情

[STM32入门]---利用ST提供的USB例程实现USB IAP功能

 我们知道ST推出的Cortex-M3平台STM32内部有两个Flash区域,一是System Flash,ST官方保留的一个区域,用于存放IAP代码。该区域不对用户开放,仅提供UART的通讯接口用于IAP升级;另一个区域是User Flash,这一部分是供用户自由使用的。STM32自带USB 2.0 Device接口,如果需要通过USB接口来实现IAP功能需要如何做呢?这里介绍如何利用ST STM32xx USB Development Kit提供的DFU代码来实现上述功能。我用STM3210EVB来演示这个功能。

    
阅读前请下下载下列代码压缩包和应用软件:
1
、STM3210B-EVAL demonstration software v1.1.zip
 STM3210B-EVAL demonstration software v1.1..zip(文件大小
:2.15M) 

   ST官方的下载路径:
   http://www.st.com/stonline/products/support/micro/files/um0435.zip

2
、STM32F10xxx USB developer kit v1.0.zip
 STM32F10xxx USB developer kit v1.0.zip (文件大小
:461K) 

   ST官方的下载路径:
   http://www.st.com/stonline/products/support/micro/files/um0424.zip

3
、DfuSe USB Device Firmware Upgrade v2.2.zip
 DfuSe USB Device Firmware Upgrade v2.2.zip (文件大小
:7.85M) 

   ST官方的下载路径:
   http://www.st.com/stonline/products/support/micro/files/um0412.zip

    
上述文档对于的用户参考手册,请自行到ST MCU网站下载。
    http://www.st.com/mcu/familiesdocs-110.html#Application%20Note


    
下列步骤将介绍如何通过ST官方的USB升级代码实现程序的下载更新的功能(IAP)。

1
、打开STM3210B-EVAL demonstration software压缩包,在STM3210B-EVAL demonstration software\Demo\source下打开main.c文件,找到void InterruptConfig(void) 函数

  /* Set the Vector Table base address at 0x08000000 */
    NVIC_SetVectorTable(NVIC_VectTab_FLASH, 0x00);

    
这里我们需要修改代码的中断矢量起始地址,这样做的目的是为了处理IAP代码在Flash存放的区域与Application Code部分的存放空间不会发生地址冲突。这里我们假设IAP存放在User Flash的0x08000000~0x08003FFF区域,Application code存放在User Flash的0x08004000~0x0801FFFF区域。因为Application code的开始地址是由0x08004000开始,这样我们需要为应用代码的中断向量地址做一个重映射。因此我们修改该代码为:

  /* Set the Vector Table base address at 0x08004000 */
    NVIC_SetVectorTable(NVIC_VectTab_FLASH, 0x4000);  

    
请注意这里NVIC_SetVectorTable函数的型参送入的是相对偏移地址,而不是绝对地址;

2
、在STM3210B-EVAL demonstration software\Demo\project\EWARM下找到lnkarm_flash.xcl文件,在XCL文件中找到下面的配置,该配置用于定制应用代码在Flash区域的存放空间和代码运行是RAM可以提供的空间。

    // Code memory in FLASH
    -DROMSTART=0x8000000
    -DROMEND=0x803FFFF

    // Data in RAM
    -DRAMSTART=0x20000000
    -DRAMEND=0x20004FFF

    
由于我们的目标应用代码将是在0x08004000区域运行,因此我们修改为:

    // Code memory in FLASH
    -DROMSTART=0x8004000
    -DROMEND=0x801FFFF

    // Data in RAM
    -DRAMSTART=0x20000000
    -DRAMEND=0x20004FFF

    
在编译的时候请确保Project->Options->Linker->Config标签下的链接命令文件选择的是上述lnkarm_flash.xcl文件;

3
、应用部分改好,现在我们修改USB固件升级部分的代码,打开STM32F10xxx USB developer kit开发包。

4
、在开发包下面找到 \STM32F10xUSBLib\USBLib\demos\Device_Firmware_Upgrade例程,该例程是一个在STM32F10xx系列MCU上实现运行在User Flash区域的IAP自升级代码,通过STM32自身提供的USB接口实现。在\STM32F10xUSBLib\USBLib\demos\Device_Firmware_Upgrade\source路径下找到main.c文件,在56行:

       if (DFU_Button_Read() != 0x00)
       { /* Test if user code is programmed starting from address 0x8003000 */
               if (((*(vu32*)0x8003000) & 0x2FFF0000 ) == 0x20000000)
               { /* Jump to user application */

              JumpAddress = *(vu32*) (ApplicationAddress + 4);
               Jump_To_Application = (pFunction) JumpAddress;
               /* Initialize user application's Stack Pointer */
               __MSR_MSP(*(vu32*) ApplicationAddress);
              Jump_To_Application();
               }    
  } /* Otherwise enters DFU mode to allow user to program his application */

    
这段代码的功能是对应用部分的代码开始地址做判断,这里的地址与我们之前的步骤1、2都是对应的。

    
同样这个代码做如下更改:
        /* Test if user code is programmed starting from address 0x8004000 */
               if (((*(vu32*)0x8004000) & 0x2FFF0000 ) == 0x20000000)

5
、hw_config.h中定义:
    #define ApplicationAddress 0x08003000
    
改为
    #define ApplicationAddress 0x08004000
    
    
编译代码,下载到STM3210 Evaluation Board。

6
、在ST的网站中找到USB IAP的PC端用于程序DfuSe USB Device Firmware Upgrade,安装后执行DfuSe Demonstration程序。

 


[STM32入门]---利用ST提供的USB例程实现USB IAP功能 <br /> 我们知道ST推出的Cortex-M3平台STM32内部有两个Flash区域,一是System Flash,ST官方保留的一个区域,用于存放IAP代码。该区域不对用户开放,仅提供UART的通讯接口用于IAP升级;另一个区域是User Flash,这一部分是供用户自由使用的。STM32自带USB 2.0 Device接口,如果需要通过USB接口来实现IAP功能需要如何做呢?这里介绍如何利用ST STM32xx USB Development Kit提供的DFU代码来实现上述功能。我用STM3210 阅读详情

相关推荐

stm32f4 usb 升级程序_STM32之USB固件升级 IAP USB程序升级 上位机软件操作

STM32之USB固件库IAP升级(以下全部为实际操作所得)最近做了STM32通过USB程序升级功能,也就是所谓的DFU,所使用的程序为ST公司提供的例子程序(位置为:安装目录/ARM/Examples/ST/STM32F10xUSBLib/Demos/Device_Firmware_Upgrade),此文件夹包含多两个工程,project文件夹存放的是用来升级的程序-IAP,binary文件夹存...

weixin_39736913的博客 960

STM32 IAP应用开发——通过USB实现固件升级

IAP(In-Application Programming) 指MCU可以在系统中获取新代码并对自己重新编程,即可用程序来改变程序。在应用编程(IAP)是用户的应用代码对片内Flash存储器进行擦除/编程的方法。这种方式的典型应用就是用一小段代码来实现程序的下载,实际上单片机的ISP功能就是通过IAP技术来实现的,即片子在出厂前就已经有一段小的boot程序在里面,片子上电后,开始运行这段程序,当检测到上位机有下载要求时,便和上位机通信,然后下载数据到数据存储区,从而实现固件升级。

ShenZhen_zixian的博客 1万+

STM32 USB IAP升级实现:USB MSD Bootloader设计与实战

STM32微控制器家族是基于ARM Cortex-M系列处理器核心设计的,由STMicroelectronics开发。这一系列处理器以其高性能、低成本以及丰富的外设集成闻名,广泛应用于各种嵌入式系统中。STM32根据不同的性能等级、内存大小、外设类型和功耗要求,被细分为多个子系列,以满足不同应用场景的需求。IAP,全称为In-Application Programming,指的是在应用程序运行的同时对程序存储器内的代码进行编程的技术。

weixin_42601134的博客 916

STM32通过USB实现Bootlader/IAP功能

前沿: 最近在做STM32的USB Bootlader/IAP功能,也就是通过USB实现固件升级,本文介绍下实现的基本思路,希望对实现IAP的同学一个参考,改方法已经在产品中得到实际应用并验证是比较合理,稳定可靠的。 程序空间划分: 在单片机的程序Flash中分两个区,分别存储Bootloader代码和App代码,Bootloader放到代码起始地址,也就是0x08000000,App放

csshuke的专栏 3285

GD_USB_IAP工具--GD单片机开发工具

有关GD单片机的IAP开发工具,正在研究GD单片机的朋友一起来学习吧

拆解一个800G光模块:手把手带你认识里面的MT插芯和光纤阵列(FA)

本文详细拆解了800G光模块中的关键组件MT插芯和光纤阵列(FA),揭示了并行光学技术如何实现高速数据传输。通过显微镜下的精密观察,展示了MT插芯的高精度构造和光纤阵列的连接奥秘,同时解析了高精度研磨工艺对光信号传输的重要性。这些微型组件是高速收发模块实现800Gbps带宽的核心技术。

weixin_30839881的博客 1546

基于stm32的usb iap程序升级步骤

usb自动更新程序IAP(in application programming)DFU(develepment firemeware upgrate).整个芯片有512k的片内flash,用户程序下载在里面运行,flash的地址是0x8000000,大小为0x80000,usb自动更新程序首先下载0x8000000——0x80002FFF,总大小为12K,用户程序下载到0x80003000,大小为

plauajoke的专栏 4297

2016域控服务器迁移,WIN Server2016 域服务器迁移出错

各位大神: 这几天刚安装了一台windows server 2016做域迁移时出现错误:1、默认SYSLOG、NETLOGON共享文件重启后自动取消共享,即使手动打开后依然会出现自动取消2、组策略中编辑策略时出现以下报错 policys.png (19.29 KB)2017-2-7 13:52操作此动作之前可以访问本机的共享(NETLOGON)3、使用DCDIAG检测多个报错:C:\Use...

weixin_31833039的博客 3313

基于USB的IAP功能实现

 我们知道ST推出的Cortex-M3平台STM32内部有两个Flash区域,一是System Flash,ST官方保留的一个区域,用于存放IAP代码。该区域不对用户开放,仅提供UART的通讯接口用于IAP升级;另一个区域是User Flash,这一部分是供用户自由使用的。STM32自带USB 2.0 Device接口,如果需要通过USB接口来实现IAP功能需要如何做呢?这里介绍如何利用ST STM32xx USB Development Kit提供的DFU代码来实现上述功能。我用STM3210EVB来演示

kerson的专栏 5162

PMAC上位机通信原理(C#)

基础是引用 两个 ODT dll 原理是先注册到communication.AsyncDataAvailable事件中去 if (bSuccess1) { communication.AsyncDataAvailable += communication_AsyncDataAvailable; } bool bSuccess2 = communication1.GPAsciiConnect(strIP, iPort, strName, strPassword); i

weixin_45507349的博客 1086

基于ADS的低噪声放大电路设计

1. 低噪声放大器设计理论基础 1.1 低噪声放大器在通信系统中的作用 低噪声放大器的主要作用是放大天线从空中接收到的微弱信号,减小噪声干扰,以供系统解调出所需的信息数据。当今,人们对于各种无线通信工具的要求越来越高,如功率辐射要小、作用距离要远、覆盖范围要广等,这就对系统的接收灵敏度提出了更高的要求,系统接收灵敏度的计算公式为: Smin⁡=−144(dBmHz)+NF+10lg⁡BW(MHz)+SN(dB) {S_{\min }} = - 144\left( {\frac{{{\rm{dBm}}}}{

ASH_GUARDIAN的博客 4万+

STM32 IAP应用开发——通过内置DFU实现USB升级(方式2)

DFU全称为Download Firmware Update,是ST官方推出的一个通过USB接口进行IAP升级的方案,同串口ISP一样,他们都集成在了芯片内部的Bootloader区段,可以通过配置boot引脚来启动。

ShenZhen_zixian的博客 5766

vuecil3+版本下,兼容ie等不支持es6的低版本浏览器

*综上,完成兼容性涉及到的配置的文件有,对应在页面中查看代码,就不单独附代码了:main.js。

yhr0322的博客 832
上一篇: 关于 STM32 的 IAP 概念和应用笔记
下一篇: 解决Qt5在Windows平台MSVS2010编译缺少Platform Plugin的Issue
獠
獠
博客等级 码龄16年 43粉丝 6原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值