blob: d37957a4ab756a4b6003494fa22cd0d3eca141d5 [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">
<meta name="viewport" content="width=device-width, initial-scale=1" />
<title>Blinky, your “Hello World!”, on STM32F303 Discovery &mdash; Apache Mynewt latest documentation</title>
<link rel="stylesheet" href="../../_static/css/theme.css" type="text/css" />
<link rel="stylesheet" href="../../_static/pygments.css" type="text/css" />
<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="Enabling The Console and Shell for Blinky" href="blinky_console.html"/>
<link rel="prev" title="Blinky, your “Hello World!”, on STM32F4-Discovery" href="blinky_stm32f4disc.html"/>
<script src="../../_static/js/modernizr.min.js"></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.13.0, Apache NimBLE 1.8.0 </a> released November 25, 2024)
</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="/cve/">CVE</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 STM32F303 Discovery
<div class="sourcelink">
<a href="https://github.com/apache/mynewt-documentation/edit/master/docs/tutorials/blinky/blinky_STM32F303.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="/master" >
Version: master
</option>
<option value="/v1_13_0" >
Version: 1.13.0
</option>
<option value="/v1_12_0" >
Version: 1.12.0
</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" selected="selected" >
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"><a class="reference internal" href="olimex.html">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 current"><a class="current reference internal" href="#">Blinky on STM32F303-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.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>
<div class="">
<div class="rst-content">
<div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article">
<div itemprop="articleBody">
<section id="blinky-your-hello-world-on-stm32f303-discovery">
<h1>Blinky, your “Hello World!”, on STM32F303 Discovery<a class="headerlink" href="#blinky-your-hello-world-on-stm32f303-discovery" title="Link to this heading"></a></h1>
<section id="objective">
<h2>Objective<a class="headerlink" href="#objective" title="Link to this heading"></a></h2>
<p>Learn how to use packages from a default application repository of
Mynewt to build your first <em>Hello World</em> application (Blinky) on a
target board. Once built using the <em>newt</em> tool, this application will
blink the LED lights on the target board.</p>
<p>Create a project with a simple app that blinks an LED on the STM F303
discovery board. In the process import some external libraries into your
project. Download the application to the target and watch it blink!</p>
</section>
<section id="what-you-need">
<h2>What you need<a class="headerlink" href="#what-you-need" title="Link to this heading"></a></h2>
<ul class="simple">
<li><p>Discovery kit with STM32F303VC MCU</p></li>
<li><p>Laptop running Mac OSX.</p></li>
<li><p>It is assumed you have already installed newt tool.</p></li>
<li><p>It is assumed you already installed native tools as described
<a class="reference internal" href="../../get_started/native_install/native_tools.html"><span class="doc">here</span></a></p></li>
</ul>
<p>Also, we assume that you’re familiar with UNIX shells. Let’s gets
started!</p>
</section>
<section id="create-a-project">
<h2>Create a project<a class="headerlink" href="#create-a-project" title="Link to this heading"></a></h2>
<p>Create a new project to hold your work. For a deeper understanding, you
can read about project creation in <a class="reference internal" href="../../get_started/project_create.html"><span class="doc">Get Started – Creating Your First
Project</span></a> or just follow the
commands below.</p>
<p>If you’ve already created a project from another tutorial, you can
re-use that project.</p>
<div class="highlight-none notranslate"><div class="highlight"><pre><span></span>$ mkdir ~/dev
$ cd ~/dev
$ newt new myproj
Downloading project skeleton from apache/incubator-mynewt-blinky...
Installing skeleton in myproj...
Project myproj successfully created.
$ cd myproj
</pre></div>
</div>
<p><strong>Note:</strong> Don’t forget to change into the <code class="docutils literal notranslate"><span class="pre">myproj</span></code> directory.</p>
</section>
<section id="install-dependencies">
<h2>Install dependencies<a class="headerlink" href="#install-dependencies" title="Link to this heading"></a></h2>
<p>Now you can install this into the project using:</p>
<div class="highlight-none notranslate"><div class="highlight"><pre><span></span>$ newt install -v
Downloading repository description for apache-mynewt-core... success!
...
apache-mynewt-core successfully installed version 0.7.9-none
...
Downloading repository description for mynewt_stm32f3... success!
Downloading repository mynewt_stm32f3
...
Resolving deltas: 100% (65/65), done.
Checking connectivity... done.
mynewt_stm32f3 successfully installed version 0.0.0-none
</pre></div>
</div>
</section>
<section id="create-targets">
<h2>Create targets<a class="headerlink" href="#create-targets" title="Link to this heading"></a></h2>
<p>Create two targets to build using the stmf3 board support package and
the app blinky example from mynewt. The output of these commands are not
shown here for brevity.</p>
<p>The first target is the application image itself. The second target is
the bootloader which allows you to upgrade your mynewt applications.</p>
<div class="highlight-none notranslate"><div class="highlight"><pre><span></span>$ newt target create stmf3_blinky
$ newt target set stmf3_blinky build_profile=optimized
$ newt target set stmf3_blinky bsp=@apache-mynewt-core/hw/bsp/stm32f3discovery
$ newt target set stmf3_blinky app=apps/blinky
$ newt target create stmf3_boot
$ newt target set stmf3_boot app=@mcuboot/boot/mynewt
$ newt target set stmf3_boot bsp=@apache-mynewt-core/hw/bsp/stm32f3discovery
$ newt target set stmf3_boot build_profile=optimized
$ newt target show
targets/stmf3_blinky
app=apps/blinky
bsp=@apache-mynewt-core/hw/bsp/stm32f3discovery
build_profile=optimized
targets/stmf3_boot
app=@mcuboot/boot/mynewt
bsp=@apache-mynewt-core/hw/bsp/stm32f3discovery
build_profile=optimized
</pre></div>
</div>
</section>
<section id="build-the-target-executables">
<h2>Build the target executables<a class="headerlink" href="#build-the-target-executables" title="Link to this heading"></a></h2>
<p>To build the images, use the <code class="docutils literal notranslate"><span class="pre">newt</span> <span class="pre">build</span></code> command below.</p>
<div class="highlight-none notranslate"><div class="highlight"><pre><span></span>$ newt build stmf3_blinky
...
Archiving stm32f3discovery.a
Linking blinky.elf
App successfully built: ~/dev/myproj/bin/stmf3_blinky/apps/blinky/blinky.elf
$ newt build stmf3_boot
Compiling log_shell.c
Archiving log.a
Linking boot.elf
App successfully built: ~/dev/myproj/bin/stmf3_boot/apps/boot/boot.elf
</pre></div>
</div>
</section>
<section id="sign-and-create-the-blinky-application-image">
<h2>Sign and create the blinky application image<a class="headerlink" href="#sign-and-create-the-blinky-application-image" title="Link to this heading"></a></h2>
<p>You must sign and version your application image to download it using
newt. Use the <code class="docutils literal notranslate"><span class="pre">newt</span> <span class="pre">create-image</span></code> command to perform this action. Here
we assign this image an arbitrary version <code class="docutils literal notranslate"><span class="pre">1.2.3</span></code>.</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>stmf3_blinky<span class="w"> </span><span class="m">1</span>.2.3
<span class="go">App image successfully generated: ~/dev/myproj/bin/stmf3_blinky/apps/blinky/blinky.img</span>
<span class="go">Build manifest:~/dev/myproj/bin/stmf3_blinky/apps/blinky/manifest.json</span>
</pre></div>
</div>
</section>
<section id="configure-the-hardware">
<h2>Configure the hardware<a class="headerlink" href="#configure-the-hardware" title="Link to this heading"></a></h2>
<p>The STM32F3DISCOVERY board includes an ST-LINK/V2 embedded debug tool
interface that will be used to program/debug the board. To program the
MCU on the board, simply plug in the two jumpers on CN4, as shown in the
picture in red. If you want to learn more about the board you will find
the User Manual at
<a class="reference external" href="http://www.st.com/st-web-ui/static/active/jp/resource/technical/document/user_manual/DM00063382.pdf">http://www.st.com/st-web-ui/static/active/jp/resource/technical/document/user_manual/DM00063382.pdf</a></p>
<figure class="align-default">
<img alt="../../_images/STM32f3discovery_connector.png" src="../../_images/STM32f3discovery_connector.png" />
</figure>
</section>
<section id="download-the-images">
<h2>Download the Images<a class="headerlink" href="#download-the-images" title="Link to this heading"></a></h2>
<p>Use the <code class="docutils literal notranslate"><span class="pre">newt</span> <span class="pre">load</span></code> command to download the images to the target
board.</p>
<div class="highlight-none notranslate"><div class="highlight"><pre><span></span>$ newt -v load stmf3_boot
$ newt -v load stmf3_blinky
</pre></div>
</div>
</section>
<section id="watch-the-led-blink">
<h2>Watch the LED blink<a class="headerlink" href="#watch-the-led-blink" title="Link to this heading"></a></h2>
<p>Congratulations! You have built, downloaded, and run your first
application using mynewt for the stm32f3 discovery board. One of the
LEDs on the LED wheel should be blinking at 1 Hz.</p>
</section>
<section id="want-more">
<h2>Want more?<a class="headerlink" href="#want-more" title="Link to this heading"></a></h2>
<p>Want to make your board do something a little more exciting with the
LEDs? Then try making the modifications to the Blinky app to make it a
<a class="reference internal" href="blinky_pin-wheel-mods.html"><span class="doc">pin wheel app</span></a> and you can light all the LEDs in
a pin-wheel fashion.</p>
<p>We have more fun tutorials for you to get your hands dirty. Be bold and
try other Blinky-like <a class="reference internal" href="nRF52.html"><span class="doc">tutorials</span></a> or try
enabling additional functionality such as <a class="reference internal" href="../slinky/project-slinky.html"><span class="doc">remote comms</span></a> on the current board.</p>
<p>If you see anything missing or want to send us feedback, please do so by
signing up for appropriate mailing lists on our <a class="reference external" href="/community">Community Page</a></p>
<p>Keep on hacking and blinking!</p>
</section>
</section>
</div>
</div>
<div class="rst-footer-buttons row" role="navigation" aria-label="footer navigation">
<a href="blinky_console.html" class="btn btn-neutral float-right" title="Enabling The Console and Shell for Blinky" accesskey="n">Next: Enabling The Console and Shell for Blinky <span class="fa fa-arrow-circle-right"></span></a>
<a href="blinky_stm32f4disc.html" class="btn btn-neutral" title="Blinky, your “Hello World!”, on STM32F4-Discovery" accesskey="p"><span class="fa fa-arrow-circle-left"></span> Previous: Blinky, your “Hello World!”, on STM32F4-Discovery</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">
<a href="https://www.apache.org">
<img src="../../_static/img/asf_logo_wide_small.png" alt="Apache" title="Apache">
</a>
<p>
Copyright © 2015-2024 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="https://join.slack.com/t/mynewt/shared_invite/enQtNjA1MTg0NzgyNzg3LTcyMmZiOGQzOGMxM2U4ODFmMTIwNjNmYTE5Y2UwYjQwZWIxNTE0MTUzY2JmMTEzOWFjYWZkNGM0YmM4MzAxNWQ">
<img src="../../_static/img/add_to_slack.png" alt="Slack Icon" title="Join our Slack Community" />
</a>
</div>
</div>
</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>
<!-- 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/documentation_options.js"></script>
<script type="text/javascript" src="../../_static/doctools.js"></script>
<script type="text/javascript" src="../../_static/sphinx_highlight.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>