提到STM32 USB的UDF,其实便是咱们常说的IAP(In ApplicaTIon Programming)在运用编程。IAP有许多办法,我之前就用过串口IAP,网络IAP。而这儿咱们运用的是USB IAP,便是经过USB更新代码。所以这儿有必要线了解IAP。
IAP是In ApplicaTIon Programming的首字母缩写,IAP是用户自己的程序在运转过程中对User Flash的部分区域进行烧写,意图是为了在产品发布后能够方便地经过预留的通讯口对产品中的固件程序进行更新晋级。
通常在用户需求完成IAP功用时,即用户程序运转中作本身的更新操作,需求在规划固件程序时编写两个项目代码,榜首个项目程序不履行正常的功用操作,而仅仅经过某种通讯管道(如USB、UART)接纳程序或数据,履行对第二部分代码的更新;第二个项目代码才是真实的功用代码。这两部分项目代码都一起烧录在User Flash中,当芯片上电后,首要是榜首个项目代码开端运转,它作如下操作:
1)查看是否需求对第二部分代码进行更新
2)假如不需求更新则转到4)
3)履行更新操作
4)跳转到第二部分代码履行
榜首部分代码有必要经过其它手法,如JTAG或ISP烧入;第二部分代码能够运用榜首部分代码IAP功用烧入,也能够和榜首部分代码一道烧入,今后需求程序更新是再经过榜首部分IAP代码更新。
关于STM32来说,由于它的中止向量表坐落程序存储器的最低地址区,为了使榜首部分代码能够正确地呼应中止,通常会组织榜首部分代码处于Flash的开端区域,而第二部分代码紧随其后。
在第二部分代码开端履行时,首要需求把CPU的中止向量表映像到自己的向量表,然后再履行其他的操作。
假如IAP程序被损坏,产品有必要返厂才干从头烧写程序,这是很费事而且十分消耗时刻和金钱的。针对这样的需求,STM32在对Flash区域实施读维护的一起,自动地对用户Flash区的开端4页设置为写维护,这样能够有效地确保IAP程序(榜首部分代码)区域不会被意外地损坏。
接下去讲讲STM32 USB DFU的工程。官方工程如下图:
主要是User这个组文件,咱们能够将它们分分类。明显,usb最初的文件为一类,即usb_desc.c、usb_prop.c、usb_pwr.c,hw_config.c也能够算跟它们一类的,跟之前文件比较少了usb_io.c和usb_endp.c,由于这儿没有用到端点0以外的端点,所以这两个文件没有必要。接下去是dfu_mal.c、flash_if.c、fsmc_nor.c、nor_if.c、spi_if这几个文件归于一类,都是跟存储器才相关的,咱们假如只用到某个存储器,增加相关的代码就能够了。剩余的文件,就算一类吧。