blob: dab29e9b4c095a0b9a3b9aa6543f16529cdb29a6 [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>Pin Wheel Modifications to “Blinky” on STM32F3 Discovery &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"/>
<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> /
Pin Wheel Modifications to “Blinky” on STM32F3 Discovery
<div class="sourcelink">
<a href="https://github.com/apache/mynewt-core/edit/master/docs/os/tutorials/pin-wheel-mods.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" >
Version: 1.10.0
</option>
<option value="/v1_9_0" >
Version: 1.9.0
</option>
<option value="/v1_8_0" selected="selected" >
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>
<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"><a class="reference internal" href="../../tutorials/tutorials.html">Tutorials</a></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_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.8.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="pin-wheel-modifications-to-blinky-on-stm32f3-discovery">
<h1>Pin Wheel Modifications to “Blinky” on STM32F3 Discovery<a class="headerlink" href="#pin-wheel-modifications-to-blinky-on-stm32f3-discovery" title="Permalink to this headline"></a></h1>
<div class="section" id="objective">
<h2>Objective<a class="headerlink" href="#objective" title="Permalink to this headline"></a></h2>
<p>Learn how to modify an existing app – the <a class="reference external" href="STM32F303.html">blinky</a> app
– to light all the LEDs on the STM32F3 Discovery board.</p>
</div>
<div class="section" id="what-you-need">
<h2>What you need<a class="headerlink" href="#what-you-need" title="Permalink to this headline"></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 and run the
<a class="reference external" href="STM32F303.html">blinky</a> app succesfully.</p></li>
</ul>
<p>Since you’ve already successfully created your blinky app project,
you’ll need to modify only one file, main.c, in order to get this app
working.</p>
<p>The main.c file resides in the apps/blinky/src directory in your project
folder so you can edit it with your favorite editor. You’ll make the
following changes:</p>
<p>Replace the line:</p>
<div class="highlight-c notranslate"><div class="highlight"><pre><span></span><span class="kt">int</span><span class="w"> </span><span class="n">g_led_pin</span><span class="p">;</span>
</pre></div>
</div>
<p>With the line:</p>
<div class="highlight-c notranslate"><div class="highlight"><pre><span></span><span class="kt">int</span><span class="w"> </span><span class="n">g_led_pins</span><span class="p">[</span><span class="mi">8</span><span class="p">]</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="p">{</span><span class="n">LED_BLINK_PIN_1</span><span class="p">,</span><span class="w"> </span><span class="n">LED_BLINK_PIN_2</span><span class="p">,</span><span class="w"> </span><span class="n">LED_BLINK_PIN_3</span><span class="p">,</span><span class="w"> </span><span class="n">LED_BLINK_PIN_4</span><span class="p">,</span><span class="w"> </span><span class="n">LED_BLINK_PIN_5</span><span class="p">,</span><span class="w"> </span><span class="n">LED_BLINK_PIN_6</span><span class="p">,</span><span class="w"> </span><span class="n">LED_BLINK_PIN_7</span><span class="p">,</span><span class="w"> </span><span class="n">LED_BLINK_PIN_8</span><span class="p">};</span>
</pre></div>
</div>
<p>So that you now have an array of all 8 LED Pins on the board.</p>
<p>Delete the line:</p>
<div class="highlight-c notranslate"><div class="highlight"><pre><span></span><span class="n">g_led_pin</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">LED_BLINK_PIN</span><span class="p">;</span>
</pre></div>
</div>
<p>And in its place, add the following lines to initialize all the
LED_PINS correctly:</p>
<div class="highlight-c notranslate"><div class="highlight"><pre><span></span><span class="kt">int</span><span class="w"> </span><span class="n">x</span><span class="p">;</span>
<span class="k">for</span><span class="p">(</span><span class="n">x</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">0</span><span class="p">;</span><span class="w"> </span><span class="n">x</span><span class="w"> </span><span class="o">&lt;</span><span class="w"> </span><span class="mi">8</span><span class="p">;</span><span class="w"> </span><span class="n">x</span><span class="o">++</span><span class="p">){</span>
<span class="w"> </span><span class="n">hal_gpio_init_out</span><span class="p">(</span><span class="n">g_led_pins</span><span class="p">[</span><span class="n">x</span><span class="p">],</span><span class="w"> </span><span class="mi">1</span><span class="p">);</span>
<span class="p">}</span>
<span class="kt">int</span><span class="w"> </span><span class="n">p</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">0</span><span class="p">;</span>
</pre></div>
</div>
<p>We’ll use that ‘p’ later. Next you’ll want to change the line:</p>
<div class="highlight-c notranslate"><div class="highlight"><pre><span></span><span class="n">os_time_delay</span><span class="p">(</span><span class="mi">1000</span><span class="p">);</span>
</pre></div>
</div>
<p>to a shorter time in order to make it a little more interesting. A full
1 second delay doesn’t look great, so try 100 for starters and then you
can adjust it to your liking.</p>
<p>Finally, change the line:</p>
<div class="highlight-c notranslate"><div class="highlight"><pre><span></span><span class="n">hal_gpio_toggle</span><span class="p">(</span><span class="n">g_led_pin</span><span class="p">);</span>
</pre></div>
</div>
<p>to look like this:</p>
<div class="highlight-c notranslate"><div class="highlight"><pre><span></span><span class="n">hal_gpio_toggle</span><span class="p">(</span><span class="n">g_led_pins</span><span class="p">[</span><span class="n">p</span><span class="o">++</span><span class="p">]);</span>
<span class="n">p</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="p">(</span><span class="n">p</span><span class="w"> </span><span class="o">&gt;</span><span class="w"> </span><span class="mi">7</span><span class="p">)</span><span class="w"> </span><span class="o">?</span><span class="w"> </span><span class="mi">0</span><span class="w"> </span><span class="o">:</span><span class="w"> </span><span class="n">p</span><span class="p">;</span>
</pre></div>
</div>
</div>
<div class="section" id="build-the-target-and-executables-and-download-the-images">
<h2>Build the target and executables and download the images<a class="headerlink" href="#build-the-target-and-executables-and-download-the-images" title="Permalink to this headline"></a></h2>
<p>Run the same commands you used on the blinky app to build and load this
one:</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>
<span class="gp">$ </span>newt<span class="w"> </span>-v<span class="w"> </span>load<span class="w"> </span>stmf3_boot
<span class="gp">$ </span>newt<span class="w"> </span>-v<span class="w"> </span>load<span class="w"> </span>stmf3_blinky
</pre></div>
</div>
</div>
<div class="section" id="watch-the-leds-go-round-and-round">
<h2>Watch the LEDs go round and round<a class="headerlink" href="#watch-the-leds-go-round-and-round" title="Permalink to this headline"></a></h2>
<p>The colored LEDs should now all light up in succession, and once they’re
all lit, they should then go off in the same order. This should repeat
continuously.</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.html">Community
Page</a>.</p>
<p>Keep on hacking and blinking!</p>
</div>
</div>
</div>
</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>