68精品久久久久久欧美,最近中文字幕完整在线看一,久久亚洲男人天堂,最近中文字幕完整视频高清1

你好!歡迎來到深圳市穎特新科技有限公司!
語言
當前位置:首頁 >> 品牌中心 >> ST/意法 >> 利用USB DFU實現(xiàn)IAP功能之演示講解

利用USB DFU實現(xiàn)IAP功能之演示講解

關鍵字:USBDFUIAP 作者: 來源: 發(fā)布時間:2019-01-03  瀏覽:25

前言
伴隨著固件升級需求的增加,STM32提供了靈活的升級方式。本文一步一步介紹如何利用USBDFU Class以及ST提供的DfuSedemo軟件工具實現(xiàn)IAP(InApplication Program)功能,但并不涉及到DFU class移植。

一、 實現(xiàn)環(huán)境
開發(fā)板:STM32F746G-DISCO
開發(fā)庫:STM32CubeF7v1.3.0
集成開發(fā)環(huán)境:IAR v7.70.1.11486
MDK-ARM Plus v5.20.0.0

(只需兩者中一種)


優(yōu)化級別:High (IAR)
Level 3 (-O3) (MDK-ARM)
DFU演示軟件:Dfu file manager v3.0.5
DfuSeDemo v3.0.5

實現(xiàn)過程在STM32F7系列上展開,但USB DFU實現(xiàn)的IAP功能并不只局限于STM32F7系列,可以通過用戶手冊判斷所采用微控制器型號是否支持USB以及IAP功能。STM32Cube開發(fā)庫為各系列STM32提供了齊全的USBDFU例程可供參考。


二、 IAP介紹
IAP(In application program)主要為使用者提供了一種更加靈活的固件升級方式,可以根據(jù)應用需要定義何時、何種情況發(fā)生時進行固件升級。在介紹步驟前,需要對IAP原理有一定認識。結合下圖(僅供參考,IAP實際應用方式更加靈活),IAP的應用中,用戶程序與IAP驅(qū)動程序位于不同的存儲區(qū)域。在應用過程中,利用IAP驅(qū)動程序?qū)⒂脩艄碳虞d到固定位置,完成升級。更多關于IAP應用介紹請參考AN3965。
其中,IAP驅(qū)動程序首先燒錄固化,并不會隨著用戶程序的升級而改變。用戶固件升級完畢后,在IAP驅(qū)動程序引導下,跳轉(zhuǎn)到用戶固件對應Flash位置,執(zhí)行用戶程序。

1

三 、實現(xiàn)步驟
3.1 DFU工具安裝
安裝DFUdemo工具DfuSe v3.0.5,主要提供了驅(qū)動、Dfufile manager 和DfuSeDemo。關于DfuSe的詳細內(nèi)容(安裝步驟、使用介紹)請參考UM0412。
3.2 IAP驅(qū)動固件生成與裝載
利用STM32CubeF7v1.3.0開發(fā)庫提供的USB DFU例程生成IAP驅(qū)動固件(文件夾路徑:…\ STM32Cube_FW_F7_V1.3.0\Projects\STM32746G-Discovery\Applications\USB_Device\DFU_Standalone)。
利用燒錄工具燒錄到開發(fā)板中。本例程實現(xiàn)重啟后,如果板上User按鍵按下或者沒有有效的用戶應用程序,則進入USB DFU模式,等待升級;否則,進入用戶應用。
下面是摘取的部分例程。

@usbd_conf.h
/* The first sector(32 KB) is reserved for DFU code */
#defineUSBD_DFU_APP_DEFAULT_ADD 0x08008000

@usbd_dfu.c
USBD_DFU_Init(…)
{

hdfu->data_ptr =USBD_DFU_APP_DEFAULT_ADD;

}

@main.c
/* Test if user code is programmed startingfrom USBD_DFU_APP_DEFAULT_ADD address */
if(((*(__IOuint32_t*)USBD_DFU_APP_DEFAULT_ADD) & 0x2FFE0000 ) == 0x20000000)
{
/* Jump to userapplication */
JumpAddress = *(__IOuint32_t*) (USBD_DFU_APP_DEFAULT_ADD + 4);
JumpToApplication =(pFunction) JumpAddress;

/* Initialize userapplication's Stack Pointer */
__set_MSP(*(__IOuint32_t*) USBD_DFU_APP_DEFAULT_ADD);
JumpToApplication();
}

用戶固件對應的首地址被定義在0x08008000。用戶也可以自定義地址,需要注意如下幾點:

