第一范文网 - 专业文章范例文档资料分享平台

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

来源:用户分享 时间:2020-06-30 本文由中二个软 分享 下载这篇文档 手机版
说明:文章内容仅供预览,部分内容可能不全,需要完整文档或者需要复制内容,请下载word后使用。下载word有问题请添加微信号:xxxxxx或QQ:xxxxxx 处理(尽可能给您提供完整文档),感谢您的支持与谅解。

[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 Note

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

能(IAP)。

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

uptConfig(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固件升级部分的代码,打开STM32F10x

xx 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 Firmwa

re Upgrade,安装后执行DfuSe Demonstration程序。

搜索“diyifanwen.net”或“第一范文网”即可找到本站免费阅读全部范文。收藏本站方便下次阅读,第一范文网,提供最新教学研究STM32入门 - 利用ST提供的USB例程实现USB IAP功能 全文阅读和word下载服务。

STM32入门 - 利用ST提供的USB例程实现USB IAP功能 .doc 将本文的Word文档下载到电脑,方便复制、编辑、收藏和打印
本文链接:https://www.diyifanwen.net/wenku/1108476.html(转载请注明文章来源)
热门推荐
Copyright © 2018-2022 第一范文网 版权所有 免责声明 | 联系我们
声明 :本网站尊重并保护知识产权,根据《信息网络传播权保护条例》,如果我们转载的作品侵犯了您的权利,请在一个月内通知我们,我们会及时删除。
客服QQ:xxxxxx 邮箱:xxxxxx@qq.com
渝ICP备2023013149号
Top