聊聊STM32芯片的DFU编程及相关话题

分享到:

      相当部分的 STM32芯片都带USB模块,有时我们会考虑利用STM32芯片的USB模块进行程序代码的下载或升级。USB协议中有专门针对设备固件升级的类协议,即可以通过DFU类协议进行产品固件的加载或更新。


     关于STM32产品的DFU程序下载和升级,ST官方有相关的资料文档。可以去www.stmcu.com.cn 或者去www.st.com 搜索DFUse下载相关资料。


    有个用户手册UM0412详细介绍了如何利用ST官方软件工具DfuSe进行相关编程操作。顺便提醒下,下载DfuSe安装包解压运行DfuSe_Demo_Vxx_Setup.exe之后,还不算安装完成,还得安装针对DfuSe的WINDOWS环境下的驱动程序。如果你运行DfuSe_Demo_Vxx_Setup.exe时使用默认路径的话,该驱动程序的位置一般就在下图方框所指的路径,选择合适.INI文件。

聊聊STM32芯片的DFU编程及相关话题

    当你见到设备驱动程序成功安装的提示时,PC端的安装才算完成。至于DFU文件的准备操作这里就不再赘述,手册讲得很清晰。
聊聊STM32芯片的DFU编程及相关话题
    这里要额外提醒的是,利用DFU方式对STM32 程序代码加载或更新有两种模式,即ISP模式和IAP模式。


    所谓ISP模式就是指MCU芯片出厂时内部已集成了DFU相关自举驱动代码,利用它并借助USB接口即可将用户应用程序下载进芯片。不妨以STM32F4xx 为例来介绍,下图是STM32F4xx自举模式配置及内部系统存储器的描述。

聊聊STM32芯片的DFU编程及相关话题

    可以看出,STM32F4XX系列芯片的系统存储器内集成了相关DFU驱动,支持ISP模式下的DFU方式进行用户代码加载或升级。此时,BOOT配载在system memory模式,你只需准备好相关的用户程序代码,借助上面的DfuSe工具即可完成用户程序的下载。之后,将BOOT配置为用户模式,即main flash memory模式。


     当然,并不是所有带USB模块的STM32 芯片内都集成了相关DFU自举驱动,或者说即使集成了但你并不想使用它。那你就可以换个模式,即IAP模式。自行编写DFU相关自举驱动程序,然后通过调试设备下载到芯片里,之后通过该DFU驱动并借助DfuSe工具完成用户程序的更新或下载。此时boot配置是用户模式,即main flash memory模式。这点跟上面的ISP模式不一样的。


     对于各STM32系列IAP的参考代码,在ST官方网站都有,基本可以拿过来就用。需要修改的地方主要是触发源,比方按键,再就是要跳转的用户程序起始地址,以及编译时相关内存地址的调整。


     为了比较,我们顺便看看STM32F1系列系统 内部存储区自举程序的介绍:

    很明显,对于STM32F1系列,只有互联型子系列[STM32 F105/STM32F107]支持通过DFU方式实现ISP编程。而其它STM32F1芯片即使带USB模块,若想利用DFU方式编程就只能自行编写DFU自举驱动,通过IAP模式实现用户程序的下载或升级。


     几年前在这个地方,我就被折腾了一次。我首先是拿ST官方的评估板STM3210C EVAL用ISP方式测试DFU功能,没问题,一路畅通。后来某客户借了块STM32F1的评估板[当时我以为也是STM3210C EVAL],他使用ISP方式测试这个DFU功能,奇怪得很,怎么也不成功。我跟他回复确认说这个功能测试过肯定没问题。后来反复沟通,发现他拿的那块评估板是STM3210E EVAL,主芯片是STM32F103ZE,而我之前测试的评估板的主芯片是STM32F107VC,后者是F1系列中的互联型,前者则不是。只怪当时手册看得不细,加上这两种评估板长相也很雷同。


     其实,利用USB接口来加载程序跟利用UART接口加载程序的流程是类似的,只是接口、协议有差异而已。实现方式可以是ISP,也可以是IAP。具体实现方式要结合芯片内部集成的相关自举驱动和实际应用需求来考虑。


    最后提醒下,在对STM32F1/F2/F3/F4/F0几个系列的芯片作IAP应用时,F0系列跟其它系列不一样,它没有中断矢量定义寄存器SCB_VTOR,所以在相应的用户APP代码开始处要先做SYSCFG外设时钟的使能开启和中断矢量的拷贝操作。相关参考代码如下:


