Some time ago I installed Espruino on the STM32F4 Discovery board.
Here my notes:
sudo aptitude install cmake libusb-1.0-0-dev git clone https://github.com/texane/stlink.git cd stlink cmake . make # install into /usr/local/ sudo make install sudo ldconfig -v
How you should be able to see the STM32F4 Discovery board:
$ sudo st-info --probe Found 1 stlink programmers serial: 563f6b06493f51521236213f openocd: "\x56\x3f\x6b\x06\x49\x3f\x51\x52\x12\x36\x21\x3f" flash: 1048576 (pagesize: 16384) sram: 196608 chipid: 0x0413 descr: F4 device
and now flash:
$ sudo st-flash write espruino_1v91_stm32f4discovery.bin 0x08000000 st-flash 1.3.1-11-g78ced6a 2017-03-25T20:41:03 INFO src/common.c: Loading device parameters.... 2017-03-25T20:41:03 INFO src/common.c: Device connected is: F4 device, id 0x10016413 2017-03-25T20:41:03 INFO src/common.c: SRAM size: 0x30000 bytes (192 KiB), Flash: 0x100000 bytes (1024 KiB) in pages of 16 384 bytes 2017-03-25T20:41:03 INFO src/common.c: Attempting to write 298872 (0x48f78) bytes to stm32 address: 134217728 (0x8000000) Flash page at addr: 0x08040000 erasedEraseFlash - Sector:0x6 Size:0x20000 2017-03-25T20:41:09 INFO src/common.c: Finished erasing 7 pages of 131072 (0x20000) bytes 2017-03-25T20:41:09 INFO src/common.c: Starting Flash write for F2/F4/L4 2017-03-25T20:41:09 INFO src/flash_loader.c: Successfully loaded flash loader in sram enabling 32-bit flash writes size: 32768 size: 32768 size: 32768 size: 32768 size: 32768 size: 32768 size: 32768 size: 32768 size: 32768 size: 3960 2017-03-25T20:41:13 INFO src/common.c: Starting verification of write complete 2017-03-25T20:41:16 INFO src/common.c: Flash written and verified! jolly good!
How you should be able to see the STM32F4 Discovery board:
And here a small program which reads out the accelerometer LIS302DL and the most upper LED will be lit up. Be aware that on newer F4 Discovery boards this model has changed to LIS3DSH, which is not compatibel.
function onInit() { SPI1.setup({sck: A5, miso:A6, mosi:A7}); SPI1.send([0x20,0b01000111], E3); } var avrx=0.0, avry=0.0; function getAcc() { var accx = SPI1.send([0xA9,0], E3)[1]; var accy = SPI1.send([0xAB,0], E3)[1]; if (accx>127) accx-=256; if (accy>127) accy-=256; avrx = 0.1*accx + 0.9*avrx; avry = 0.1*accy + 0.9*avry; digitalWrite(LED1, avrx > 32); digitalWrite(LED4, avrx < -32); digitalWrite(LED2, avry > 32); digitalWrite(LED3, avry < -32); } onInit();setInterval(getAcc, 10);