来源于: 自制17键数字机械键盘(3)——STM32F103 DFU功能实现 - 知乎
STM32F103系列默认没有内置USB DFU功能,不能通过进入DFU模式,通过USB 对程序进行更新,虽然在调试阶段用比如jlink、STlink等仿真器进行程序的烧录更新,但是总是不太方便,毕竟不是人人都有仿真器,不是每个人都是开发者,抱着做产品的态度,还是要方便用户升级,所以有必要实现STM32F103的DFU功能,方便键盘的后续更新升级。这章我用STM32CubeMX实现DFU功能。
1. STM32CubeMX工程建立
首先打开STM32CubeMX,建立一个工程,选择MCU型号为STM32F103C8。
如下图对USB外设进行设置。
MiddleWare设置:
- Mode选为 Download Fireware Update Class(DFU)。
- USBD_DFU_APP_DEFAULT_ADD设置为0x08005800,这个地址即为升级时存入升级程序的起始地址,用FLASH中0x08000000~0x08005800 的0x5800/1024=22KB存储空间存储DFU程序。
- USB_DFU_MEDIA Interface设置为:@Internal Flash /0x08000000/22*001Ka,42*001Kg,其中22*001Ka表示flash的前22KB存储空间为只读(a)的,42*001Kg表示flash后42KB的存储空间可写(g),用于存储升级下载的程序。这个需要按照MCU的flash的Flash module organization修改的,stm32f103c8为中等容量系列mcu,flash为64KB,下图为中等容量MCU的flash存储分布,根据这个图可知stm32f103c8的64KB分为64页,每页1KB,所以可以按照这个按需设置@Internal Flash的值,注意与USBD_DFU_APP_DEFAULT_ADD