STM HAL库USB DFU(实战1)

本文介绍了如何在STM32上实现IAP(In Application Programming)功能,通过USB DFU Class和DfuSe工具进行固件升级。详细讲述了Bootloader的实现步骤,包括设置DFU类、Bootloader代码、用户固件的跳转和升级流程,以及APP的实现和中断处理。最后,阐述了固件转换和升级的完整过程。
摘要由CSDN通过智能技术生成

前言:

    本文主要解决的问题是实现IAP功能,包括升级应用程序(APP)和升级数据包到外部Flash。方法是利用USB DFU Class以及ST提供的DfuSe demo软件工具实现,至于DFU class移植直接利用cube生成。

IAP介绍:

    IAP(In application program)主要为使用者提供了一种更加灵活的固件升级方式,可以根据应用需要定义何时、何种情况发生时进行固件升级。在介绍步骤前,需要对IAP原理有一定认识。结合下图(仅供参考,IAP实际应用方式更加灵活),IAP的应用中,用户程序与IAP驱动程序位于不同的存储区域。在应用过程中,利用IAP驱动程序将用户固件加载到固定位置,完成升级。更多关于IAP应用介绍请参考AN3965。
    其中,IAP驱动程序首先烧录固化,并不会随着用户程序的升级而改变。用户固件升级完毕后,在IAP驱动程序引导下,跳转到用户固件对应Flash位置,执行用户程序。

软件流程:

    设计一个用户程序,程序正常运行;当用户按键被按下,产生EXTI 中断,在中断中选择后备数据寄存器RTC_BKP0R,写入值0x32F2,然后产生软件复位;软件复位后,进入Bootloader(IAP代码),在主函数对RTC_BKP0R 进行判断,如果其值不是0x32F2 则直接去运行用户代码,如果其值为0x32F2 则是需要跳转初始化DFU类,然后一直循环闪烁LED,并在这之前将RTC_BKP0R 清零。

Bootloader实现步骤:

    安装DFU demo工具DfuSe v3.0.5,主要提供了驱动、Dfu file manager 和 DfuSeDemo。关于DfuSe的详细内容(安装步骤、使用介绍)请参考UM0412。

利用STMCUBE工具生成工程:

    在工程里面选择USB设备,然后选择DFU类。

                

    参数设置如下图:

    简单介绍一下上面两个主要参数:

    USBD_DFU_APP_DEFAULT_ADD表示APP程序的起始地址为0x08008000,本工程(也称IAP代码或者Bootloader,下面用Bootloader表示本工程)的起始地址为0x0800 0000,长度为0x8000,要在该界面进行设置。Bootloader一般用来实现固件的升级,不用来实现其他功能,所以大小0x8000(32KB)已经足够。

    第二个参数对应于于usbd_dfu_flash.c 里边定义的描述符FLASH_DESC_STR&#

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值