[STM32入门]---利用ST提供的USB例程实现USBIAP功能_第1页
[STM32入门]---利用ST提供的USB例程实现USBIAP功能_第2页
[STM32入门]---利用ST提供的USB例程实现USBIAP功能_第3页
[STM32入门]---利用ST提供的USB例程实现USBIAP功能_第4页
全文预览已结束

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、STM32入门利用ST提供的USB例程实现USBIAP功厶匕冃能我们知道ST推出的Cortex-M3平台STM32内部有两个Flash区域,一是SystemFlash,ST官方保留的一个区域,用于存放IAP代码。该区域不对用户开放,仅提供UART的通讯接口用于IAP升级;另一个区域是UserFlash,这一部分是供用户自由使用的。STM32自带USB2.0Device接口,如果需要通过USB接口来实现IAP功能需要如何做呢?这里介绍如何利用STSTM32xxUSBDevelopmentKit提供的DFU代码来实现上述功能。我用STM3210EVB来演示这个功能。阅读前请下下载下列代码压缩包和应

2、用软件:1、STM3210B-EVALdemonstrationsoftwarev1.1.zipSTM3210B-EVALdemonstrationsoftwarev1.1.zip(文件大小:2.15M)ST官方的下载路径:HYPERLINK /sto/stonline/products/support/micro/files/um0435.zip2、STM32F10 xxxUSBdeveloperkitv1.0.zipSTM32F10 xxxUSBdeveloperkitv1.0.zip(文件大小:461K)ST官方的下载路径:HYPERLINK /sto/stonline/products

3、/support/micro/files/um0424.zip3、DfuSeUSBDeviceFirmwareUpgradev2.2.zipDfuSeUSBDeviceFirmwareUpgradev2.2.zip(文件大小:7.85M)ST官方的下载路径:HYPERLINK /st/stonline/products/support/micro/files/um0412.zip上述文档对于的用户参考手册,请自行到STMCU网站下载。HYPERLINK http:/www.st.eom/mcu/familiesdocs-110.html%23Applicatihttp:/www.st.eom/

4、mcu/familiesdocs-110.html#Application%20Note下列步骤将介绍如何通过ST官方的USB升级代码实现程序的下载更新的功能(IAP)。1、打开STM3210B-EVALdemonstrationsoftware压缩包,在STM3210B-EVALdemonstrationsoftwareDemosource下打开main.c文件,找至UvoidInterruptConfig(void)函数/*SettheVectorTablebaseaddressat0 x08000000*/NVIC_SetVectorTable(NVIC_VectTab_FLASH,0

5、x00);这里我们需要修改代码的中断矢量起始地址,这样做的目的是为了处理IAP代码在Flash存放的区域与ApplicationCode部分的存放空间不会发生地址冲突。这里我们假设IAP存放在UserFlash的0 x080000000 x08003FFF区域,Applicationcode存放在UserFlash的0 x080040000 x0801FFFF区域。因为Applicationcode的开始地址是由0 x08004000开始,这样我们需要为应用代码的中断向量地址做一个重映射。因此我们修改该代码为:/*SettheVectorTablebaseaddressat0 x0800400

6、0*/NVIC_SetVectorTable(NVIC_VectTab_FLASH,0 x4000);请注意这里NVIC_SetVectorTable函数的型参送入的是相对偏移地址,而不是绝对地址;2、在STM3210B-EVALdemonstrationsoftwareDemoprojectEWARM下找到lnkarm_flash.xcl文件,在XCL文件中找到下面的配置,该配置用于定制应用代码在Flash区域的存放空间和代码运行是RAM可以提供的空间。/CodememoryinFLASH-DR0MSTART=0 x8000000-DR0MEND=0 x803FFFF/DatainRAM-D

7、RAMSTART=0 x20000000-DRAMEND=0 x20004FFF由于我们的目标应用代码将是在0 x08004000区域运行,因此我们修改为:/CodememoryinFLASH-DR0MSTART=0 x8004000-DROMEND=0 x801FFFF/DatainRAM-DRAMSTART=0 x20000000-DRAMEND=0 x20004FFF在编译的时候请确保ProjectOptionsLinkerConfig标签下的链接命令文件选择的是上述Inkarm_flash.xcl文件;3、应用部分改好,现在我们修改USB固件升级部分的代码,打开STM32F10XxxU

8、SBdeveloperkit开发包。4、在开发包下面找到STM32F10 xUSBLibUSBLibdemosDevice_Firmware_Upgrade例程,该例程是一个在STM32F10 xx系列MCU上实现运行在UserFlash区域的IAP自升级代码,通过STM32自身提供的USB接口实现。在STM32F10 xUSBLibUSBLibdemosDevice_Firmware_Upgradesource路径下找到main.c文件,在56行:if(DFU_Button_Read()!=0 x00)/*Testifusercodeisprogrammedstartingfromaddre

9、ss0 x8003000*/if(*(vu32*)0 x8003000)&0 x2FFF0000)=0 x20000000)/*Jumptouserapplication*/JumpAddress=*(vu32*)(ApplicationAddress+4);Jump_To_Application=(pFunction)JumpAddress;/*InitializeuserapplicationsStackPointer*/_MSR_MSP(*(vu32*)ApplicationAddress);Jump_To_Application();/*OtherwiseentersDFUmodetoallowusertoprogramhisapplication*/这段代码的功能是对应用部分的代码开始地址做判断,这里的地址与我们之前的步骤1、2都是对应的。同样这个代码做如下更改:/*Testifusercodeisprogrammedstartingfromaddress0 x8004000*/if(*(vu32*)0 x8004000)&0 x2FFF0000)=0 x20000000)5、hw_config.h中定义:#defineApplicationAddress0 x080

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论