Bootloader Go command fails to start STM32F303RE application.
- September 3, 2021
- 2 replies
- 1828 views
We are in the process of upgrading one of our MCUs from the STM32F072RBT6 to the STM32F303RBT6 and we are experiencing problems with the F303. I am testing out all the firmware using a NUCLEO-F303RE (the 512kB version of the MCU). To further test this issue, I have also made a very simple application that simply blinks the NUCLEO LED once per second. If I pull the BOOT0 pin low, I can communicate with the bootloader over USART1. So I am able to flash the MCU binary with the bootloader and then pull BOOT0 high, reset the MCU, and then the LED blink program runs without any issue. What I am not able to do is issue the Go command to the bootloader and start the user application from the bootloader. With this, I see the LED flash very quickly once (not the duration it should) and then the MCU is back in the bootloader. I can then endlessly issue the Go command, without physically resetting the MCU (NRST), and see this very short single flash. If I change the firmware to not blink the LED, I see no quick flash. This indicates that the user application is actually starting, but it then just returns to the bootloader.
I've included the stm_bootloader.h header that I've written for bootloader USART communication. We've been using this for quite a while with the F072 and never had an issue. The commands I call from there in order are:
stm_boot.Init(ui_->dev_name->text().toStdString());
stm_boot.BootloaderVersionSupportedCommands();
stm_boot.FlashBinary(FIRMWARE_BIN_PATH);The FlashBinary funciton primarily just performs a global erase, writes the firmware binary, and then calls the Go command. The NUCLEO boards also allow flashing a HEX file from the onboard STLINK via mass storage. If I flash the MCU in this way, it still has the same issue with starting the user application from bootloader Go command. (Enabling/disabling RDP did not have an effect).
