blob: 54396aba20a9e950339360ab78648101d81075a7 [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">
<!-- This is broken by doc revisioning.
-->
<link rel="shortcut icon" href="../../../img/favicon.ico">
<title>Enable remote comms on STM32 board - Apache Mynewt</title>
<link href="../../../css/bootstrap-3.0.3.min.css" rel="stylesheet">
<link rel="stylesheet" href="../../../css/highlight.css">
<link href="../../../css/base.css" rel="stylesheet">
<link href="../../../css/custom.css" rel="stylesheet">
<link href="../../../css/v2.css" rel="stylesheet">
<link href="https://fonts.googleapis.com/css?family=Lato" rel="stylesheet">
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/font-awesome/4.5.0/css/font-awesome.min.css">
<!-- HTML5 shim and Respond.js IE8 support of HTML5 elements and media queries -->
<!--[if lt IE 9]>
<script src="https://oss.maxcdn.com/libs/html5shiv/3.7.0/html5shiv.js"></script>
<script src="https://oss.maxcdn.com/libs/respond.js/1.3.0/respond.min.js"></script>
<![endif]-->
<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="Enable remote comms on STM32 board">
<div class="container">
<div class="row v2-main-banner">
<a class="logo-cell" href="/">
<img class="logo" src="/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>
<nav id="navbar" class="navbar navbar-inverse affix-top" data-spy="affix" data-offset-top="150" 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
class=""
>
<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
class=""
>
<a href="/about/">About</a>
</li>
<li
class=""
>
<a href="/talks/">Talks</a>
</li>
<li
class="active"
>
<a href="/documentation/">Documentation</a>
</li>
<li
class=""
>
<a href="/download/">Download</a>
</li>
<li
class=""
>
<a href="/community/">Community</a>
</li>
<li
class=""
>
<a href="/events/">Events</a>
</li>
</ul>
</div>
</div>
</nav>
<div class="container">
<div class="row">
<div class="col-md-3 v2-sidebar sidebar-container"><div id="docSidebar" class="hidden-print" role="complementary">
<div class="top">
<div role="search">
<form id="rtd-search-form" class="wy-form" action="../../../search.html" method="get">
<div class="form-group">
<input type="text" name="q" class="form-control" placeholder="Search documentation" />
</div>
</form>
</div>
</div>
<ul class="toc-nav">
<li class="doc-version"><select class="form-control" onchange="if (this.value) window.location.href=this.value">
<option value="/latest">
Version: master
</option>
<option value="/v1_11_0/" >
Version: 1.11.0
</option>
<option value="/v1_10_0/" >
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" selected="selected" >
Version: 0.9.0
</option>
</select></li>
<li ><a href="../../introduction/">Mynewt Documentation</a>
<ul>
<li ><a href="../../get_started/get_started/">Basic Setup</a>
</li>
<li >
<a href="../../get_started/vocabulary/">Concepts</a>
</li>
<li ><a href="../tutorials/">Tutorials</a>
<ul>
<li><a href="
../arduino_zero/
">Project Blinky</a>
</li>
<li ><a href="../repo/add_repos/">Work with repositories</a>
</li>
<li >
<a href="../unit_test/">Write a Test Suite for a Package</a>
</li>
<li >
<a href="../air_quality_sensor/">Air-quality Sensor project</a>
</li>
<li >
<a href="../event_queue/">Add task to manage multiple events</a>
</li>
<li >
<a href="../project-slinky/">Enable remote comms on sim device</a>
</li>
<li class="active">
<a href="./">Enable remote comms on STM32 board</a>
</li>
<li >
<a href="../bletiny_project/">BLE app to check stats via console</a>
</li>
<li ><a href="../bleprph/bleprph-intro/">BLE peripheral project</a>
</li>
<li >
<a href="../ibeacon/">BLE iBeacon</a>
</li>
<li >
<a href="../blehci_project/">BLE HCI interface</a>
</li>
</ul>
</li>
<li ><a href="../../os_user_guide/">OS User Guide</a>
</li>
<li><a href="
../../../network/ble/ble_intro/
">BLE User Guide</a>
</li>
<li ><a href="../../../newt/newt_intro/">Newt Tool Guide</a>
</li>
<li ><a href="../../../newtmgr/overview/">Newt Manager Guide</a>
</li>
<li >
<a href="../../../known_issues/">Known Issues</a>
</li>
</ul>
</li>
<li><a href="
../../../faq/how_to_edit_docs/
">Appendix</a>
</li>
</ul>
</div></div>
<div class="col-md-9" role="main">
<div class="doc-header">
<div role="navigation" aria-label="breadcrumbs navigation">
<ul class="wy-breadcrumbs">
<li><a href="/documentation/">Docs</a></li>
<li>&raquo; <a href="os/tutorials/tutorials/">Tutorials</a></li>
<li>&raquo; <a href="os/introduction/">Mynewt Documentation</a></li>
<li>&raquo; Enable remote comms on STM32 board</li>
</ul>
</div>
</div>
<div class="alert alert-warning">
<p>
Version 0.9.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>
<h2 id="project-slinky">Project Slinky</h2>
<h3 id="objective">Objective</h3>
<p>The goal of the project is to enable and demonstrate remote communications with the Mynewt OS via newt manager (newtmgr). We will do this through a project with Mynewt called Slinky that runs on the STM32-E407 board.</p>
<h3 id="what-you-need">What you need</h3>
<ol>
<li>STM32-E407 development board from Olimex. You can order it from <a href="http://www.mouser.com/ProductDetail/Olimex-Ltd/STM32-E407/?qs=UN6GZl1KCcit6Ye0xmPO4A%3D%3D">http://www.mouser.com</a>, <a href="http://www.digikey.com/product-detail/en/STM32-E407/1188-1093-ND/3726951">http://www.digikey.com</a>, and other places.</li>
<li>ARM-USB-TINY-H connector with JTAG interface for debugging ARM microcontrollers (comes with the ribbon cable to hook up to the board)</li>
<li>USB A-B type cable to connect the debugger to your personal computer</li>
<li>A USB to TTL Serial Cable with female wiring harness. An example is <a href="http://www.amazon.com/JBtek®-WINDOWS-Supported-Raspberry-Programming/dp/B00QT7LQ88/ref=lp_464404_1_9?s=pc&amp;ie=UTF8&amp;qid=1454631303&amp;sr=1-9">http://www.amazon.com/JBtek®-WINDOWS-Supported-Raspberry-Programming/dp/B00QT7LQ88/ref=lp_464404_1_9?s=pc&amp;ie=UTF8&amp;qid=1454631303&amp;sr=1-9</a></li>
<li>Personal Computer</li>
</ol>
<p>The instructions assume the user is using a Bourne-compatible shell (e.g. bash or zsh) on your computer. The given instructions have been tested with the following releases of operating systems:</p>
<ul>
<li>Mac: OS X Yosemite Version 10.10.5</li>
</ul>
<h3 id="overview-of-steps">Overview of steps</h3>
<ul>
<li>Install dependencies</li>
<li>Define a target using the newt tool</li>
<li>Build executables for the targets using the newt tool</li>
<li>Set up serial connection with the targets </li>
<li>Create a connection profile using the newtmgr tool</li>
<li>Use the newtmgr tool to communicate with the targets</li>
</ul>
<h3 id="install-newt">Install newt</h3>
<p>If you have not already installed <code>newt</code>, see the
<a href="../get_started/get_started/">newt installation instructions</a> and ensure newt is installed an in your path.</p>
<h3 id="install-newtmgr">Install newtmgr</h3>
<p>If you have not already installed <code>newtmgr</code>, see the
<a href="../../newtmgr/installing/">newtmgr installation instructions</a> and ensure newtmgr is installed an in your path.</p>
<h3 id="create-a-new-project">Create a new project</h3>
<p>Instructions for creating a project are located in the <a href="../get_started/project_create/">Basic Setup</a> section of the <a href="../../introduction/">Mynewt Documentation</a>.</p>
<p>If you already completed <a href="../project-slinky/">Sim Slinky</a> you can skip this step.</p>
<p>We will list only the steps here for brevity. We will name the project
<code>slinky</code>.</p>
<div class="codehilite" style="background: #ffffff"><pre style="line-height: 125%;"><span></span><code>$ newt new slinky
Downloading project skeleton from apache/incubator-mynewt-blinky...
...
Installing skeleton in slink...
Project slink successfully created
$ cd slinky
$newt install -v
Downloading repository description for apache-mynewt-core... success!
...
Repos successfully installed
</code></pre></div>
<p><br></p>
<h3 id="set-up-your-target-builds">Set up your target builds</h3>
<p>Create a target for <code>stm32_slinky</code> using the native BSP. The Newt tool output is suppressed below for brevity.</p>
<div class="codehilite" style="background: #ffffff"><pre style="line-height: 125%;"><span></span><code>$ 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
</code></pre></div>
<p>Create a second target for <code>stm32_bootloader</code> to build a bootloader to boot
the <code>stm32_slinky</code> image. The tool output is suppressed below for brevity.</p>
<div class="codehilite" style="background: #ffffff"><pre style="line-height: 125%;"><span></span><code>$ newt target create stm32_bootloader
$ newt target set stm32_bootloader bsp=@apache-mynewt-core/hw/bsp/olimex_stm32-e407_devboard
$ newt target set stm32_bootloader build_profile=optimized
$ newt target set stm32_bootloader target.app=@apache-mynewt-core/apps/boot
</code></pre></div>
<p><br></p>
<h3 id="build-targets">Build Targets</h3>
<div class="codehilite" style="background: #ffffff"><pre style="line-height: 125%;"><span></span><code>$ newt build stm32_slinky
Compiling main.c
...
Linking slinky.elf
App successfully built: ~/dev/slinky/bin/stm32_slinky/apps/slinky/slinky.elf
</code></pre></div>
<div class="codehilite" style="background: #ffffff"><pre style="line-height: 125%;"><span></span><code>newt build stm32_bootloader
Compiling crc16.c
...
Linking boot.elf
App successfully built: ~/slinky/bin/stm32_bootloader/apps/boot/boot.elf
</code></pre></div>
<p>For the main image, you need to create an image using newt create-image.
Give this image some arbitrary version number "1.2.3".</p>
<div class="codehilite" style="background: #ffffff"><pre style="line-height: 125%;"><span></span><code>$ newt create-image stm32_slinky 1.2.3
App image successfully generated: /Users/paulfdietrich/dev/slinky/bin/stm32_slinky/apps/slinky/slinky.img
Build manifest: /Users/paulfdietrich/dev/slinky/bin/stm32_slinky/apps/slinky/manifest.json
</code></pre></div>
<p><br></p>
<h3 id="using-newtmgr-with-a-remote-target">Using newtmgr with a remote target</h3>
<ul>
<li>
<p>First make sure the USB A-B type cable is connected to the ARM-USB-TINY-H debugger connector on the Olimex board. </p>
<p>Next go the to project directory and download the slinky project image to the flash of the Olimex board. </p>
</li>
</ul>
<div class="codehilite" style="background: #ffffff"><pre style="line-height: 125%;"><span></span><code>$ newt load stm32_bootloader
$ newt load stm32_slinky
</code></pre></div>
<p>You can now disconnect the debugging cable from the board. You should see the green LED blinking. If not, try powercycling the board.</p>
<p><br></p>
<ul>
<li>
<p>Now you have to set up the serial connection from your computer to the Olimex board. 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 <a href="https://www.olimex.com/Products/Modules/UEXT/">https://www.olimex.com/Products/Modules/UEXT/</a>. The schematic of the board can be found at <a href="https://www.olimex.com/Products/ARM/ST/STM32-E407/resources/STM32-E407_sch.pdf">https://www.olimex.com/Products/ARM/ST/STM32-E407/resources/STM32-E407_sch.pdf</a> for reference.</p>
<p><img alt="Alt Layout - Serial Connection" src="../pics/serial_conn.png" /></p>
<ul>
<li>Connect the female RX pin of the USB-TTL serial cable to the TX of the UEXT connector on the board. </li>
<li>Connect the female TX pin of the USB-TTL serial cable to the RX of the UEXT connector on the board. </li>
<li>Connect the GND pin of the USB-TTL serial cable to the GND of the UEXT connector on the board.</li>
</ul>
</li>
</ul>
<p><br></p>
<ul>
<li>Locate the serial connection established in the /dev directory of your computer. It should be of the type <code>tty.usbserial-&lt;some identifier&gt;</code>.</li>
</ul>
<div class="codehilite" style="background: #ffffff"><pre style="line-height: 125%;"><span></span><code> $ ls /dev/tty.usbserial-AJ03HAQQ
/dev/tty.usbserial-AJ03HAQQ
</code></pre></div>
<p><br></p>
<ul>
<li>You now have to define a connection profile using newtmgr. You can give it any name you want. The example below shows the connection profile being named as the very imaginative <code>olimex01</code>.</li>
</ul>
<div class="codehilite" style="background: #ffffff"><pre style="line-height: 125%;"><span></span><code> $ pwd
/Users/&lt;user&gt;/dev/larva/project/slinky
$ newtmgr conn add olimex01 type=serial connstring=/dev/tty.usbserial-AJ03HAQQ
Connection profile olimex01 successfully added
$ newtmgr conn show
Connection profiles:
sim1: type=serial, connstring=&#39;/dev/ttys007&#39;
olimex01: type=serial, connstring=&#39;/dev/tty.usbserial-AJ03HAQQ&#39;
</code></pre></div>
<p><br></p>
<ul>
<li>Now go ahead and query the Olimex board to get responses back. The simplest command is the <code>echo</code> command to ask it to respond with the text you send it. </li>
</ul>
<div class="codehilite" style="background: #ffffff"><pre style="line-height: 125%;"><span></span><code> $ newtmgr echo -c olimex01 hello
{&quot;r&quot;: &quot;hello&quot;}
$ newtmgr image -c olimex01 list
Images:
0 : 1.2.3
$ newtmgr -c olimex01 taskstats
Return Code = 0
newtmgr (prio=4 tid=2 runtime=0 cswcnt=12 stksize=512 stkusage=255 last_checkin=0 next_checkin=0)
task1 (prio=1 tid=3 runtime=0 cswcnt=299 stksize=128 stkusage=33 last_checkin=0 next_checkin=0)
task2 (prio=2 tid=4 runtime=0 cswcnt=300 stksize=128 stkusage=31 last_checkin=0 next_checkin=0)
idle (prio=255 tid=0 runtime=299916 cswcnt=313 stksize=32 stkusage=18 last_checkin=0 next_checkin=0)
shell (prio=3 tid=1 runtime=1 cswcnt=20 stksize=384 stkusage=60 last_checkin=0 next_checkin=0)
</code></pre></div>
<div class="row">
<ul class="nav nav-pills" style="margin-bottom: 10px">
<li>
</li>
<li class="pull-right">
</li>
</ul>
</div>
<footer class="row">
<div class="col-xs-12">
<p class="copyright">Apache Mynewt (incubating) is available under Apache License, version 2.0.</p>
</div>
<div class="col-xs-12">
<div class="logos">
<a href="https://www.apache.org/">
<img src="/img/asf_logo_wide_small.png" alt="Apache" title="Apache">
</a>
<p>
Copyright © 2015-2021 The Apache Software Foundation.<br>
<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>
</p>
<a href="">
<img src="https://www.countit.com/images/add_to_slack.png" alt="Slack Icon" title="Join our Slack Community" />
</a>
</div>
</div>
<a href="https://www.apache.org/licenses/">
<button class="button-footer-asf">
License
</button>
</a>
<a href="https://www.apache.org/foundation/sponsorship.html">
<button class="button-footer-asf">
Sponsorship
</button>
</a>
<a href="https://www.apache.org/foundation/thanks.html">
<button class="button-footer-asf">
Thanks
</button>
</a>
<a href="https://www.apache.org/security/">
<button class="button-footer-asf">
Security
</button>
</a>
<a href="https://apache.org/events/current-event">
<button class="button-footer-asf">
ASF Events
</button>
</a>
</footer>
</div>
</div>
</div>
<script src="../../../js/jquery-1.10.2.min.js"></script>
<script src="../../../js/bootstrap-3.0.3.min.js"></script>
<script src="../../../js/highlight.pack.js"></script>
<script src="../../../js/base.js"></script>
<script src="../../../js/custom.js"></script>
<script src="search/main.js"></script>
</body>
</html>