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

STM32

USB

固件库

IAP

升级

(

以下全部为实际操作所得

)

最近做了

STM32

通过

USB

程序升级功能,也就是所谓的

DFU

,所使用的程序为

ST

公司提供的例

子程序(位置为:安装目录

/ARM/Examples/ST/STM32F10xUSBLib/Demos/Device_Firmware_Upgrade

)

,

此文件夹包含多两个工程,

project

文件夹存放的是用来升级的程序

-IAP

binary

文件夹存放的是用户程

APP

一、

USB

升级程序

打开

Project

里面的工程

(用什么软件打开就不用我讲了吧)

如果你电脑上有

Source Insight

就更好

了,方便查阅。从

MAIN

里面我们可以知晓,程序先判断某个按键是否按下(这个可以根据你的实际电

路设计来修改)

,如果按下则进入升级功能程序,否则就跳转到

APP

程序,也就是用户程序。不多说了,

直接上程序。

i

f (DFU_Button_Read() == 0x00)//

如果未按下

1

{ /* Test if user code is programmed starting from address 0x8003000 */

if (((*(vu32*)ApplicationAddress) & 0x2FFE0000 ) == 0x20000000)

2

{ /* Jump to user application */

JumpAddress = *(vu32*) (ApplicationAddress + 4);

3

Jump_To_Application = (pFunction) JumpAddress;

4

/* Initialize user application's Stack Pointer */

__MSR_MSP(*(vu32*) ApplicationAddress);

5

Jump_To_Application();

6

}

} /* Otherwise enters DFU mode to allow user to program his application */

1

判断按键是否按下,如果未按下,则准备进入用户程序区

,

是准备哦,因为后面还有判断语句。

否则就进入

USB

升级程序。下面的

USB

升级程序就是配置一些

USB

方面的东东,因为和系统

已经配好了,就无需管了。

2

用来判断用户的代码存放地址是否郑旭(这个地址用户可以修改,是系统的一个宏定义

ApplicationAddress

,稍后将做解释)

,如果用户程序代码未按规定存放,或者用户代码区没有程

序的话,程序会跳到

USB

升级程序那里去,等待下载升级程序。

3

ApplicationAddress

为用户程序的首地址,同时也是堆栈的地址。紧接着它的是复位中断地址,

所以这条语句是获取复位中断的地址。

4

获取堆栈的地址

5

将堆栈的地址写入堆栈指针(什么用途就不用说了)

6

跳转到用户函数去执行。

程序中我们要修改几个宏定义,具体名称和意义如下所示(用搜索功能获取这些名称位置)

ApplicationAddress

用户程序地址,系统默认为

0x08000000

,我们修改为

0x08003000

DFU_ENTER

GPIOA

DFU_ENTER_PIN

GPIO_Pin_8

RCC_APB2Periph_GPIO_DFU

RCC_APB2Periph_GPIOA

这三个为判断按键的管脚配置


版权声明:本文为weixin_39736913原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。