blob: c28d8fea2a829e8e80ab3babff47fa00e5ac6919 [file] [log] [blame]
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Blinky, your “Hello World!”, on Olimex &mdash; Apache Mynewt latest documentation</title>
<link rel="shortcut icon" href="../../_static/mynewt-logo-only-newt32x32.png"/>
<link rel="stylesheet" href="../../_static/css/theme.css" type="text/css" />
<link rel="stylesheet" href="../../_static/css/sphinx_theme.css" type="text/css" />
<link rel="stylesheet" href="../../_static/css/bootstrap-3.0.3.min.css" type="text/css" />
<link rel="stylesheet" href="../../_static/css/v2.css" type="text/css" />
<link rel="stylesheet" href="../../_static/css/custom.css" type="text/css" />
<link rel="stylesheet" href="../../_static/css/restructuredtext.css" type="text/css" />
<link rel="stylesheet" href="../../_static/css/overrides.css" type="text/css" />
<link rel="index" title="Index"
href="../../genindex.html"/>
<link rel="search" title="Search" href="../../search.html"/>
<link rel="top" title="Apache Mynewt latest documentation" href="../../index.html"/>
<link rel="up" title="Project Blinky" href="blinky.html"/>
<link rel="next" title="Blinky, your “Hello World!”, on a nRF52 Development Kit" href="nRF52.html"/>
<link rel="prev" title="Blinky, your “Hello World!”, on Arduino Primo" href="blinky_primo.html"/>
<script src="../../_static/js/modernizr.min.js"></script>
<script>
(function(i, s, o, g, r, a, m) {
i["GoogleAnalyticsObject"] = r;
(i[r] =
i[r] ||
function() {
(i[r].q = i[r].q || []).push(arguments);
}),
(i[r].l = 1 * new Date());
(a = s.createElement(o)), (m = s.getElementsByTagName(o)[0]);
a.async = 1;
a.src = g;
m.parentNode.insertBefore(a, m);
})(window, document, "script", "//www.google-analytics.com/analytics.js", "ga");
ga("create", "UA-72162311-1", "auto");
ga("send", "pageview");
</script>
</head>
<body class="not-front page-documentation" role="document" >
<div id="wrapper">
<div class="container">
<div id="banner" class="row v2-main-banner">
<a class="logo-cell" href="/">
<img class="logo" src="../../_static/img/logo.png">
</a>
<div class="tagline-cell">
<h4 class="tagline">An OS to build, deploy and securely manage billions of devices</h4>
</div>
<div class="news-cell">
<div class="well">
<h4>Latest News:</h4> <a href="/download">Apache Mynewt 1.11.0, Apache NimBLE 1.6.0 </a> released September 7, 2023)
</div>
</div>
</div>
</div>
<header>
<nav id="navbar" class="navbar navbar-inverse" role="navigation">
<div class="container">
<!-- Collapsed navigation -->
<div class="navbar-header">
<!-- Expander button -->
<button type="button" class="navbar-toggle" data-toggle="collapse" data-target=".navbar-collapse">
<span class="sr-only">Toggle navigation</span>
<span class="icon-bar"></span>
<span class="icon-bar"></span>
<span class="icon-bar"></span>
</button>
</div>
<!-- Expanded navigation -->
<div class="navbar-collapse collapse">
<!-- Main navigation -->
<ul class="nav navbar-nav navbar-right">
<li>
<a href="/"><i class="fa fa-home" style="font-size: larger;"></i></a>
</li>
<li class="important">
<a href="/quick-start/">Quick Start</a>
</li>
<li>
<a href="/about/">About</a>
</li>
<li>
<a href="/talks/">Talks</a>
</li>
<li class="active">
<a href="/documentation/">Documentation</a>
</li>
<li>
<a href="/download/">Download</a>
</li>
<li>
<a href="/community/">Community</a>
</li>
<li>
<a href="/events/">Events</a>
</li>
</ul>
<!-- Search, Navigation and Repo links -->
<ul class="nav navbar-nav navbar-right">
</ul>
</div>
</div>
</nav>
</header>
<!-- STARTS MAIN CONTENT -->
<div id="main-content">
<div id="breadcrumb">
<div class="container">
<a href="/documentation/">Docs</a> /
<a href="../tutorials.html">Tutorials</a> /
<a href="blinky.html">Project Blinky</a> /
Blinky, your “Hello World!”, on Olimex
<div class="sourcelink">
<a href="https://github.com/apache/mynewt-documentation/edit/master/docs/tutorials/blinky/olimex.rst" class="icon icon-github"
rel="nofollow"> Edit on GitHub</a>
</div>
</div>
</div>
<!-- STARTS CONTAINER -->
<div class="container">
<!-- STARTS .content -->
<div id="content" class="row">
<!-- STARTS .container-sidebar -->
<div class="container-sidebar col-xs-12 col-sm-3">
<div id="docSidebar" class="sticky-container">
<div role="search" class="sphinx-search">
<form id="rtd-search-form" class="wy-form" action="../../search.html" method="get">
<input type="text" name="q" placeholder="Search documentation" class="search-documentation" />
<input type="hidden" name="check_keywords" value="yes" />
<input type="hidden" name="area" value="default" />
</form>
</div>
<!-- Note: only works when deployed -->
<select class="form-control" onchange="if (this.value) window.location.href=this.value">
<option value="/latest" selected>
Version: latest
</option>
<option value="/v1_11_0" >
Version: 1.11.0
</option>
<option value="/v1_10_0" selected="selected" >
Version: 1.10.0
</option>
<option value="/v1_9_0" >
Version: 1.9.0
</option>
<option value="/v1_8_0" >
Version: 1.8.0
</option>
<option value="/v1_7_0" >
Version: 1.7.0
</option>
<option value="/v1_6_0" >
Version: 1.6.0
</option>
<option value="/v1_5_0" >
Version: 1.5.0
</option>
<option value="/v1_4_0" >
Version: 1.4.0
</option>
<option value="/v1_3_0/os/introduction" >
Version: 1.3.0
</option>
<option value="/v1_2_0/os/introduction" >
Version: 1.2.0
</option>
<option value="/v1_1_0/os/introduction" >
Version: 1.1.0
</option>
<option value="/v1_0_0/os/introduction" >
Version: 1.0.0
</option>
<option value="/v0_9_0/os/introduction" >
Version: 0.9.0
</option>
</select>
<div class="region region-sidebar">
<div class="docs-menu">
<ul class="current">
<li class="toctree-l1"><a class="reference internal" href="../../index.html">Introduction</a></li>
<li class="toctree-l1"><a class="reference internal" href="../../get_started/index.html">Setup &amp; Get Started</a></li>
<li class="toctree-l1"><a class="reference internal" href="../../concepts.html">Concepts</a></li>
<li class="toctree-l1 current"><a class="reference internal" href="../tutorials.html">Tutorials</a><ul class="current">
<li class="toctree-l2 current"><a class="reference internal" href="blinky.html">Project Blinky</a><ul class="current">
<li class="toctree-l3"><a class="reference internal" href="arduino_zero.html">Blinky on Arduino Zero</a></li>
<li class="toctree-l3"><a class="reference internal" href="blinky_primo.html">Blinky on Arduino Primo</a></li>
<li class="toctree-l3 current"><a class="current reference internal" href="#">Blinky on Olimex</a></li>
<li class="toctree-l3"><a class="reference internal" href="nRF52.html">Blinky on nRF52 DK</a></li>
<li class="toctree-l3"><a class="reference internal" href="pinetime.html">Blinky on PineTime</a></li>
<li class="toctree-l3"><a class="reference internal" href="rbnano2.html">Blinky on RedBear Nano 2</a></li>
<li class="toctree-l3"><a class="reference internal" href="blinky_stm32f4disc.html">Blinky on STM32F4-Discovery</a></li>
<li class="toctree-l3"><a class="reference internal" href="blinky_console.html">Add Console and Shell to Blinky</a></li>
</ul>
</li>
<li class="toctree-l2"><a class="reference internal" href="../repo/add_repos.html">Working with repositories</a></li>
<li class="toctree-l2"><a class="reference internal" href="../slinky/project-slinky.html">Project Slinky for Remote Comms</a></li>
<li class="toctree-l2"><a class="reference internal" href="../ble/ble.html">Bluetooth Low Energy</a></li>
<li class="toctree-l2"><a class="reference internal" href="../lora/lorawanapp.html">LoRa</a></li>
<li class="toctree-l2"><a class="reference internal" href="../os_fundamentals/os_fundamentals.html">OS Fundamentals</a></li>
<li class="toctree-l2"><a class="reference internal" href="../devmgmt/devmgmt.html">Remote Device Management</a></li>
<li class="toctree-l2"><a class="reference internal" href="../sensors/sensors.html">Sensors</a></li>
<li class="toctree-l2"><a class="reference internal" href="../tooling/tooling.html">Tooling</a></li>
<li class="toctree-l2"><a class="reference internal" href="../other/other.html">Other</a></li>
</ul>
</li>
<li class="toctree-l1"><a class="reference internal" href="../../external_links.html">Third-party Resources</a></li>
<li class="toctree-l1"><a class="reference internal" href="../../os/os_user_guide.html">OS User Guide</a></li>
<li class="toctree-l1"><a class="reference internal" href="../../network/index.html">BLE User Guide</a></li>
<li class="toctree-l1"><a class="reference internal" href="../../newt/index.html">Newt Tool Guide</a></li>
<li class="toctree-l1"><a class="reference internal" href="../../newtmgr/index.html">Newt Manager Guide</a></li>
<li class="toctree-l1"><a class="reference internal" href="../../mynewt_faq/index.html">Mynewt FAQ</a></li>
<li class="toctree-l1"><a class="reference internal" href="../../misc/index.html">Appendix</a></li>
</ul>
</div>
</div>
</div>
<!-- ENDS STICKY CONTAINER -->
</div>
<!-- ENDS .container-sidebar -->
<div class="col-xs-12 col-sm-9">
<div class="alert alert-warning">
<p>
Version 1.10.0 is not the most recent version of the
Apache Mynewt documentation. Click <a href="/latest">here</a> to
read the latest version.
</p>
</div>
<div class="">
<div class="rst-content">
<div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article">
<div itemprop="articleBody">
<div class="section" id="blinky-your-hello-world-on-olimex">
<h1>Blinky, your “Hello World!”, on Olimex<a class="headerlink" href="#blinky-your-hello-world-on-olimex" title="Permalink to this headline"></a></h1>
<p>This tutorial shows you how to create, build, and run the Blinky
application on an Olimex STM32-E407 board.</p>
<div class="contents local topic" id="contents">
<ul class="simple">
<li><p><a class="reference internal" href="#prerequisites" id="id1">Prerequisites</a></p></li>
<li><p><a class="reference internal" href="#create-a-project" id="id2">Create a Project</a></p></li>
<li><p><a class="reference internal" href="#create-the-targets" id="id3">Create the Targets</a></p></li>
<li><p><a class="reference internal" href="#build-the-bootloader" id="id4">Build the Bootloader</a></p></li>
<li><p><a class="reference internal" href="#build-the-blinky-application" id="id5">Build the Blinky Application</a></p></li>
<li><p><a class="reference internal" href="#sign-and-create-the-blinky-application-image" id="id6">Sign and Create the Blinky Application Image</a></p></li>
<li><p><a class="reference internal" href="#connect-to-the-board" id="id7">Connect to the Board</a></p></li>
<li><p><a class="reference internal" href="#load-the-bootloader-and-blinky-application" id="id8">Load the Bootloader and Blinky Application</a></p></li>
</ul>
</div>
<div class="section" id="prerequisites">
<h2><a class="toc-backref" href="#id1">Prerequisites</a><a class="headerlink" href="#prerequisites" title="Permalink to this headline"></a></h2>
<ul class="simple">
<li><p>Meet the prerequisites listed in <a class="reference internal" href="blinky.html"><span class="doc">Project Blinky</span></a>.</p></li>
<li><p>Have a STM32-E407 development board from Olimex.</p></li>
<li><p>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)</p></li>
<li><p>Have a USB A-B type cable to connect the debugger to your computer.</p></li>
<li><p>Install the <a class="reference internal" href="../../get_started/native_install/cross_tools.html"><span class="doc">OpenOCD debugger</span></a>.</p></li>
</ul>
</div>
<div class="section" id="create-a-project">
<h2><a class="toc-backref" href="#id2">Create a Project</a><a class="headerlink" href="#create-a-project" title="Permalink to this headline"></a></h2>
<p>Create a new project if you do not have an existing one. You can skip this step and proceed to <a class="reference internal" href="#create-the-targets">Create the Targets</a> if
you already created a project.</p>
<p>Run the following commands to create a new project:</p>
<div class="highlight-console notranslate"><div class="highlight"><pre><span></span><span class="gp">$ </span>mkdir<span class="w"> </span>~/dev
<span class="gp">$ </span><span class="nb">cd</span><span class="w"> </span>~/dev
<span class="gp">$ </span>newt<span class="w"> </span>new<span class="w"> </span>myproj
<span class="go">Downloading project skeleton from apache/mynewt-blinky...</span>
<span class="go">Installing skeleton in myproj...</span>
<span class="go">Project myproj successfully created.</span>
<span class="gp">$ </span><span class="nb">cd</span><span class="w"> </span>myproj
<span class="gp">$ </span>newt<span class="w"> </span>upgrade
<span class="go">Downloading repository mynewt-core (commit: master) ...</span>
<span class="go">apache-mynewt-core successfully upgraded to version 1.7.0</span>
<span class="gp">$</span>
</pre></div>
</div>
</div>
<div class="section" id="create-the-targets">
<h2><a class="toc-backref" href="#id3">Create the Targets</a><a class="headerlink" href="#create-the-targets" title="Permalink to this headline"></a></h2>
<p>Create two targets for the Olimex board - one for the bootloader and one
for the Blinky application.</p>
<p>Run the following <code class="docutils literal notranslate"><span class="pre">newt</span> <span class="pre">target</span></code> commands, from your project directory,
to create a bootloader target. We name the target <code class="docutils literal notranslate"><span class="pre">boot_olimex</span></code>.</p>
<div class="highlight-console notranslate"><div class="highlight"><pre><span></span><span class="gp">$ </span>newt<span class="w"> </span>target<span class="w"> </span>create<span class="w"> </span>boot_olimex
<span class="gp">$ </span>newt<span class="w"> </span>target<span class="w"> </span><span class="nb">set</span><span class="w"> </span>boot_olimex<span class="w"> </span><span class="nv">build_profile</span><span class="o">=</span>optimized
<span class="gp">$ </span>newt<span class="w"> </span>target<span class="w"> </span><span class="nb">set</span><span class="w"> </span>boot_olimex<span class="w"> </span><span class="nv">app</span><span class="o">=</span>@mcuboot/boot/mynewt
<span class="gp">$ </span>newt<span class="w"> </span>target<span class="w"> </span><span class="nb">set</span><span class="w"> </span>boot_olimex<span class="w"> </span><span class="nv">bsp</span><span class="o">=</span>@apache-mynewt-core/hw/bsp/olimex_stm32-e407_devboard
</pre></div>
</div>
<p>Run the following <code class="docutils literal notranslate"><span class="pre">newt</span> <span class="pre">target</span></code> commands to create a target for the
Blinky application. We name the target <code class="docutils literal notranslate"><span class="pre">olimex_blinky</span></code>.</p>
<div class="highlight-console notranslate"><div class="highlight"><pre><span></span><span class="gp">$ </span>newt<span class="w"> </span>target<span class="w"> </span>create<span class="w"> </span>olimex_blinky
<span class="gp">$ </span>newt<span class="w"> </span>target<span class="w"> </span><span class="nb">set</span><span class="w"> </span>olimex_blinky<span class="w"> </span><span class="nv">build_profile</span><span class="o">=</span>debug
<span class="gp">$ </span>newt<span class="w"> </span>target<span class="w"> </span><span class="nb">set</span><span class="w"> </span>olimex_blinky<span class="w"> </span><span class="nv">bsp</span><span class="o">=</span>@apache-mynewt-core/hw/bsp/olimex_stm32-e407_devboard
<span class="gp">$ </span>newt<span class="w"> </span>target<span class="w"> </span><span class="nb">set</span><span class="w"> </span>olimex_blinky<span class="w"> </span><span class="nv">app</span><span class="o">=</span>apps/blinky
</pre></div>
</div>
</div>
<div class="section" id="build-the-bootloader">
<h2><a class="toc-backref" href="#id4">Build the Bootloader</a><a class="headerlink" href="#build-the-bootloader" title="Permalink to this headline"></a></h2>
<p>Run the <code class="docutils literal notranslate"><span class="pre">newt</span> <span class="pre">build</span> <span class="pre">boot_olimex</span></code> command to build the bootloader:</p>
<div class="highlight-console notranslate"><div class="highlight"><pre><span></span><span class="gp">$ </span>newt<span class="w"> </span>build<span class="w"> </span>boot_olimex
<span class="go">Building target targets/boot_olimex</span>
<span class="go">Compiling repos/mcuboot/boot/bootutil/src/image_ec256.c</span>
<span class="go">Compiling repos/mcuboot/boot/bootutil/src/image_ec.c</span>
<span class="go">Compiling repos/mcuboot/boot/bootutil/src/image_rsa.c</span>
<span class="go">Compiling bin/targets/boot_olimex/generated/src/boot_olimex-sysflash.c</span>
<span class="go"> ...</span>
<span class="go">Archiving libc_baselibc.a</span>
<span class="go">Archiving sys_flash_map.a</span>
<span class="go">Archiving sys_mfg.a</span>
<span class="go">Archiving sys_sysinit.a</span>
<span class="go">Archiving util_mem.a</span>
<span class="go">Linking ~/dev/myproj/bin/targets/boot_olimex/app/boot/mynewt/mynewt.elf</span>
<span class="go">Target successfully built: targets/boot_olimex</span>
</pre></div>
</div>
</div>
<div class="section" id="build-the-blinky-application">
<h2><a class="toc-backref" href="#id5">Build the Blinky Application</a><a class="headerlink" href="#build-the-blinky-application" title="Permalink to this headline"></a></h2>
<p>Run the <code class="docutils literal notranslate"><span class="pre">newt</span> <span class="pre">build</span> <span class="pre">olimex_blinky</span></code> command to build the blinky application:</p>
<div class="highlight-console notranslate"><div class="highlight"><pre><span></span><span class="gp">$ </span>newt<span class="w"> </span>build<span class="w"> </span>olimex_blinky
<span class="go">Building target targets/olimex_blinky</span>
<span class="go">Assembling repos/apache-mynewt-core/hw/bsp/olimex_stm32-e407_devboard/src/arch/cortex_m4/startup_STM32F40x.s</span>
<span class="go">Compiling repos/apache-mynewt-core/hw/drivers/uart/src/uart.c</span>
<span class="go">Compiling repos/apache-mynewt-core/hw/cmsis-core/src/cmsis_nvic.c</span>
<span class="go">Compiling repos/apache-mynewt-core/hw/bsp/olimex_stm32-e407_devboard/src/sbrk.c</span>
<span class="go">Compiling apps/blinky/src/main.c</span>
<span class="go">Compiling repos/apache-mynewt-core/hw/drivers/uart/uart_hal/src/uart_hal.c</span>
<span class="go">Compiling repos/apache-mynewt-core/hw/bsp/olimex_stm32-e407_devboard/src/hal_bsp.c</span>
<span class="go">Compiling repos/apache-mynewt-core/hw/bsp/olimex_stm32-e407_devboard/src/system_stm32f4xx.c</span>
<span class="go">Compiling repos/apache-mynewt-core/hw/hal/src/hal_common.c</span>
<span class="go">Compiling repos/apache-mynewt-core/hw/hal/src/hal_flash.c</span>
<span class="go"> ...</span>
<span class="go">Archiving sys_mfg.a</span>
<span class="go">Archiving sys_sysinit.a</span>
<span class="go">Archiving util_mem.a</span>
<span class="go">Linking ~/dev/myproj/bin/targets/olimex_blinky/app/apps/blinky/blinky.elf</span>
<span class="go">Target successfully built: targets/olimex_blinky</span>
</pre></div>
</div>
</div>
<div class="section" id="sign-and-create-the-blinky-application-image">
<h2><a class="toc-backref" href="#id6">Sign and Create the Blinky Application Image</a><a class="headerlink" href="#sign-and-create-the-blinky-application-image" title="Permalink to this headline"></a></h2>
<p>Run the <code class="docutils literal notranslate"><span class="pre">newt</span> <span class="pre">create-image</span> <span class="pre">olimex_blinky</span> <span class="pre">1.0.0</span></code> command to sign and
create an image file for the blinky application. You may assign an
arbitrary version (e.g. 1.0.0) number.</p>
<div class="highlight-console notranslate"><div class="highlight"><pre><span></span><span class="gp">$ </span>newt<span class="w"> </span>create-image<span class="w"> </span>olimex_blinky<span class="w"> </span><span class="m">1</span>.0.0
<span class="go">App image succesfully generated: ~/dev/myproj/bin/targets/olimex_blinky/app/apps/blinky/blinky.img</span>
</pre></div>
</div>
</div>
<div class="section" id="connect-to-the-board">
<h2><a class="toc-backref" href="#id7">Connect to the Board</a><a class="headerlink" href="#connect-to-the-board" title="Permalink to this headline"></a></h2>
<p>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.</p>
<p><strong>Note:</strong> The labels for the <strong>USB-OTG1</strong> and <strong>USB-OTG2</strong> 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.</p>
<div class="figure align-default">
<img alt="../../_images/STM32-E407_top_small.jpg" src="../../_images/STM32-E407_top_small.jpg" />
</div>
<div class="figure align-default">
<img alt="../../_images/STM32-E407_bot_small.jpg" src="../../_images/STM32-E407_bot_small.jpg" />
</div>
<ul class="simple">
<li><p>Locate the boot jumpers on the lower right corner of the board.
<strong>B1_1/B1_0</strong> and <strong>B0_1/B0_0</strong> 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 <strong>B0_0</strong> and <strong>B1_0</strong>. <strong>Note:</strong> The markings on the
board may not always be accurate, and you should always refer to the
manual for the correct positioning.</p></li>
<li><p>Locate the <strong>Power Input Select</strong> 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 <a class="reference external" href="https://www.olimex.com/Products/ARM/ST/STM32-E407/resources/STM32-E407.pdf">OLIMEX STM32-E407 user
manual</a>
for pin specifications.</p></li>
<li><p>Connect the USB Micro-A cable to the USB-OTG2 port on the board.</p></li>
<li><p>Connect the JTAG connector to the JTAG/SWD interface on the board.</p></li>
<li><p>Connect the USB A-B cable to the ARM-USB-TINY-H connector and your
computer.</p></li>
<li><p>Check that the red PWR LED lights up.</p></li>
</ul>
</div>
<div class="section" id="load-the-bootloader-and-blinky-application">
<h2><a class="toc-backref" href="#id8">Load the Bootloader and Blinky Application</a><a class="headerlink" href="#load-the-bootloader-and-blinky-application" title="Permalink to this headline"></a></h2>
<p>Run the <code class="docutils literal notranslate"><span class="pre">newt</span> <span class="pre">load</span> <span class="pre">boot_olimex</span></code> command to load the bootloader image
onto the board:</p>
<div class="highlight-console notranslate"><div class="highlight"><pre><span></span><span class="gp">$ </span>newt<span class="w"> </span>load<span class="w"> </span>-v<span class="w"> </span>boot_olimex
<span class="go">Loading bootloader</span>
<span class="go">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</span>
<span class="go">Successfully loaded image.</span>
</pre></div>
</div>
<p>Note: If you are using Windows and get a <code class="docutils literal notranslate"><span class="pre">no</span> <span class="pre">device</span> <span class="pre">found</span></code> error, you
will need to install the usb driver. Download
<a class="reference external" href="http://zadig.akeo.ie">Zadig</a> and run it:</p>
<ul class="simple">
<li><p>Select Options &gt; List All Devices.</p></li>
<li><p>Select <code class="docutils literal notranslate"><span class="pre">Olimex</span> <span class="pre">OpenOCD</span> <span class="pre">JTAG</span> <span class="pre">ARM-USB-TINY-H</span></code> from the drop down
menu.</p></li>
<li><p>Select the <code class="docutils literal notranslate"><span class="pre">WinUSB</span></code> driver.</p></li>
<li><p>Click Install Driver.</p></li>
<li><p>Run the <code class="docutils literal notranslate"><span class="pre">newt</span> <span class="pre">load</span> <span class="pre">boot_olimex</span></code> command again.</p></li>
</ul>
<p>Run the <code class="docutils literal notranslate"><span class="pre">newt</span> <span class="pre">load</span> <span class="pre">olimex_blinky</span></code> command to load the blinky
application image onto the board:</p>
<div class="highlight-console notranslate"><div class="highlight"><pre><span></span><span class="gp">$ </span>newt<span class="w"> </span>load<span class="w"> </span>-v<span class="w"> </span>olimex_blinky
<span class="go">Loading app image into slot 1</span>
<span class="go">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</span>
<span class="go">Successfully loaded image.</span>
</pre></div>
</div>
<p>The LED should be blinking!</p>
<p>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.</p>
<p>The LED light will start blinking again. Success!</p>
<p>If you want to download the image to flash and open a gdb session, use
<code class="docutils literal notranslate"><span class="pre">newt</span> <span class="pre">debug</span> <span class="pre">blinky</span></code>.</p>
<p><strong>Note:</strong> 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.</p>
<p>Type <code class="docutils literal notranslate"><span class="pre">c</span></code> to continue inside the gdb session.</p>
<div class="highlight-console notranslate"><div class="highlight"><pre><span></span><span class="gp">$ </span>newt<span class="w"> </span>debug<span class="w"> </span>blinky
<span class="go">Debugging with ~/dev/myproj/hw/bsp/olimex_stm32-e407_...</span>
<span class="go">Debugging ~/dev/myproj/project/blinky/bin/blinky/blinky.elf</span>
<span class="go">GNU gdb (GNU Tools for ARM Embedded Processors) 7.8.0.20150604-cvs</span>
<span class="go">Copyright (C) 2014 Free Software Foundation, Inc.</span>
<span class="go">License GPLv3+: GNU GPL version 3 &lt;http://gnu.org/licenses/gpl.html&gt;</span>
<span class="go">...</span>
<span class="gp gp-VirtualEnv">(info)</span>
<span class="go">...</span>
<span class="go">target state: halted</span>
<span class="go">target halted due to debug-request, current mode: Thread</span>
<span class="go">xPSR: 0x01000000 pc: 0x08000250 msp: 0x10010000</span>
<span class="go">Info : accepting &#39;gdb&#39; connection from 3333</span>
<span class="go">Info : device id = 0x10036413</span>
<span class="go">Info : flash size = 1024kbytes</span>
<span class="go">Reset_Handler () at startup_STM32F40x.s:199</span>
<span class="go">199 ldr r1, =__etext</span>
<span class="gp gp-VirtualEnv">(gdb)</span>
</pre></div>
</div>
<p>If you want to erase the flash and load the image again you may use the
following commands from within gdb. <code class="docutils literal notranslate"><span class="pre">flash</span> <span class="pre">erase_sector</span> <span class="pre">0</span> <span class="pre">0</span> <span class="pre">x</span></code> 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.</p>
<div class="highlight-console notranslate"><div class="highlight"><pre><span></span><span class="gp gp-VirtualEnv">(gdb)</span> <span class="go">monitor flash erase_sector 0 0 4</span>
<span class="go">erased sectors 0 through 4 on flash bank 0 in 2.296712s</span>
<span class="gp gp-VirtualEnv">(gdb)</span> <span class="go">monitor mdw 0x08000000 16</span>
<span class="go">0x08000000: ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff</span>
<span class="go">(0x08000020: ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff</span>
<span class="go">(0x08000000: ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff</span>
<span class="go">(0x08000020: ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff</span>
<span class="gp gp-VirtualEnv">(gdb)</span> <span class="go">monitor flash info 0</span>
</pre></div>
</div>
</div>
</div>
</div>
</div>
<div class="rst-footer-buttons row" role="navigation" aria-label="footer navigation">
<a href="nRF52.html" class="btn btn-neutral float-right" title="Blinky, your “Hello World!”, on a nRF52 Development Kit" accesskey="n">Next: Blinky, your “Hello World!”, on a nRF52 Development Kit <span class="fa fa-arrow-circle-right"></span></a>
<a href="blinky_primo.html" class="btn btn-neutral" title="Blinky, your “Hello World!”, on Arduino Primo" accesskey="p"><span class="fa fa-arrow-circle-left"></span> Previous: Blinky, your “Hello World!”, on Arduino Primo</a>
</div>
</div>
</div>
</div>
<!-- ENDS CONTENT SECTION -->
</div>
<!-- ENDS .content -->
</div>
</div>
<footer>
<div class="container">
<div class="row">
<div class="col-xs-12">
<p class="copyright">Apache Mynewt is available under Apache License, version 2.0.</p>
</div>
<div class="col-xs-12">
<div class="logos">
<img src="../../_static/img/asf_logo_wide_small.png" alt="Apache" title="Apache">
<small class="footnote">
Apache Mynewt, Mynewt, Apache, the Apache feather logo, and the Apache Mynewt project logo are either
registered trademarks or trademarks of the Apache Software Foundation in the United States and other countries.
</small>
<a href="">
<img src="../../_static/img/add_to_slack.png" alt="Slack Icon" title="Join our Slack Community" />
</a>
</div>
</div>
</div>
</div>
</footer>
</div>
<!-- ENDS #wrapper -->
<script type="text/javascript">
var DOCUMENTATION_OPTIONS = {
URL_ROOT:'../../',
VERSION:'latest',
COLLAPSE_INDEX:false,
FILE_SUFFIX:'.html',
HAS_SOURCE: true,
SOURCELINK_SUFFIX: '.txt',
LINK_SUFFIX: '.html'
};
</script>
<script type="text/javascript" src="../../_static/jquery.js"></script>
<script type="text/javascript" src="../../_static/underscore.js"></script>
<script type="text/javascript" src="../../_static/doctools.js"></script>
<script type="text/javascript" src="../../_static/js/bootstrap-3.0.3.min.js"></script>
<script type="text/javascript" src="../../_static/js/affix.js"></script>
<script type="text/javascript" src="../../_static/js/main.js"></script>
</body>
</html>