blob: 2b95c371cfc366f83286f4b31e8934c411377002 [file] [log] [blame]
Blinky, your "Hello World!", on STM32F4-Discovery
This tutorial shows you how to create, build, and run the Blinky
application on the STM32F4-Discovery board.
- Meet the prerequisites listed in :doc:`Project Blinky <blinky>`.
- Have a STM32F4-Discovery board.
- Have a USB type A to Mini-B cable.
- Install a patched version of OpenOCD 0.10.0 described in :doc:`Install OpenOCD <../../get_started/native_install/cross_tools>`.
Create a Project
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.
Run the following commands to create a new project:
.. code-block:: console
$ mkdir ~/dev
$ cd ~/dev
$ newt new myproj
Downloading project skeleton from apache/mynewt-blinky...
Installing skeleton in myproj...
Project myproj successfully created.
$ cd myproj
$ newt upgrade
Downloading repository mynewt-core (commit: master) ...
apache-mynewt-core successfully upgraded to version 1.7.0
Create the Targets
Create two targets for the STM32F4-Discovery board - one for the
bootloader and one for the Blinky application.
Run the following ``newt target`` commands, from your project directory,
to create a bootloader target. We name the target ``stm32f4disc_boot``:
.. code-block:: console
$ newt target create stm32f4disc_boot
$ newt target set stm32f4disc_boot app=@mcuboot/boot/mynewt
$ newt target set stm32f4disc_boot bsp=@apache-mynewt-core/hw/bsp/stm32f4discovery
$ newt target set stm32f4disc_boot build_profile=optimized
Run the following ``newt target`` commands to create a target for the
Blinky application. We name the target ``stm32f4disc_blinky``:
.. code-block:: console
$ newt target create stm32f4disc_blinky
$ newt target set stm32f4disc_blinky app=apps/blinky
$ newt target set stm32f4disc_blinky bsp=@apache-mynewt-core/hw/bsp/stm32f4discovery
$ newt target set stm32f4disc_blinky build_profile=debug
You can run the ``newt target show`` command to verify the target
.. code-block:: console
$ newt target show
Build the Target Executables
Run the ``newt build stm32f4disc_boot`` command to build the bootloader:
.. code-block:: console
$ newt build stm32f4disc_boot
Building target targets/stm32f4disc_boot
Compiling repos/mcuboot/boot/bootutil/src/image_ec.c
Compiling repos/mcuboot/boot/bootutil/src/image_ec256.c
Compiling repos/mcuboot/boot/bootutil/src/bootutil_misc.c
Compiling repos/mcuboot/boot/mynewt/src/main.c
Compiling repos/mcuboot/boot/bootutil/src/image_rsa.c
Compiling repos/mcuboot/boot/bootutil/src/image_validate.c
Compiling repos/mcuboot/boot/bootutil/src/loader.c
Archiving sys_flash_map.a
Archiving sys_mfg.a
Archiving sys_sysinit.a
Archiving util_mem.a
Linking ~/dev/myproj/bin/targets/stm32f4disc_boot/app/boot/mynwet/mynewt.elf
Target successfully built: targets/stm32f4disc_boot
Run the ``newt build stm32f4disc_blinky`` command to build the Blinky
.. code-block:: console
$newt build stm32f4disc_blinky
Building target targets/stm32f4disc_blinky
Compiling apps/blinky/src/main.c
Compiling repos/apache-mynewt-core/hw/bsp/stm32f4discovery/src/sbrk.c
Compiling repos/apache-mynewt-core/hw/bsp/stm32f4discovery/src/system_stm32f4xx.c
Compiling repos/apache-mynewt-core/hw/bsp/stm32f4discovery/src/hal_bsp.c
Assembling repos/apache-mynewt-core/hw/bsp/stm32f4discovery/src/arch/cortex_m4/startup_STM32F40x.s
Compiling repos/apache-mynewt-core/hw/cmsis-core/src/cmsis_nvic.c
Compiling repos/apache-mynewt-core/hw/drivers/uart/src/uart.c
Compiling repos/apache-mynewt-core/hw/drivers/uart/uart_hal/src/uart_hal.c
Compiling repos/apache-mynewt-core/hw/hal/src/hal_common.c
Compiling repos/apache-mynewt-core/hw/hal/src/hal_flash.c
Archiving sys_sysinit.a
Archiving util_mem.a
Linking ~/dev/myproj/bin/targets/stm32f4disc_blinky/app/apps/blinky/blinky.elf
Target successfully built: targets/stm32f4disc_blinky
Sign and Create the Blinky Application Image
Run the ``newt create-image stm32f4disc_blinky 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.
.. code-block:: console
$newt create-image stm32f4disc_blinky 1.0.0
App image succesfully generated: ~/dev/myproj/bin/targets/stm32f4disc_blinky/app/apps/blinky/blinky.img
Connect to the Board
Connect a USB type A to Mini-B cable from your computer to the port the
board indicated on the diagram:
.. figure:: ../pics/stm32f4_disc.jpg
You should see the small PWR red LED light up.
Load the Bootloader and the Blinky Application Image
Run the ``newt load stm32f4disc_boot`` command to load the bootloader
onto the board:
.. code-block:: console
$ newt load stm32f4disc_boot
Loading bootloader
Note: If you are using Windows and get an ``open failed`` or
``no device found`` error, you will need to install the usb driver.
Download `Zadig <>`__ and run it:
- Select Options > List All Devices.
- Select ``STM32 STLink`` from the drop down menu.
- Select the ``WinUSB`` driver.
- Click Install Driver.
- Run the ``newt load stm32f4disc_boot`` command again.
Note: If you are running Linux and get an ``open failed`` message, there
are two common issues with this board. If you have a board produced
before mid-2016, it is likely that you have an older version of the
ST-LINK programmer. To correct this, open the
file in a text editor, and change the line:
.. code-block:: console
source [find interface/stlink-v2-1.cfg]
.. code-block:: console
source [find interface/stlink-v2.cfg]
If you receive an error like
``libusb_open() failed with LIBUSB_ERROR_ACCESS``, it means that your
``udev`` rules are not correctly set up for this device. You can find
some example ``udev`` rules for ST-LINK programmers
`here <>`__.
Run the ``newt load stm32f4disc_blinky`` command to load the Blinky
application image onto the board.
.. code-block:: console
$ newt load stm32f4disc_blinky
Loading app image into slot 1
You should see the small green LD4 LED on the board blink!
Note: If the LED does not blink, try resetting your board.
If you want to erase the flash and load the image again, start a debug
session, and enter ``mon stm32f2x mass_erase 0`` at the gdb prompt:
**Note:** The output of the debug session below is for Mac OS and Linux
platforms. On Windows, openocd and gdb are started in separate Windows
Command Prompt terminals, and the terminals are automatically closed
when you quit gdb. In addition, the output of openocd is logged to the
openocd.log file in your project's base directory instead of the
.. code-block:: console
$ newt debug stm32f4disc_blinky
[~/dev/myproj/repos/apache-mynewt-core/hw/bsp/stm32f4discovery/ ~/dev/myproj/repos/apache-mynewt-core/hw/bsp/stm32f4discovery ~/dev/myproj/bin/targets/stm32f4disc_blinky/app/apps/blinky/blinky]
Open On-Chip Debugger 0.10.0
Licensed under GNU GPL v2
For bug reports, read
Info : The selected transport took over low-level target control. The results might differ compared to plain JTAG/SWD
adapter speed: 2000 kHz
adapter_nsrst_delay: 100
none separate
Info : Unable to match requested speed 2000 kHz, using 1800 kHz
Info : Unable to match requested speed 2000 kHz, using 1800 kHz
Info : clock speed 1800 kHz
Info : STLINK v2 JTAG v25 API v2 SWIM v14 VID 0x0483 PID 0x374B
Info : using stlink api v2
Info : Target voltage: 2.881129
Info : stm32f4x.cpu: hardware has 6 breakpoints, 4 watchpoints
target halted due to debug-request, current mode: Thread
Reading symbols from ~/dev/myproj/bin/targets/stm32f4disc_blinky/app/apps/blinky/blinky.elf...done.
target halted due to debug-request, current mode: Thread
xPSR: 0x41000000 pc: 0x08021e90 psp: 0x20002290
Info : accepting 'gdb' connection on tcp/3333
Info : device id = 0x10076413
Info : flash size = 1024kbytes
0x08021e90 in __WFI () at repos/apache-mynewt-core/hw/cmsis-core/src/ext/core_cmInstr.h:342
342 __ASM volatile ("wfi");
(gdb) mon stm32f2x mass_erase 0
stm32x mass erase complete
stm32x mass erase complete