1.禁止定義在0x08008000地址前(STM32F7系列,0x0~0x0800FFFF屬于Sector0,已經(jīng)開辟為IAP驅(qū)動程序區(qū)域)。
2.自定義地址所屬Sector在升級時會全部擦除,即使定義地址并不位于對應Sector的首地址。
3.自定義地址需要保持512-byte對齊。
4.自定義地址需要與用戶固件對應的裝載地址以及用戶中斷向量表地址保持一致。
在實現(xiàn)跳轉(zhuǎn)到用戶程序的代碼中,將用戶中斷向量表中第一個4字節(jié)指向的棧首地址分配給MSP。第二個4字節(jié)為復位中斷向量,指向執(zhí)行首地址。
在開發(fā)IAP驅(qū)動程序時,需要避免PC指針跳到用戶程序區(qū)域。同時,充分考慮Stack & Heap大小,避免出現(xiàn)USB DFU正常識別,但不能正常工作情況,如下圖所示。

2

3.3 用戶固件生成
本文采用STM32CubeF7v1.3.0開發(fā)庫中TIM_TimeBase例程作為用戶程序(文件夾路徑:STM32Cube_FW_F7_V1.3.0\Projects\STM32746G-Discovery\Examples\TIM\TIM_TimeBase)。
IAP升級所需用戶固件,主要有兩處需要變動:
1. 在鏈接工具中,程序裝載地址
2. 中斷向量表首地址
上述兩種變動需要保持一致,并且與IAP中定義的用戶區(qū)域首地址保持一致。
本IAP驅(qū)動程序中,用戶固件裝載地址相對于0x08000000偏移地址為0x8000。
在MDK中,改動前后比較如下圖所示。

3

在IAR中,更改步驟如下所示:

4

修改完畢后,生成hex文件(STM32746G_DISCOVERY.hex)。


3.4 用戶固件轉(zhuǎn)換與升級
打開Dfufile manager工具,點擊OK,進入轉(zhuǎn)換工具主界面。

5

按照下圖步驟,首先載入生成的HEX文件(STM32746G_DISCOVERY.hex);然后在TargetID、Target Name、Device properties中自定義內(nèi)容,這部分內(nèi)容在DfuSe Demo工具中選擇.dfu文件時會予以顯示,并不影響燒錄文件內(nèi)容。最后,點擊Generate完成HEX文件àDFU文件轉(zhuǎn)換。

6

為STM32F746G-DISCO板供電,通過USB線將板上USB_FS接口與電腦相連。由于STDiscovery板已經(jīng)加載了IAP應用程序,并且沒有有效的用戶應用程序,因此在IAP應用程序中,直接進入USB DFU模式,以供電腦識別USBDFU器件。正常識別情況如左下圖。
右下圖情況是由于沒有正確裝載Driver導致,可以通過右擊“DFU in FS Mode”選擇更新驅(qū)動程序軟件\瀏覽計算機以查找驅(qū)動程序軟件(驅(qū)動文件位于DfuSe v3.0.5安裝目錄\DfuSe v3.0.5\Bin\ Driver)。

7

打開DfuSeDemo,結合下圖步驟,點擊’Choose’加載之前轉(zhuǎn)換的.dfu文件;選擇配置;點擊’Update’完成擦除與下載;另外,可以通過點擊’Verify’驗證是否下載成功。更多關于DfuSe內(nèi)容,請參考UM0412。

8

用戶固件升級完成。重啟后,正常進入用戶應用。如果重啟過程中,板上USER鍵按下,進入USB DFU模式,等待升級。


四 小結
介紹了利用USBDFU實現(xiàn)IAP過程,以及實現(xiàn)過程中注意事項。在DfuSev3.0.5安裝目錄中包含了必要的文檔,介紹如何使用DfuSe工具,以及如何開發(fā)基于STMicroelectronicsDFU方案的上位機應用。

更多內(nèi)容請移步:

STM32單片機中文官網(wǎng)
意法半導體/ST/STM

編輯:admin  最后修改時間:2019-01-03

聯(lián)系方式

0755-82591179

傳真:0755-82591176

郵箱:vicky@yingtexin.net

地址:深圳市龍華區(qū)民治街道民治大道973萬眾潤豐創(chuàng)業(yè)園A棟2樓A08

Copyright © 2014-2023 穎特新科技有限公司 All Rights Reserved.  粵ICP備14043402號-4

敦化市| 德昌县| 洪湖市| 通辽市| 临澧县| 额济纳旗| 南丹县| 绿春县| 景泰县| 介休市| 长治市| 阿克陶县| 治多县| 通江县| 宣威市| 松潘县| 同心县| 扎兰屯市| 彰化县| 北宁市| 肥西县| 松潘县| 岗巴县| 抚顺市| 凤台县| 彭泽县| 广德县| 政和县| 莆田市| 宝清县| 吉林市| 乐亭县| 西和县| 阿坝县| 四会市| 射阳县| 内乡县| 逊克县| 阿图什市| 宁乡县| 东光县|