Blinky, your "Hello World!", on Olimex
--------------------------------------

This tutorial shows you how to create, build, and run the Blinky
application on an Olimex STM32-E407 board.

.. contents::
  :local:
  :depth: 2

Prerequisites
~~~~~~~~~~~~~

-  Meet the prerequisites listed in :doc:`Project Blinky <blinky>`.
-  Have a STM32-E407 development board from Olimex.
-  Have a ARM-USB-TINY-H connector with JTAG interface for debugging ARM
   microcontrollers (comes with the ribbon cable to hook up to the
   board)
-  Have a USB A-B type cable to connect the debugger to your computer.
-  Install the :doc:`OpenOCD debugger <../../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 created a project.

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: [...])
        apache-mynewt-core successfully upgraded to version 1.7.0
        $

Create the Targets
~~~~~~~~~~~~~~~~~~

Create two targets for the Olimex 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 ``boot_olimex``.

.. code-block:: console

    $ newt target create boot_olimex
    $ newt target set boot_olimex build_profile=optimized
    $ newt target set boot_olimex app=@mcuboot/boot/mynewt
    $ newt target set boot_olimex bsp=@apache-mynewt-core/hw/bsp/olimex_stm32-e407_devboard

Run the following ``newt target`` commands to create a target for the
Blinky application. We name the target ``olimex_blinky``.

.. code-block:: console

    $ newt target create olimex_blinky
    $ newt target set olimex_blinky build_profile=debug
    $ newt target set olimex_blinky bsp=@apache-mynewt-core/hw/bsp/olimex_stm32-e407_devboard
    $ newt target set olimex_blinky app=apps/blinky

Build the Bootloader
~~~~~~~~~~~~~~~~~~~~

Run the ``newt build boot_olimex`` command to build the bootloader:

.. code-block:: console

    $ newt build boot_olimex
    Building target targets/boot_olimex
    Compiling repos/mcuboot/boot/bootutil/src/image_ec256.c
    Compiling repos/mcuboot/boot/bootutil/src/image_ec.c
    Compiling repos/mcuboot/boot/bootutil/src/image_rsa.c
    Compiling bin/targets/boot_olimex/generated/src/boot_olimex-sysflash.c

         ...

    Archiving libc_baselibc.a
    Archiving sys_flash_map.a
    Archiving sys_mfg.a
    Archiving sys_sysinit.a
    Archiving util_mem.a
    Linking ~/dev/myproj/bin/targets/boot_olimex/app/boot/mynewt/mynewt.elf
    Target successfully built: targets/boot_olimex

Build the Blinky Application
~~~~~~~~~~~~~~~~~~~~~~~~~~~~

Run the ``newt build olimex_blinky`` command to build the blinky application:

.. code-block:: console

    $ newt build olimex_blinky
    Building target targets/olimex_blinky
    Assembling repos/apache-mynewt-core/hw/bsp/olimex_stm32-e407_devboard/src/arch/cortex_m4/startup_STM32F40x.s
    Compiling repos/apache-mynewt-core/hw/drivers/uart/src/uart.c
    Compiling repos/apache-mynewt-core/hw/cmsis-core/src/cmsis_nvic.c
    Compiling repos/apache-mynewt-core/hw/bsp/olimex_stm32-e407_devboard/src/sbrk.c
    Compiling apps/blinky/src/main.c
    Compiling repos/apache-mynewt-core/hw/drivers/uart/uart_hal/src/uart_hal.c
    Compiling repos/apache-mynewt-core/hw/bsp/olimex_stm32-e407_devboard/src/hal_bsp.c
    Compiling repos/apache-mynewt-core/hw/bsp/olimex_stm32-e407_devboard/src/system_stm32f4xx.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_mfg.a
    Archiving sys_sysinit.a
    Archiving util_mem.a
    Linking ~/dev/myproj/bin/targets/olimex_blinky/app/apps/blinky/blinky.elf
    Target successfully built: targets/olimex_blinky

Sign and Create the Blinky Application Image
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

Run the ``newt create-image olimex_blinky 1.0.0`` command to sign and
create an image file for the blinky application. You may assign an
arbitrary version (e.g. 1.0.0) number.

.. code-block:: console

    $ newt create-image olimex_blinky 1.0.0
    App image succesfully generated: ~/dev/myproj/bin/targets/olimex_blinky/app/apps/blinky/blinky.img

Connect to the Board
~~~~~~~~~~~~~~~~~~~~

Configure the board to bootload from flash memory and to use USB-OTG2
for the power source. Refer to the following diagrams to locate the boot
jumpers and power input select jumpers on the board.

**Note:** The labels for the **USB-OTG1** and **USB-OTG2** ports on the
diagram are reversed. The port labeled USB-OTG1 on the diagram is the
USB-OTG2 port and the port labeled USB-OTG2 on the diagram is the
USB-OTG1 port.

.. figure:: ../pics/STM32-E407_top_small.jpg

.. figure:: ../pics/STM32-E407_bot_small.jpg

-  Locate the boot jumpers on the lower right corner of the board.
   **B1_1/B1_0** and **B0_1/B0_0** are PTH jumpers to control the
   boot mode when a bootloader is present. These two jumpers must be
   moved together. The board searches for the bootloader in three
   places: User Flash Memory, System Memory or the Embedded SRAM. For
   this Blinky project, we configure the board to boot from flash by
   jumpering **B0_0** and **B1_0**. **Note:** The markings on the
   board may not always be accurate, and you should always refer to the
   manual for the correct positioning.

-  Locate the **Power Input Select** jumpers on the lower left corner of
   the board. Set the Power Select jumpers to position 5 and 6 to use
   the USB-OTG2 port for the power source. If you would like to use a
   different power source, refer to the `OLIMEX STM32-E407 user
   manual <https://www.olimex.com/Products/ARM/ST/STM32-E407/resources/STM32-E407.pdf>`__
   for pin specifications.

