Showing results for 
Search instead for 
Did you mean: 

STM32F103C8 bootloader unable to launch after power up...

Associate III

Hi, Everyone,

I am having a strange problem with my board loaded STM32F103C8T6:

Case 1: With blank MCU, Bootloader via USART1 can only be activated ONCE after power up. (Boot0 pin was soldered to Vcc for testing.) It will never be able to enter BL again after disconnect until power cycled. Error message from programmer:


Case 2: If firmware is downloaded first (via SWD), BL will be able to launch with either power on or reset manually after power on. But some time still fail by manual reset. (about 50%) Here is the screen once it is lauched:


Any idea everyone??? I am in screwed.




Associate III

I am using USB to uart converter, connect PA9/10 for usart1. Just feeling something wrong of BL in this batch of MCU...


Hi, I had problems with Bluepill (STM32F103C8T6) due to a resistor in the data line of the USB port being the wrong value, I don't know if this is your case.


Tks for your reply! Mine USB-serial is working fine. I am using own designed board where UART1 of the MCU is direct to usb-serial converter. 

The thing confuse me why it is matter of preload code or not. Once the code being wiped or it is a blank chip, BL will never work!

Well the F1 is a very OLD design, it will boot into whatever memory you've selected via BOOT0 / BOOT1 pins, going to get nowhere if FLASH is selected and BLANK. MCU will just crash.

Most reasonable designs provide for a means of getting BOOTx pins into a state which the ROM based System Loader runs, if you need that. Or you use SWD/JTAG, or you implement your own loader, and you don't erase that, just application code deeper into FLASH.

The System Loader is a one-shot deal, it sees whatever noise is on the prescribed pins as being a connection attempt. So a modem or GPS/GNSS that squawks at startup will be seen as the boot source. If the connection fails, reset and try over.

AN2606 should indicate the pins and methods a specific device might expect.

For USB, have a crystal that starts properly / promptly, and use a button so the System Loader boots allowing for USB/DFU connectivity.

Tips, Buy me a coffee, or three.. PayPal Venmo
Up vote any posts that you find helpful, it shows what's working..

Thanks for the hints! However we used to have F103ZE chip in which the bootloader never fail to launch, no matter it is blank or not. We have used a lot F103RE chip as well, no BL issue at all. Only this time stuck on F103C8. Why why why? Crying... 

Here is msg from programmer when it was connected successfully. Can you tell if it helps:

10:54:34 : Port configuration: parity = even, baudrate = 115200, data-bit = 8, stop-bit = 1.0, flow-control = off
10:54:34 : Activating device: OK
10:54:34 : Board : --
10:54:34 : Chip ID: 0x410
10:54:34 : BootLoader protocol version: 2.2
10:54:37 : Bank : 0x00
10:54:37 : Address : 0x1ffff800
10:54:37 : Size : 16 Bytes
10:54:37 : UPLOADING ...
10:54:37 : Size : 1024 Bytes
10:54:37 : Address : 0x8000000

The STM32F103C8 is a significantly less capable part. Would double check ROM size, and capabilities in this context.

Sure the System Loader will boot from ROM with BOOT0=HIGH, BOOT1=LOW, pretty sure it doesn't start if booting from FLASH, and FLASH is blank. But's it's been around 12 years since I used an F1 commercially. The ROM loader is not the same as the one the Blue Pill / Arduino systems load.

Tips, Buy me a coffee, or three.. PayPal Venmo
Up vote any posts that you find helpful, it shows what's working..

Yes, BL should be able to launch from ROM no matter Flash contents are. But I notice that this F103C8 belongs to 'Medium density performance line' from datasheet. However in AN2606, it says both ID and Address for this line are N/A. Does it mean no BL at all?




ST Employee

Dear @ming2 ,

STM32F103 ( Medium , Low and High density) are first STM32 from the F1 series put in production and are still running on high volume even now. Initially we do not provide a signature in the system memory to identify the Bootloader version that was added starting from STM32F1 Value line and then on all series.  I confirm that the product contain the bootloader thru UART protocol ( version 2.2).   I Have two options proposal for such issue :

1) Try to reduce the Baudrate  for example 56K or less and see if the occurrence of connection increase or decrease .

2) if the same issue is happening when using Cubeprogrammer thru SWD or JTAG ? 

Hope it helps you. 


Thanks for your info!   1. I have tried different BR all the way down to 9600 without success. 2. SWD is always working fine. 

One strange thing: if I hold boot0 high then power cyc it, BL works. If power has been on, just do reset while holding boot0 high, BL doesn't launch at all.