STM32F103 WEB USB DFU 固件
Dependencies: mbed mbed-STM32F103C8T6 USBDevice_STM32F103
main.cpp@0:5fac9aab2679, 2021-05-31 (annotated)
- Committer:
- qitas
- Date:
- Mon May 31 10:53:57 2021 +0800
- Revision:
- 0:5fac9aab2679
INIT
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
qitas | 0:5fac9aab2679 | 1 | #include "stm32f103c8t6.h" |
qitas | 0:5fac9aab2679 | 2 | #include "mbed.h" |
qitas | 0:5fac9aab2679 | 3 | #include "WebUSBDFU.h" |
qitas | 0:5fac9aab2679 | 4 | |
qitas | 0:5fac9aab2679 | 5 | DigitalOut myled(LED1); |
qitas | 0:5fac9aab2679 | 6 | |
qitas | 0:5fac9aab2679 | 7 | bool detached = false; |
qitas | 0:5fac9aab2679 | 8 | void onDetachRequested() { |
qitas | 0:5fac9aab2679 | 9 | detached = true; |
qitas | 0:5fac9aab2679 | 10 | } |
qitas | 0:5fac9aab2679 | 11 | |
qitas | 0:5fac9aab2679 | 12 | void resetIntoBootloader() { |
qitas | 0:5fac9aab2679 | 13 | // Turn on write access to the backup registers |
qitas | 0:5fac9aab2679 | 14 | __PWR_CLK_ENABLE(); |
qitas | 0:5fac9aab2679 | 15 | HAL_PWR_EnableBkUpAccess(); |
qitas | 0:5fac9aab2679 | 16 | |
qitas | 0:5fac9aab2679 | 17 | // Write the magic value to force the bootloader to run |
qitas | 0:5fac9aab2679 | 18 | BKP->DR2 = 0x544F; |
qitas | 0:5fac9aab2679 | 19 | BKP->DR1 = 0x4F42; |
qitas | 0:5fac9aab2679 | 20 | |
qitas | 0:5fac9aab2679 | 21 | HAL_PWR_DisableBkUpAccess(); |
qitas | 0:5fac9aab2679 | 22 | |
qitas | 0:5fac9aab2679 | 23 | // Reset and let the bootloader run |
qitas | 0:5fac9aab2679 | 24 | NVIC_SystemReset(); |
qitas | 0:5fac9aab2679 | 25 | } |
qitas | 0:5fac9aab2679 | 26 | |
qitas | 0:5fac9aab2679 | 27 | int main() |
qitas | 0:5fac9aab2679 | 28 | { |
qitas | 0:5fac9aab2679 | 29 | confSysClock(); //Configure system clock (72MHz HSE clock, 48MHz USB clock) |
qitas | 0:5fac9aab2679 | 30 | |
qitas | 0:5fac9aab2679 | 31 | /* Note: 1209:0001 is a test VID/PID pair - it should be changed before using in |
qitas | 0:5fac9aab2679 | 32 | * a real application */ |
qitas | 0:5fac9aab2679 | 33 | WebUSBDFU usbDFU(0x1209, 0x0001, 0x0001, false); |
qitas | 0:5fac9aab2679 | 34 | usbDFU.attach(onDetachRequested); |
qitas | 0:5fac9aab2679 | 35 | |
qitas | 0:5fac9aab2679 | 36 | while(1) { |
qitas | 0:5fac9aab2679 | 37 | // Check the DFU status |
qitas | 0:5fac9aab2679 | 38 | if (!usbDFU.configured()) { |
qitas | 0:5fac9aab2679 | 39 | usbDFU.connect(false); |
qitas | 0:5fac9aab2679 | 40 | } |
qitas | 0:5fac9aab2679 | 41 | if (detached) { |
qitas | 0:5fac9aab2679 | 42 | for (int i=0; i < 3; i++) { |
qitas | 0:5fac9aab2679 | 43 | myled = 1; |
qitas | 0:5fac9aab2679 | 44 | wait_ms(100); |
qitas | 0:5fac9aab2679 | 45 | myled = 0; |
qitas | 0:5fac9aab2679 | 46 | wait_ms(100); |
qitas | 0:5fac9aab2679 | 47 | } |
qitas | 0:5fac9aab2679 | 48 | resetIntoBootloader(); |
qitas | 0:5fac9aab2679 | 49 | } |
qitas | 0:5fac9aab2679 | 50 | |
qitas | 0:5fac9aab2679 | 51 | // Do normal stuff |
qitas | 0:5fac9aab2679 | 52 | myled = !myled; |
qitas | 0:5fac9aab2679 | 53 | wait_ms(500); |
qitas | 0:5fac9aab2679 | 54 | } |
qitas | 0:5fac9aab2679 | 55 | } |
qitas | 0:5fac9aab2679 | 56 |