This tutorial shows you how to create, build and run the Slinky application and communicate with newtmgr for an Olimex STM-E407 board.
###Prerequisites
Create a new project if you do not have an existing one. You can skip this step and proceed to create the targets if you already have a project created or completed the Sim Slinky tutorial.
$ newt new slinky Downloading project skeleton from apache/mynewt-blinky... ... Installing skeleton in slink... Project slink successfully created $ cd slinky $newt install apache-mynewt-core
### Create the Targets Create two targets for the STM32-E407 board - one for the bootloader and one for the Slinky application.
Run the following newt target
commands, from your project directory, to create a bootloader target. We name the target stm32_boot
.
$ newt target create stm32_boot $ newt target set stm32_bootr bsp=@apache-mynewt-core/hw/bsp/olimex_stm32-e407_devboard $ newt target set stm32_boot build_profile=optimized $ newt target set stm32_boot target.app=@apache-mynewt-core/apps/boot
$ newt target create stm32_slinky $ newt target set stm32_slinky bsp=@apache-mynewt-core/hw/bsp/olimex_stm32-e407_devboard $ newt target set stm32_slinky build_profile=debug $ newt target set stm32_slinky app=@apache-mynewt-core/apps/slinky
Run the newt build stm32_boot
command to build the bootloader:
$ newt build stm32_boot Building target targets/stm32_boot Compiling repos/apache-mynewt-core/boot/bootutil/src/image_ec256.c Compiling repos/apache-mynewt-core/boot/bootutil/src/image_rsa.c Compiling repos/apache-mynewt-core/boot/bootutil/src/loader.c Compiling repos/apache-mynewt-core/boot/bootutil/src/image_ec.c Compiling repos/apache-mynewt-core/boot/bootutil/src/image_validate.c Compiling repos/apache-mynewt-core/crypto/mbedtls/src/aes.c Compiling repos/apache-mynewt-core/boot/bootutil/src/bootutil_misc.c Compiling repos/apache-mynewt-core/apps/boot/src/boot.c ... Archiving sys_mfg.a Archiving sys_sysinit.a Archiving util_mem.a Linking ~/dev/slinky/bin/targets/stm32_boot/app/apps/boot/boot.elf Target successfully built: targets/stm32_boot $
$newt build stm32_slinky Building target targets/stm32_slinky Compiling repos/apache-mynewt-core/boot/bootutil/src/image_ec.c Compiling repos/apache-mynewt-core/boot/bootutil/src/image_rsa.c Compiling repos/apache-mynewt-core/boot/bootutil/src/image_ec256.c Compiling repos/apache-mynewt-core/boot/bootutil/src/loader.c Compiling repos/apache-mynewt-core/boot/bootutil/src/image_validate.c Compiling repos/apache-mynewt-core/boot/split/src/split.c Compiling repos/apache-mynewt-core/boot/bootutil/src/bootutil_misc.c Compiling repos/apache-mynewt-core/apps/slinky/src/main.c ... Archiving util_crc.a Archiving util_mem.a Linking ~/dev/slinky/bin/targets/stm32_slinky/app/apps/slinky/slinky.elf Target successfully built: targets/stm32_slinky $
Run the newt create-image stm32_slinky 1.0.0
command to create and sign the application image. You may assign an arbitrary version (e.g. 1.0.0) to the image.
create-image stm32_slinky 1.0.0 App image succesfully generated: ~/dev/slinky/bin/targets/stm32_slinky/app/apps/slinky/slinky.img $
###Connect to the Board
You should see a red LED light up on the board.
Run the newt load stm32_boot
command to load the bootloader onto the board:
$ newt load stm32_boot Loading bootloader $
Olimex OpenOCD JTAG ARM-USB-TINY-H
from the drop down menu.WinUSB
driver.newt load stm32_boot
command again.Locate the PC6/USART6_TX (pin 3), PC7/USART6_RX (pin 4), and GND (pin 2) of the UEXT connector on the Olimex board. More information on the UEXT connector can be found at https://www.olimex.com/Products/Modules/UEXT/. The schematic of the board can be found at https://www.olimex.com/Products/ARM/ST/STM32-E407/resources/STM32-E407_sch.pdf for reference.
Mac OS uses the format tty.usbserial-<some identifier>
.
Linux uses the format TTYUSB<N>
, where N
is a number. For example, TTYUSB2.
MinGW on Windows uses the format ttyS<N>
, where N
is a number. You must map the port name to a Windows COM port: /dev/ttyS<N>
maps to COM<N+1>
. For example, /dev/ttyS2
maps to COM3
.
You can also use the Windows Device Manager to find the COM port number.
Run the newtmgr conn add
command to define a newtmgr connection profile for the serial port. We name the connection profile stm32serial
.
Note:
connstring
with the specific port for your serial connection.COM<N+1>
for the connstring if /dev/ttyS<N>
is the serial port.$ newtmgr conn show Connection profiles: stm32serial: type=serial, connstring='/dev/tty.usbserial-1d13' sim1: type=serial, connstring='/dev/ttys012' $
Run the newtmgr echo hello -c stm32serial
command. This is the simplest command that requests the board to echo back the text.
$ newtmgr echo hello -c stm32serial hello $
$ newtmgr image list -c stm32serial Images: slot=0 version: 1.0.0 bootable: true flags: active confirmed hash: 9cf8af22b1b573909a8290a90c066d4e190407e97680b7a32243960ec2bf3a7f Split status: N/A $
$ newtmgr taskstat -c stm32serial Return Code = 0 task pri tid runtime csw stksz stkuse last_checkin next_checkin task1 8 2 0 90 192 110 0 0 task2 9 3 0 90 64 31 0 0 idle 255 0 89460 89463 64 26 0 0 main 127 1 4 26 1024 368 0 0 $