int main(void)
{
  uint32_t i = 0;
/* Relocate by softwarethe vector table to the internal SRAM at 0x20000000 ***/ 
  /* Copy the vector table from the Flash(mapped at the base of the application
  loadaddress APPLICATION_ADDRESS) to the base address of the SRAM at 0x20000000. */
  for(i = 0; i < 48; i++)
  {
    VectorTable[i] = *(__IOuint32_t*)(APPLICATION_ADDRESS + (i<<2));
  }
  /* Enable the SYSCFG peripheral clock*/
  RCC_APB2PeriphClockCmd(RCC_APB2Periph_SYSCFG, ENABLE);
  /* Remap SRAM at 0x00000000 */
SYSCFG_MemoryRemapConfig(SYSCFG_MemoryRemap_SRAM);


/****************下面书写你的应用代码  **********************/


    其它操作跟其它几个系列一样,该怎么操作怎么操作。


    也许有人会问,那高大上的STM32F7系列是怎样的呢? STM32F7系列在中断矢量配置和程序执行地址映射这些地方跟STM32F1/F2/F4等又有点差异,主要体现在更为灵活、方便。ST官方有份应用笔记《STM32F7与STM32F4复位序列比较》做了较详细的解说,有兴趣的话可以去www.stmcu.com.cn搜索下载阅读。

聊聊STM32芯片的DFU编程及相关话题

       拇指长按上方精灵鸟识别图中二维码可关注公众号

STM32单片机中文官网
意法半导体/ST/STM

 

继续阅读
意法半导体推出48引脚封装 扩大市面上唯一支持LoRa®的STM32WL系统芯片的选择范围

中国,2020年8月28日——意法半导体为其获奖产品STM32WLE5 *无线系统芯片(SoC)的产品组合新增一款QFN48封装,将该产品的诸多集成功能、能效性和多调制的灵活性赋能到多种工业无线应用上。

MCU厂商为何加速布局边缘AI?

智能家居、工业物联网、可穿戴设备以及智能监控等是当前人们关注的热点。提升边缘计算的AI处理能力,将大幅提高终端设备的智能化水平。在此情况下,边缘AI近年来进入发展的快车道。而MCU是边缘计算领域应用最为广泛的处理器,它与边缘AI的融合也成为了一个重要的发展趋势。

意法半导体发布STM32状态监测功能包,通过Cartesiam工具简化机器学习过程

中国,2020年7月29日——意法半导体发布一款免费的STM32软件功能包,让用户可以用微控制器探索套件快速创建、训练、部署工业状态监测智能边缘设备。

意法半导体为STM32Cube®生态系统增添新功能,提高软件开发效率

中国,2020年7月28日——意法半导体STM32Cube®软件开发生态系统发布软件更新,让用户更轻松地筛选软件示例,搜集和使用开发工具,自定义、使用和分享STM32Cube扩展软件包。

意法半导体通过两项并购,进一步增强STM32微控制器的无线连接功能

中国, 2020年7月20 日 – 横跨多重电子应用领域的全球领先的半导体供应商意法半导体,于日前宣布签署两项并购协议,收购超宽带技术专业设计公司BeSpoon的全部股本和Riot Micro公司的蜂窝物联网连接资产。在两项交易走完正常监管审批手续成交后,意法半导体将进一步提升其在无线连接技术方面的服务,特别是完善STM32微控制器和安全微控制器的产品规划。