Uploading code to an STM32 ARM µC is a bit of a chicken-and-egg problem. The traditional setup uses JTAG (or more likely: 2-wire SWD), but this requires a JTAG programmer such as an ST-Link or a Black Magic Probe.
As you will know by now, all STM32 µC’s also include a serial boot loader in ROM, which requires toggling the RESET and BOOT0 pins in just the right sequence. You can do this manually, but that can become very tedious after a few times.
SerPlus was created for just this reason: a custom-programmed F103 board, which talks to the host over USB, and to a target board over serial, with DTR tied to RESET and RTS to BOOT0:
But that requires a SerPlus, onto which you also need to flash the proper firmware. Catch 22!
There’s another option, if you have a USB-serial interface, such as a modified BUB, which connects DTR and RTS to pins 1 and 5 on the FTDI connector, respectively (for orientation: pin 6 is ground). In that case, we can use a standard OSS utility called ser2net to perform the Telnet <=> RTS/DTR translation for us (as well as selecting even parity during uploads):
This is in fact a pretty convenient setup to use from any O/S: use Folie on your development machine, whatever it is, right next to your source files, and connect to Linux over the network:
folie -p 192.168.1.123:2000
This sets up a network connection (assuming here that the Linux box has IP address 192.168.1.123), and connects to port 2000.
Before we can use this, we’ll need to do a bit of one-time setup on the Linux box:
install ser2net with:
sudo apt-get install ser2net
edit the ser2net configuration file (
/etc/ser2net.conf
), commenting out all the existing settings by inserting a “#
” in front, and adding one line with the following text in it:2000:telnet:600:/dev/ttyUSB0:115200 8DATABITS NONE 1STOPBIT
(replace “ttyUSB0” by whatever you need for your USB interface board)
after saving, reload the configuration:
sudo /etc/init.d/ser2net reload
That’s it, the Folie command shown above will now connect over the network:
$ folie -p 192.168.1.123:2000
[connected to 192.168.1.123:2000]
Mecrisp-Stellaris RA 2.3.3 with M0 core for STM32L053C8 by Matthias Koch
64 KB <jnz> 3238022C ram/flash: 4920 14192 free ok
You now have the equivalent of a networked SerPlus - which in turn would be an excellent opportunity to get and re-flash a Blue Pill and turn it into a spare real SerPlus for local use!