-  Connect the USB Micro-A cable to the USB-OTG2 port on the board.

-  Connect the JTAG connector to the JTAG/SWD interface on the board.

-  Connect the USB A-B cable to the ARM-USB-TINY-H connector and your
   computer.

-  Check that the red PWR LED lights up.

Load the Bootloader and Blinky Application
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

Run the ``newt load boot_olimex`` command to load the bootloader image
onto the board:

.. code-block:: console

    $ newt load -v boot_olimex
    Loading bootloader
    Load command: ~/dev/myproj/repos/apache-mynewt-core/hw/bsp/olimex_stm32-e407_devboard/olimex_stm32-e407_devboard_download.sh ~/dev/myproj/repos/apache-mynewt-core/hw/bsp/olimex_stm32-e407_devboard ~/dev/myproj/bin/targets/boot_olimex/app/boot/mynewt/mynewt
    Successfully loaded image.

Note: If you are using Windows and get a ``no device found`` error, you
will need to install the usb driver. Download
`Zadig <http://zadig.akeo.ie>`__ and run it:

-  Select Options > List All Devices.
-  Select ``Olimex OpenOCD JTAG ARM-USB-TINY-H`` from the drop down
   menu.
-  Select the ``WinUSB`` driver.
-  Click Install Driver.
-  Run the ``newt load boot_olimex`` command again.

Run the ``newt load olimex_blinky`` command to load the blinky
application image onto the board:

.. code-block:: console

    $ newt load -v olimex_blinky
    Loading app image into slot 1
    Load command: ~/dev/myproj/repos/apache-mynewt-core/hw/bsp/olimex_stm32-e407_devboard/olimex_stm32-e407_devboard_download.sh ~/dev/myproj/repos/apache-mynewt-core/hw/bsp/olimex_stm32-e407_devboard ~/dev/myproj/bin/targets/olimex_blinky/app/apps/blinky/blinky
    Successfully loaded image.

The LED should be blinking!

Let's double check that it is indeed booting from flash and making the
LED blink from the image in flash. Pull the USB cable off the Olimex
JTAG adaptor, severing the debug connection to the JTAG port. Next power
off the Olimex board by pulling out the USB cable from the board. Wait
for a couple of seconds and plug the USB cable back to the board.

The LED light will start blinking again. Success!

If you want to download the image to flash and open a gdb session, use
``newt debug blinky``.

**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
terminal.

Type ``c`` to continue inside the gdb session.

.. code-block:: console

        $ newt debug blinky
        Debugging with ~/dev/myproj/hw/bsp/olimex_stm32-e407_...
        Debugging ~/dev/myproj/project/blinky/bin/blinky/blinky.elf
        GNU gdb (GNU Tools for ARM Embedded Processors) 7.8.0.20150604-cvs
        Copyright (C) 2014 Free Software Foundation, Inc.
        License GPLv3+: GNU GPL version 3 <http://gnu.org/licenses/gpl.html>
        ...
        (info)
        ...
        target state: halted
        target halted due to debug-request, current mode: Thread
        xPSR: 0x01000000 pc: 0x08000250 msp: 0x10010000
        Info : accepting 'gdb' connection from 3333
        Info : device id = 0x10036413
        Info : flash size = 1024kbytes
        Reset_Handler () at startup_STM32F40x.s:199
        199     ldr    r1, =__etext
        (gdb)

If you want to erase the flash and load the image again you may use the
following commands from within gdb. ``flash erase_sector 0 0 x`` tells
it to erase sectors 0 through x. When you ask it to display (in hex
notation) the contents of the sector starting at location 'lma,' you
should see all f's. The memory location 0x8000000 is the start or origin
of the flash memory contents and is specified in the
olimex_stm32-e407_devboard.ld linker script. The flash memory
locations is specific to the processor.

.. code-block:: console

        (gdb) monitor flash erase_sector 0 0 4
        erased sectors 0 through 4 on flash bank 0 in 2.296712s
        (gdb) monitor mdw 0x08000000 16
        0x08000000: ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff
        (0x08000020: ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff
        (0x08000000: ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff
        (0x08000020: ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff
        (gdb) monitor flash info 0
