Help flashing firmware? [partially solved]

I made a custom PCB for a robots and didn’t realize the STM32F103 chip does NOT come with a bootloader. As such I cannot program it from any of my existing tools. I’m very comfortable with the Arduino app / MSVC route.

Some people have said use a STM32 Bootloader. That would be fine if I were uploading simple code only a few times. The iteration process is much too long, moving pins and making mistakes. I’m looking for someone who knows how to get a bootloader on here so that I can then program it like any arduino device. Failing that, recommend design changes so the next version will be that easy.

please reply If you know anyone who can help. Thank you!

DaisyStepperDriver-1.0-Schematic.pdf (109.0 KB)

Seems like you can do it over the serial port with a serial adapter. Upload STM32F103C8T6 USB Bootloader | Program STM32 via USB Port

On the right side of the page, select “UART” as the communication mode and select the appropriate COM Port. In my case it is COM4.

I get nothing. I think I’m going to have to bring this in on a Tuesday night and see if someone smarter than I can make it go while I write down all the steps.

To follow up… I got the ST-LINK to work after replacing all the jumper wires and the USB cable. But the COM port not appearing is another story.

Apparently the Fiverr guy who laid out the traces did a bad job. TIL about Differential Pairs, traces that have to be exactly the same length and width and kept very short. For example, the lines D+/D- from the USB to the MCU. The traces in this board? Not done right. Several other features were spotted as problems by someone who took the time to educate me :slight_smile:

with top layer so you can see USB in top left and MCU bottom right.

D+/D- lines. Should be running in parallel, same length, etc. Not even close!

…and that’s the tip of the iceberg.

I’ve had a look at that schematic, here are my notes:

  1. USB D+ VDD Pullup should not be present (R14) - STM32 has them internally (and programmable). An external pull will just confuse things.
  2. Load capacitance for Y1 seems a bit high. I would have expected a ballpark of 10pF.
  3. Decoupling:
    3.1 Decoupling not placed close to target pins
    3.2 No decoupling for U5.
    3.3 No input decoupling on U4. 1u min should be present. (this one is important)
  4. Plane choice is not optimal for EMC. I suggest:
    Top: Signal (preferred all signals on top)
    In1: GND plane
    In2: Power plane(s)
    Bot: Signal
  5. Power GND is not separate from logic GND. These should be a separate net with a net tie.
  6. Where LED? LED’s always useful. I’d reccommend:
  • MCU status LED
  • (You can always DNF them later)
  1. U4 is a bit excessive. Logic only needs ~50mA.
  2. The TMC230 layout is pretty bit odd.
  • The BRA and BRB to their sense resistors should be load carrying paths.
  • The sense resistors should be bigger. (At 2A, 0R1, thats 400mW!) This will fail.
  • I’m not sure the diode paths are correct. I assume these are for TVS diodes. (For some reason I cannot see the part number). I would expect that the TVS diodes return to GND, not through the shunt. These diodes should not be active under normal conditions.

For anyone interested, here’s the KiCAD package so you can see the mess for yourself. If you’re the kind of OCD that fixes these issues because Reasons then please let me know and I will gladly trade you for beers. (484.2 KB)

I do not know if this suggestion applies to your specific situation but if the USB serial port is for a USB to TTL/UART level converter then you can use a computer that has a real RS-232 serial port with a DE9 connector and use an RS-232 serial to TTL/UART level converter instead of a USB to TTL/UART level converter so you will always have the necessary serial port with a constant device name instead of a USB serial port with a device name that changes or is too high for some software to use. Apparently ThinkPad models that no longer have an integrated DE9 connector still have a real serial port that is usable with a DE9 connector on a docking station or port replicator.