STM32之USB固件升级 IAP USB程序升级 上位机软件操作

STM32之USB固件升级 IAP USB程序升级 上位机软件操作

ID:37640192

大小:371.45 KB

页数:9页

时间:2019-05-27

STM32之USB固件升级 IAP USB程序升级 上位机软件操作_第1页
STM32之USB固件升级 IAP USB程序升级 上位机软件操作_第2页
STM32之USB固件升级 IAP USB程序升级 上位机软件操作_第3页
STM32之USB固件升级 IAP USB程序升级 上位机软件操作_第4页
STM32之USB固件升级 IAP USB程序升级 上位机软件操作_第5页
资源描述:

《STM32之USB固件升级 IAP USB程序升级 上位机软件操作》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库

1、STM32之USB固件库IAP升级(以下全部为实际操作所得)最近做了STM32通过USB程序升级功能,也就是所谓的DFU,所使用的程序为ST公司提供的例子程序(位置为:安装目录/ARM/Examples/ST/STM32F10xUSBLib/Demos/Device_Firmware_Upgrade),此文件夹包含多两个工程,project文件夹存放的是用来升级的程序-IAP,binary文件夹存放的是用户程序—APP。一、USB升级程序打开Project里面的工程(用什么软件打开就不用我讲了吧),如果你电脑上有SourceInsight就更好了,方

2、便查阅。从MAIN里面我们可以知晓,程序先判断某个按键是否按下(这个可以根据你的实际电路设计来修改),如果按下则进入升级功能程序,否则就跳转到APP程序,也就是用户程序。不多说了,直接上程序。if(DFU_Button_Read()==0x00)//如果未按下1{/*Testifusercodeisprogrammedstartingfromaddress0x8003000*/if(((*(vu32*)ApplicationAddress)&0x2FFE0000)==0x20000000)2{/*Jumptouserapplication*/Jump

3、Address=*(vu32*)(ApplicationAddress+4);3Jump_To_Application=(pFunction)JumpAddress;4/*Initializeuserapplication'sStackPointer*/__MSR_MSP(*(vu32*)ApplicationAddress);5Jump_To_Application();6}}/*OtherwiseentersDFUmodetoallowusertoprogramhisapplication*/1、判断按键是否按下,如果未按下,则准备进入用户程序区

4、,是准备哦,因为后面还有判断语句。否则就进入USB升级程序。下面的USB升级程序就是配置一些USB方面的东东,因为和系统已经配好了,就无需管了。2、用来判断用户的代码存放地址是否郑旭(这个地址用户可以修改,是系统的一个宏定义ApplicationAddress,稍后将做解释),如果用户程序代码未按规定存放,或者用户代码区没有程序的话,程序会跳到USB升级程序那里去,等待下载升级程序。3、ApplicationAddress为用户程序的首地址,同时也是堆栈的地址。紧接着它的是复位中断地址,所以这条语句是获取复位中断的地址。4、获取堆栈的地址5、将堆栈的

5、地址写入堆栈指针(什么用途就不用说了)6、跳转到用户函数去执行。程序中我们要修改几个宏定义,具体名称和意义如下所示(用搜索功能获取这些名称位置):ApplicationAddress用户程序地址,系统默认为0x08000000,我们修改为0x08003000。DFU_ENTERGPIOADFU_ENTER_PINGPIO_Pin_8RCC_APB2Periph_GPIO_DFURCC_APB2Periph_GPIOA这三个为判断按键的管脚配置USB_DISCONNECTGPIOBUSB_DISCONNECT_PINGPIO_Pin_14RCC_APB

6、2Periph_GPIO_DISCONNECTRCC_APB2Periph_GPIOB这个三给为主机识别USB设备的控制端口以上为程序上要进行的修改,当然你可以根据你的需要修改一些应用上的功能。USB升级工程配置如下,(例子程序的工程已经配好,你可以查看,这里只用来做解释)红色框内为程序的首地址,绿色框为所使用的地址空间大小,蓝色框表示使用Microf的缩减库,因为程序空间有限,否则会出错。红色圈内勾上,具体什么用处,不晓得,哈哈。以上就是对升级程序的修改。二、用户程序用户程序只要修改一个地方,就是中断向量表,呵呵,因为我们用户程序的地址变了,二中断

7、向量表是紧随用户程序初始地址的,所以也需要修改,当然如果你程序未用到中断,就可以不用改(强烈建议你还是该,否则会出现你预料不到的问题)。打开你的用户程序,使用搜索插到系统中所有的涉及到NVIC_SetVectorTable()函数的语句,将里NVIC_SetVectorTable(NVIC_VectTab_FLASH,0x0)改为NVIC_SetVectorTable(NVIC_VectTab_FLASH,0x08003000),当然具体值要以你实际使用的为准。注意:如果你的电路中设计了用按键去控制电源开关,如果你在升级程序中配置过,在用户程序中请勿

8、重新配置,否则会出错,因为我工程中用到了长按键开关机功能,出现过这种错误。好了,用户程序就只要做这些修改。下

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。