USB-DFU example
Dependencies: mbed mbed-STM32F103C8T6 USBDevice_STM32F103
main.cpp@9:37b5f4bc101f, 2019-09-06 (annotated)
- Committer:
- adv_lut
- Date:
- Fri Sep 06 13:27:16 2019 +0000
- Revision:
- 9:37b5f4bc101f
- Parent:
- 6:2f7ee2af27f9
USB-DFU example
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
hudakz | 0:0279e8c1f111 | 1 | #include "stm32f103c8t6.h" |
hudakz | 0:0279e8c1f111 | 2 | #include "mbed.h" |
devanlai | 5:88b6ced3df89 | 3 | #include "USBDFU.h" |
devanlai | 5:88b6ced3df89 | 4 | |
devanlai | 5:88b6ced3df89 | 5 | /* |
devanlai | 5:88b6ced3df89 | 6 | * This is an example program demonstrating a USB DFU runtime combined with |
devanlai | 5:88b6ced3df89 | 7 | * a USB DFU bootloader that does not require an offset. |
devanlai | 5:88b6ced3df89 | 8 | * |
devanlai | 5:88b6ced3df89 | 9 | * It normally blinks an LED at 1Hz, but when it receives a DFU detach |
devanlai | 5:88b6ced3df89 | 10 | * request over USB (eg, by running "dfu-util -d 1234:0006 -e"), it |
devanlai | 5:88b6ced3df89 | 11 | * blinks 3 times rapidly and resets into the bootloader. |
devanlai | 5:88b6ced3df89 | 12 | * |
devanlai | 5:88b6ced3df89 | 13 | * New programs can be uploaded by running |
devanlai | 5:88b6ced3df89 | 14 | * dfu-util -d 1234:0006,1209:db42 -D your_firmware.bin |
devanlai | 5:88b6ced3df89 | 15 | * |
devanlai | 6:2f7ee2af27f9 | 16 | * The companion bootloader source can be found on GitHub: |
devanlai | 6:2f7ee2af27f9 | 17 | * https://github.com/devanlai/dapboot/tree/highboot |
devanlai | 6:2f7ee2af27f9 | 18 | * |
devanlai | 5:88b6ced3df89 | 19 | */ |
hudakz | 0:0279e8c1f111 | 20 | |
hudakz | 0:0279e8c1f111 | 21 | DigitalOut myled(LED1); |
hudakz | 0:0279e8c1f111 | 22 | |
devanlai | 5:88b6ced3df89 | 23 | bool detached = false; |
devanlai | 5:88b6ced3df89 | 24 | void onDetachRequested() { |
devanlai | 5:88b6ced3df89 | 25 | detached = true; |
devanlai | 5:88b6ced3df89 | 26 | } |
devanlai | 5:88b6ced3df89 | 27 | |
devanlai | 5:88b6ced3df89 | 28 | void resetIntoBootloader() { |
devanlai | 5:88b6ced3df89 | 29 | // Turn on write access to the backup registers |
devanlai | 5:88b6ced3df89 | 30 | __PWR_CLK_ENABLE(); |
devanlai | 5:88b6ced3df89 | 31 | HAL_PWR_EnableBkUpAccess(); |
devanlai | 5:88b6ced3df89 | 32 | |
devanlai | 5:88b6ced3df89 | 33 | // Write the magic value to force the bootloader to run |
devanlai | 5:88b6ced3df89 | 34 | BKP->DR2 = 0x544F; |
devanlai | 5:88b6ced3df89 | 35 | BKP->DR1 = 0x4F42; |
devanlai | 5:88b6ced3df89 | 36 | |
devanlai | 5:88b6ced3df89 | 37 | HAL_PWR_DisableBkUpAccess(); |
devanlai | 5:88b6ced3df89 | 38 | |
devanlai | 5:88b6ced3df89 | 39 | // Reset and let the bootloader run |
devanlai | 5:88b6ced3df89 | 40 | NVIC_SystemReset(); |
devanlai | 5:88b6ced3df89 | 41 | } |
devanlai | 5:88b6ced3df89 | 42 | |
hudakz | 0:0279e8c1f111 | 43 | int main() { |
hudakz | 3:dd01afd4f893 | 44 | confSysClock(); //Configure system clock (72MHz HSE clock, 48MHz USB clock) |
hudakz | 4:00ccc80cbeb8 | 45 | |
devanlai | 5:88b6ced3df89 | 46 | USBDFU usbDFU(0x1234, 0x0006, 0x0001, false); |
devanlai | 5:88b6ced3df89 | 47 | usbDFU.attach(onDetachRequested); |
hudakz | 0:0279e8c1f111 | 48 | |
hudakz | 0:0279e8c1f111 | 49 | while(1) { |
devanlai | 5:88b6ced3df89 | 50 | // Check the DFU status |
devanlai | 5:88b6ced3df89 | 51 | if (!usbDFU.configured()) { |
devanlai | 5:88b6ced3df89 | 52 | usbDFU.connect(false); |
devanlai | 5:88b6ced3df89 | 53 | } |
devanlai | 5:88b6ced3df89 | 54 | if (detached) { |
devanlai | 5:88b6ced3df89 | 55 | for (int i=0; i < 5; i++) { |
devanlai | 5:88b6ced3df89 | 56 | myled = 1; |
devanlai | 5:88b6ced3df89 | 57 | wait_ms(100); |
devanlai | 5:88b6ced3df89 | 58 | myled = 0; |
devanlai | 5:88b6ced3df89 | 59 | wait_ms(100); |
devanlai | 5:88b6ced3df89 | 60 | } |
devanlai | 5:88b6ced3df89 | 61 | resetIntoBootloader(); |
devanlai | 5:88b6ced3df89 | 62 | } |
devanlai | 5:88b6ced3df89 | 63 | |
devanlai | 5:88b6ced3df89 | 64 | // Do normal stuff |
hudakz | 0:0279e8c1f111 | 65 | myled = !myled; |
hudakz | 0:0279e8c1f111 | 66 | wait_ms(1000); |
hudakz | 0:0279e8c1f111 | 67 | } |
hudakz | 0:0279e8c1f111 | 68 | } |
hudakz | 0:0279e8c1f111 | 69 |