Some of stm32 boards have build-in USB DFU protocol support. For those you can use tools like DFuSe demo from ST or open-source dfu-util to directly upload firmware image through USB. Its obvious and i’m not going to describe it here. (You can find full list of DFU-enabled MCUs in app note AN3156).
For those MCUs without DFU support (like STM32F103C8T6 used in BluePill) you need separate hardware programmer, for example ST-Link V2 Mini
You need to connect it to dev mini board and wiring is simple:
ST-Link STM32F103C8T6 3.3V --- 3.3V GND --- GND SWDIO --- DIO SWCLK --- DCLK
Then you have to download from st.com and install ST-Link Utility. When you connect programmer first time, it is recommended to upgrade firmware of programmer itself. Open ST-Link Utility program and choose in menu ST-Link -> Firmware update, then click Device Connect and if newer firmware is available, you will see something like this:
Click Yes and newer firmware will be installed.
Then you have to open file with firmware and choose Target -> Connect. If your wiring between programmer and board is correct, you can see info about your MCU:
The next step is necessary and it’s full chip erase. Choose Target -> Erase Chip.
Then you have to choose Target -> Program and thats all!
If my firmware for Pedal & Buttons controller already flashed to the board and needs to updated or reflashed than programmer will can’t connect to the board. Its because I disabled SWD and used its pins as normal GPIO. We have here 2 choices:
- Switch both yellow jumpers, so your board will load directly to internal bootloader
- Make a «Connect under Reset». So in this case you have to do:
- choose Target -> Settings in ST-Link utility
- choose Hardware Reset in Reset Mode
- push and hold Reset button on the board
- click OK in ST-Link utility
- release Reset button
ST-Link utility should now connect to stm board and you can flash a newer firmware. (don’t forget to make full chip erase!)
PS. If you have another development board, for example STM32F4Discovery, you can use its build-in programmer. In this case you need to remove both CN3 jumpers and use Disco’s SWD connector this way:
STM32F4Discovery STM32F103C8T6 3.3V --- 3.3V PIN2 --- DCLK PIN3 --- GND PIN4 --- DIO
Something like this: