Raspberry PI STM32 USART Bootloader
Branch: master
Clone or download
Latest commit aa4304a Jul 10, 2018
Permalink
Type Name Latest commit message Commit time
Failed to load latest commit information.
examples convert to typescript Jul 4, 2018
.gitignore convert to typescript Jul 4, 2018
BufferBuilder.d.ts convert to typescript Jul 4, 2018
README.md update docs Jul 4, 2018
SerialPort.d.ts convert to typescript Jul 4, 2018
Stm32UartBootloader.ts type fixes Jul 5, 2018
index.ts convert to typescript Jul 4, 2018
package-lock.json convert to typescript Jul 4, 2018
package.json v0.0.3 Jul 10, 2018
tsconfig.json convert to typescript Jul 4, 2018

README.md

Raspberry PI STM32 UART Bootloader

This node module facilitates flashing an STM32 over the built in UART bootloader.

The STM32 has a built in bootloader which can be accessed by setting the following BOOT1 and BOOT0 pins. "Main Flash Memory" is where your program typically resides. "System Memory" is where STM32's built in bootloaders reside.

BOOT1 BOOT0 Boot Mode
x 0 Main Flash Memory
0 1 System Memory
1 1 Embedded SRAM

This module will toggle these pins (BOOT0 and BOOT1) along with the reset pin and UART to flash the STM32.

Raspberry Pi 3

On the Raspberry Pi 3 yo get better baud rate results you will probably want to remap the physical UART away from the bluetooth and back to the UART pins. To do this add the following line to your /boot/config.txt file.

dtoverlay=pi3-miniuart-bt

Usage

The following example has been tested to flash the STM32F103RBT6 on the STM32F103 Nucleo board. You'll need to make the following connections.

Pi STM32
8 UART RX PA10
10 UART TX PA9
11 RESET
13 BOOT0
BOOT1/PB2 -> GND

You will also need to disable the built in Nucleo reset by removing the jumper on SB12 or replacing it with a weak pull up resistor (10K should work).

var wpi = require('wiring-pi');
var STM32UARTBootloader = require('pi-stm32-uart-bootloader');
var fs = require('fs');
var path = require('path');

async function flash() {
    wpi.wiringPiSetupPhys();

    const bootloader = new STM32UARTBootloader({
        resetPin: 11,
        boot0Pin: 13,
        serialPortPath: '/dev/serial0'
    });
    await bootloader.init();

    const data = fs.readFileSync(path.join(__dirname, 'blink.bin'));
    await bootloader.flash(0x08000000, data);
    console.log('done');
}

flash();