|
| 1 | +--- |
| 2 | +title: STM32 Flashing |
| 3 | +description: Guide on how to flash STM32 boards |
| 4 | +--- |
| 5 | + |
| 6 | +## Flashing the Board Using OpenOCD |
| 7 | + |
| 8 | +The ST Nucleo32, 64 and 144 boards include an on-board ST-LINK programmer |
| 9 | +and can be flashed using OpenOCD (use version 0.11.0 at least). |
| 10 | +OpenOCD is the standard programmer for all Nucleo boards, so no explicit |
| 11 | +`PROGRAMMER` environment variable has to be set. |
| 12 | + |
| 13 | +To flash this board, just use the following command (replace the `xxxxx` |
| 14 | +with your Nucleo variant): |
| 15 | + |
| 16 | +```shell |
| 17 | +make BOARD=nucleo-xxxxx flash -C examples/basic/hello-world |
| 18 | +``` |
| 19 | + |
| 20 | +If your board does not have OpenOCD set as the default programmer, you can |
| 21 | +select it by explicitly setting the `PROGRAMMER` variable: |
| 22 | + |
| 23 | +```shell |
| 24 | +make BOARD=xxxxx PROGARMMER=openocd flash |
| 25 | +``` |
| 26 | + |
| 27 | +## Flashing the Board Using the ST-LINK Mass Storage Device |
| 28 | + |
| 29 | +The on-board ST-Link programmer found on all Nucleo32, 64 and 144 boards |
| 30 | +will show up as a mass storage device when plugged in via USB. |
| 31 | +Copying a HEX file to the mass storage device will trigger the flashing |
| 32 | +sequence of the ST-Link. This can either be done manually or with the |
| 33 | +`cpy2remed` (copy to removable media) PROGRAMMER script. To use this programmer, |
| 34 | +you can use the following command: |
| 35 | + |
| 36 | +```shell |
| 37 | +make BOARD=nucleo-xxxx PROGRAMMER=cpy2remed flash |
| 38 | +``` |
| 39 | + |
| 40 | +:::note |
| 41 | +If the flash operation fails for some reason, it is possible that |
| 42 | +the embedded ST-Link firmware is either too old or has bugs that have been |
| 43 | +fixed in the meantime. You can find updates for the ST-Link on |
| 44 | +[this STM webpage](https://www.st.com/en/development-tools/stsw-link007.html). |
| 45 | +::: |
| 46 | + |
| 47 | +## Flashing the Board using stm32flash |
| 48 | + |
| 49 | +It is possible to automatically boot the STM32 board into the in-ROM bootloader |
| 50 | +that `stm32flash` communicates with for flashing by connecting the RST pin to |
| 51 | +DTR and the BOOT pin (or BOOT0 for STM32 MCU families with BOOT0 and BOOT1 pins) |
| 52 | +to RTS of the TTL adapter. In addition, set `STM32FLASH_RESET` to `1` via |
| 53 | +environment or command line to actually issue a reset with BOOT (or BOOT0) |
| 54 | +pulled high prior flashing to enter the bootloader, and a second reset with BOOT |
| 55 | +(or BOOT0) pulled low to reboot into the application. `STM32FLASH_RESET` |
| 56 | +defaults to `0` as of know, as with `PROGRAMMER=stm32flash STM32FLASH_RESET=1` |
| 57 | +additional terminal flags are set, so that `make term` doesn't accidentally |
| 58 | +keep the reset signal pulled low or boots the board into the bootloader. |
| 59 | + |
| 60 | +```shell |
| 61 | +make BOARD=xxxx PROGRAMMER=stm32flash STM32FLASH_RESET=1 flash |
| 62 | +``` |
| 63 | + |
| 64 | +The TTL adapter this was tested with had inverted RTS and DTR signal. By setting |
| 65 | +`STM32FLASH_RESET_INVERT` to `1` RIOT will assume RTS and DTR signals to be |
| 66 | +inverted, by setting it to `0` non-inverted signals will be generated. As of |
| 67 | +now, `STM32FLASH_RESET_INVERT` is by default `1`. This may change if it |
| 68 | +becomes evident that non-inverted TTL adapters are in fact more common than |
| 69 | +inverted adapters. |
0 commit comments