<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>マイコン周辺機能（ペリフェラル）とは | 即戦力モノづくり!エンジニアへの道標</title>
	<atom:link href="https://depfields.com/category/learning/embedded/peripheral/feed/" rel="self" type="application/rss+xml" />
	<link>https://depfields.com</link>
	<description>組み込み（マイコン）スキルを楽しんで学びながら身につけて短期間で効率よく自由自在に扱えるようになりたいと思いませんか？</description>
	<lastBuildDate>Mon, 11 Apr 2022 07:20:42 +0000</lastBuildDate>
	<language>ja</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=6.3</generator>

<image>
	<url>https://depfields.com/wp-content/uploads/2020/07/cropped-favicon-1-32x32.png</url>
	<title>マイコン周辺機能（ペリフェラル）とは | 即戦力モノづくり!エンジニアへの道標</title>
	<link>https://depfields.com</link>
	<width>32</width>
	<height>32</height>
</image> 
	<item>
		<title>ARMマイコンSTM32レジスタマップの見方【上級者向け】</title>
		<link>https://depfields.com/register-map/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=register-map</link>
		
		<dc:creator><![CDATA[めかのとろ]]></dc:creator>
		<pubDate>Wed, 03 Jun 2020 07:27:22 +0000</pubDate>
				<category><![CDATA[マイコン周辺機能（ペリフェラル）とは]]></category>
		<category><![CDATA[STM32]]></category>
		<guid isPermaLink="false">https://depfields.com/?page_id=1980</guid>

					<description><![CDATA[<p>レジスタマップ 次にGPIO制御レジスタの内容を確認しますと、下記7種類の制御レジスタがあります(x=A…G)。 ポート設定レジスタ下位（GPIOx_CRL）ポート０から7 ポート設定レジスタ上位（GPIOx_CRH）ポ [&#8230;]</p>
<p>The post <a href="https://depfields.com/register-map/">ARMマイコンSTM32レジスタマップの見方【上級者向け】</a> first appeared on <a href="https://depfields.com">即戦力モノづくり!エンジニアへの道標</a>.</p>]]></description>
										<content:encoded><![CDATA[<div class="veu_autoEyeCatchBox"><img fetchpriority="high" width="640" height="426" src="https://depfields.com/wp-content/uploads/2020/06/board-2440249_640.jpg" class="attachment-large size-large wp-post-image" alt="" decoding="async" srcset="https://depfields.com/wp-content/uploads/2020/06/board-2440249_640.jpg 640w, https://depfields.com/wp-content/uploads/2020/06/board-2440249_640-300x200.jpg 300w" sizes="(max-width: 640px) 100vw, 640px" /></div>




<h2 class="wp-block-heading">レジスタマップ</h2>



<div class="wp-block-vk-blocks-balloon vk_balloon vk_balloon-position-left vk_balloon-type-speech vk_balloon-animation-none"><div class="vk_balloon_icon"><figure><img decoding="async" class="vk_balloon_icon_image vk_balloon_icon_image-type-normal " src="https://depfields.com/wp-content/uploads/2020/05/instructor.jpg" alt=""/><figcaption class="vk_balloon_icon_name">めかのとろ</figcaption></figure></div><div class="vk_balloon_content_outer"><div class="vk_balloon_content  "><span class="vk_balloon_content_before "></span><span class="vk_balloon_content_after "></span>
<p>ペリフェラルライブラリだけを使用する場合はレジスタマップを意識する必要はありませんが、マイコンのレジスタがライブラリ内でどのように操作されているか理解することはマイコンのスキルアップにつながります。</p>
</div></div></div>



<div class="wp-block-vk-blocks-balloon vk_balloon vk_balloon-position-left vk_balloon-type-speech vk_balloon-animation-none"><div class="vk_balloon_icon"><figure><img decoding="async" class="vk_balloon_icon_image vk_balloon_icon_image-type-normal " src="https://depfields.com/wp-content/uploads/2020/05/instructor.jpg" alt=""/><figcaption class="vk_balloon_icon_name">めかのとろ</figcaption></figure></div><div class="vk_balloon_content_outer"><div class="vk_balloon_content  "><span class="vk_balloon_content_before "></span><span class="vk_balloon_content_after "></span>
<p>見方を変えると、ライブラリを使用しないでレジスタを操作できるようなレベルになると、各マイコンメーカーの提供するライブラリやツールに頼ることなしに開発ができるので最強です。</p>
</div></div></div>



<div class="wp-block-vk-blocks-balloon vk_balloon vk_balloon-position-left vk_balloon-type-speech vk_balloon-animation-none"><div class="vk_balloon_icon"><figure><img decoding="async" class="vk_balloon_icon_image vk_balloon_icon_image-type-normal " src="https://depfields.com/wp-content/uploads/2020/05/instructor.jpg" alt=""/><figcaption class="vk_balloon_icon_name">めかのとろ</figcaption></figure></div><div class="vk_balloon_content_outer"><div class="vk_balloon_content  "><span class="vk_balloon_content_before "></span><span class="vk_balloon_content_after "></span>
<p>ここではペリフェラルライブラリがどのようにペリフェラルの制御レジスタを操作しているかを見てみましょう。ペリフェラルライブラリを<strong>ブラックボックス</strong>として仕組みを理解しなくてもマイコン開発は可能です。しかもレジスタの操作を理解することは入門者とくにプログラミングにあまり慣れていない人にはとても難解と思われるのでとばしてもらってもかまいません。</p>
</div></div></div>



<div class="wp-block-vk-blocks-balloon vk_balloon vk_balloon-position-left vk_balloon-type-speech vk_balloon-animation-none"><div class="vk_balloon_icon"><figure><img decoding="async" class="vk_balloon_icon_image vk_balloon_icon_image-type-normal " src="https://depfields.com/wp-content/uploads/2020/05/instructor.jpg" alt=""/><figcaption class="vk_balloon_icon_name">めかのとろ</figcaption></figure></div><div class="vk_balloon_content_outer"><div class="vk_balloon_content  "><span class="vk_balloon_content_before "></span><span class="vk_balloon_content_after "></span>
<p>マイコン上級者ともなりメーカー作成のライブラリに頼らず直接レジスタを操作できるとプログラムコードも小さく処理速度を向上させたアプリケーションを作成できるようになります。必須のスキルではありませんが必要に応じて使えるようになればより応用力がつき強力なスキルとなるでしょう。</p>
</div></div></div>



<div class="wp-block-vk-blocks-balloon vk_balloon vk_balloon-position-left vk_balloon-type-speech vk_balloon-animation-none"><div class="vk_balloon_icon"><figure><img decoding="async" class="vk_balloon_icon_image vk_balloon_icon_image-type-normal " src="https://depfields.com/wp-content/uploads/2020/05/instructor.jpg" alt=""/><figcaption class="vk_balloon_icon_name">めかのとろ</figcaption></figure></div><div class="vk_balloon_content_outer"><div class="vk_balloon_content  "><span class="vk_balloon_content_before "></span><span class="vk_balloon_content_after "></span>
<p>前章において<strong><span data-color="#fffd6b" style="background: linear-gradient(transparent 60%,rgba(255, 253, 107, 0.7) 0);" class="vk_highlighter">汎用入出力GPIOA_1ピン</span>を</strong>ペリフェラルライブラリにより<strong><span data-color="#fffd6b" style="background: linear-gradient(transparent 60%,rgba(255, 253, 107, 0.7) 0);" class="vk_highlighter">プッシュプル出力に設定</span></strong>した仕組みをたどっていきましょう。</p>
</div></div></div>



<div class="wp-block-vk-blocks-balloon vk_balloon vk_balloon-position-left vk_balloon-type-speech vk_balloon-animation-none"><div class="vk_balloon_icon"><figure><img decoding="async" class="vk_balloon_icon_image vk_balloon_icon_image-type-normal " src="https://depfields.com/wp-content/uploads/2020/05/instructor.jpg" alt=""/><figcaption class="vk_balloon_icon_name">めかのとろ</figcaption></figure></div><div class="vk_balloon_content_outer"><div class="vk_balloon_content  "><span class="vk_balloon_content_before "></span><span class="vk_balloon_content_after "></span>
<p>ペリフェラルのメモリマップを示します。この中でGPIOポートAのメモリ上のベースアドレスは32bit表記の0x40010800です。</p>
</div></div></div>



<figure class="wp-block-image size-large is-resized"><a href="https://depfields.com/wp-content/uploads/2020/06/メモリマップ.jpg"><img decoding="async" src="https://depfields.com/wp-content/uploads/2020/06/メモリマップ.jpg" alt="" class="wp-image-2080" width="421" height="472" srcset="https://depfields.com/wp-content/uploads/2020/06/メモリマップ.jpg 430w, https://depfields.com/wp-content/uploads/2020/06/メモリマップ-268x300.jpg 268w" sizes="(max-width: 421px) 100vw, 421px" /></a><figcaption>メモリマップ</figcaption></figure>



<p>次にGPIO制御レジスタの内容を確認しますと、下記7種類の制御レジスタがあります(x=A…G)。</p>



<ul class="is-style-vk-numbered-circle-mark"><li>ポート設定レジスタ下位（GPIOx_CRL）<strong>ポート０から7</strong></li><li>ポート設定レジスタ上位（GPIOx_CRH）<strong>ポート8から15</strong>　</li><li>ポート入力データレジスタ（GPIOx_IDR）</li><li>ポート出力データレジスタ（GPIOx_ODR）</li><li>ポートビットセット/リセットレジスタ（GPIOx_BSRR）</li><li>ポートビットリセットレジスタ（GPIOx_BRR）</li><li>ポート設定ロックレジスタ（GPIOx_LCKR）</li></ul>



<p class="vk_block-margin-sm--margin-top vk_block-margin-sm--margin-bottom">ポート仕様を設定するレジスタはGPIOA_1ピンの場合は下位（0 – 7）ですので<strong><span data-color="#fffd6b" style="background: linear-gradient(transparent 60%,rgba(255, 253, 107, 0.7) 0);" class="vk_highlighter">制御レジスタGPIOA_CRLを操作して設定</span></strong>します。<strong>レジスタGPIOA_CRLのアドレスはオフセットが0x00なので0x40010800</strong>です。</p>



<figure class="wp-block-image size-large is-resized"><a href="https://depfields.com/wp-content/uploads/2020/06/gpio-control-register.jpg"><img decoding="async" src="https://depfields.com/wp-content/uploads/2020/06/gpio-control-register.jpg" alt="" class="wp-image-2082" width="630" height="347" srcset="https://depfields.com/wp-content/uploads/2020/06/gpio-control-register.jpg 780w, https://depfields.com/wp-content/uploads/2020/06/gpio-control-register-300x165.jpg 300w, https://depfields.com/wp-content/uploads/2020/06/gpio-control-register-768x423.jpg 768w" sizes="(max-width: 630px) 100vw, 630px" /></a><figcaption>GPIOレジスタ</figcaption></figure>



<figure class="wp-block-image size-large is-resized"><a href="https://depfields.com/wp-content/uploads/2020/06/port-setting-register.jpg"><img decoding="async" src="https://depfields.com/wp-content/uploads/2020/06/port-setting-register.jpg" alt="" class="wp-image-2085" width="550" height="481"/></a><figcaption>ポート設定レジスタ</figcaption></figure>



<h2 class="wp-block-heading">ライブラリを使った本体プログラム内での記述</h2>



<div class="wp-block-vk-blocks-balloon vk_balloon vk_balloon-position-left vk_balloon-type-speech vk_balloon-animation-none"><div class="vk_balloon_icon"><figure><img decoding="async" class="vk_balloon_icon_image vk_balloon_icon_image-type-normal " src="https://depfields.com/wp-content/uploads/2020/05/instructor.jpg" alt=""/><figcaption class="vk_balloon_icon_name">めかのとろ</figcaption></figure></div><div class="vk_balloon_content_outer"><div class="vk_balloon_content  "><span class="vk_balloon_content_before "></span><span class="vk_balloon_content_after "></span>
<p>実際のプログラムでライブラリがどのような機能をしているかを確認していきましょう。</p>
</div></div></div>



<figure class="wp-block-image size-full"><a href="https://depfields.com/wp-content/uploads/2020/06/gpio-initialize.jpg"><img decoding="async" width="703" height="273" src="https://depfields.com/wp-content/uploads/2020/06/gpio-initialize.jpg" alt="" class="wp-image-11452" srcset="https://depfields.com/wp-content/uploads/2020/06/gpio-initialize.jpg 703w, https://depfields.com/wp-content/uploads/2020/06/gpio-initialize-300x117.jpg 300w" sizes="(max-width: 703px) 100vw, 703px" /></a><figcaption>プログラム内でのライブラリによる初期化設定</figcaption></figure>



<div class="wp-block-vk-blocks-balloon vk_balloon vk_balloon-position-left vk_balloon-type-speech vk_balloon-animation-none"><div class="vk_balloon_icon"><figure><img decoding="async" class="vk_balloon_icon_image vk_balloon_icon_image-type-normal " src="https://depfields.com/wp-content/uploads/2020/05/instructor.jpg" alt=""/><figcaption class="vk_balloon_icon_name">めかのとろ</figcaption></figure></div><div class="vk_balloon_content_outer"><div class="vk_balloon_content  "><span class="vk_balloon_content_before "></span><span class="vk_balloon_content_after "></span>
<p>構造体でまとめられている部分の詳細を確認してみましょう。パラメータは分類ごとに構造体によりまとめられています。</p>
</div></div></div>



<figure class="wp-block-image size-large"><a href="https://depfields.com/wp-content/uploads/2020/06/details-of-Structure-.jpg"><img decoding="async" width="574" height="711" src="https://depfields.com/wp-content/uploads/2020/06/details-of-Structure-.jpg" alt="" class="wp-image-2101" srcset="https://depfields.com/wp-content/uploads/2020/06/details-of-Structure-.jpg 574w, https://depfields.com/wp-content/uploads/2020/06/details-of-Structure--242x300.jpg 242w" sizes="(max-width: 574px) 100vw, 574px" /></a></figure>



<h2 class="wp-block-heading">初期化関数 xx_Init()について</h2>



<div class="wp-block-vk-blocks-balloon vk_balloon vk_balloon-position-left vk_balloon-type-speech vk_balloon-animation-none"><div class="vk_balloon_icon"><figure><img decoding="async" class="vk_balloon_icon_image vk_balloon_icon_image-type-normal " src="https://depfields.com/wp-content/uploads/2020/05/instructor.jpg" alt=""/><figcaption class="vk_balloon_icon_name">めかのとろ</figcaption></figure></div><div class="vk_balloon_content_outer"><div class="vk_balloon_content  "><span class="vk_balloon_content_before "></span><span class="vk_balloon_content_after "></span>
<p>それではレジスタアドレスと設定パラメータが<strong>初期化関数GPIO_Init(GPIOx, &amp;GPIO_InitStructure)</strong>でどのような処理が行われてレジスタを操作しているかを解説してみます。</p>
</div></div></div>



<div class="wp-block-vk-blocks-balloon vk_balloon vk_balloon-position-left vk_balloon-type-speech vk_balloon-animation-none"><div class="vk_balloon_icon"><figure><img decoding="async" class="vk_balloon_icon_image vk_balloon_icon_image-type-normal " src="https://depfields.com/wp-content/uploads/2020/05/instructor.jpg" alt=""/><figcaption class="vk_balloon_icon_name">めかのとろ</figcaption></figure></div><div class="vk_balloon_content_outer"><div class="vk_balloon_content  "><span class="vk_balloon_content_before "></span><span class="vk_balloon_content_after "></span>
<p>実際のプログラムはGPIOライブラリ本体<strong><span data-color="#fffd6b" style="background: linear-gradient(transparent 60%,rgba(255, 253, 107, 0.7) 0);" class="vk_highlighter">stm32f10x_gpio.c</span></strong>内の<strong><span data-color="#fffd6b" style="background: linear-gradient(transparent 60%,rgba(255, 253, 107, 0.7) 0);" class="vk_highlighter">GPIO_init()</span></strong>関数の部分ですので余力のあるひとは確認してみてください。</p>
</div></div></div>



<ol start="1" class="vk_block-margin-sm--margin-top vk_block-margin-sm--margin-bottom"><li>構造体メンバGPIO_Modeの下位4ビット分にマスクをかけ（&amp;0x0F）, currentmodeに値を代入。<br>次に上位1ビット目にマスクをかけ（＆0x10）入力か出力かの判別。<br>出力である場合は下位2ビット分にGPIO_Speed設定値(0bxx)をセット。</li></ol>



<figure class="wp-block-image size-large is-resized"><a href="https://depfields.com/wp-content/uploads/2020/06/table.jpg"><img decoding="async" src="https://depfields.com/wp-content/uploads/2020/06/table.jpg" alt="" class="wp-image-2091" width="570" height="223" srcset="https://depfields.com/wp-content/uploads/2020/06/table.jpg 660w, https://depfields.com/wp-content/uploads/2020/06/table-300x117.jpg 300w" sizes="(max-width: 570px) 100vw, 570px" /></a></figure>



<ol start="2" class="vk_block-margin-sm--margin-top vk_block-margin-sm--margin-bottom"><li>GPIO_CRLレジスタ（下位8ビット） pinすべてが0でないことを調べ(すべてが0の場合はGPIOが無効であることを意味するため)、各GPIOピンの0から7ピンに割り当てた4ビットにCNFn(2ビット)とMODEn（2ビット）の設定値をレジスタに書き込み、GPIOポートの各ピンの使用方法を設定する。(nは0～7のピン番)<br>8ピン全部に同じ処理を繰り返す。</li></ol>



<ol start="3" class="vk_block-margin-sm--margin-top vk_block-margin-sm--margin-bottom"><li>設定されたモードがGPIO_Mode_IPDの場合GPIOx_BRR（GPIOx）ビットリセット・レジスタ）の該当ビット1にセットする（該当ビットリセット：入力プルダウン抵抗設定）。<br>設定されたモードがGPIO_Mode_IPUの場合GPIOx_BSRR（GPIOxビットセット/リセット・レジスタ）のセットの該当ビット1にする（該当ビットセット：入力プルアップ抵抗設定）。<br>これも8ピン全部に同じ処理を繰り返し、GPIOx_CRL（下位のGPIOxコンフィグレーション・レジスタ）に書き込む。</li></ol>



<ol start="4" class="vk_block-margin-sm--margin-top vk_block-margin-sm--margin-bottom"><li>同様にGPIOx_CRH （上位のGPIOxコンフィグレーション・レジスタ）の処理を行い、関数GPIO_Init(GPIOA, &amp;GPIO_InitStructure);の処理を終える。そのあとGPIOBからGPIOEポートについて同様な処理を行う。</li></ol>



<div class="wp-block-vk-blocks-spacer vk_spacer vk_spacer-type-height"><div class="vk_block-margin-md--height"></div></div>



<div class="wp-block-vk-blocks-balloon vk_balloon vk_balloon-position-left vk_balloon-type-speech vk_balloon-animation-none"><div class="vk_balloon_icon"><figure><img decoding="async" class="vk_balloon_icon_image vk_balloon_icon_image-type-normal " src="https://depfields.com/wp-content/uploads/2020/05/instructor.jpg" alt=""/><figcaption class="vk_balloon_icon_name">めかのとろ</figcaption></figure></div><div class="vk_balloon_content_outer"><div class="vk_balloon_content  "><span class="vk_balloon_content_before "></span><span class="vk_balloon_content_after "></span>
<p>以上が初期化関数GPIO_Init(GPIOx, &amp;GPIO_InitStructure)で行われる処理です。</p>
</div></div></div>



<div class="wp-block-vk-blocks-balloon vk_balloon vk_balloon-position-left vk_balloon-type-speech vk_balloon-animation-none"><div class="vk_balloon_icon"><figure><img decoding="async" class="vk_balloon_icon_image vk_balloon_icon_image-type-normal " src="https://depfields.com/wp-content/uploads/2020/05/instructor.jpg" alt=""/><figcaption class="vk_balloon_icon_name">めかのとろ</figcaption></figure></div><div class="vk_balloon_content_outer"><div class="vk_balloon_content  "><span class="vk_balloon_content_before "></span><span class="vk_balloon_content_after "></span>
<p>ペリフェラルの初期設定ではGPIOに限らず<strong><span data-color="#fffd6b" style="background: linear-gradient(transparent 60%,rgba(255, 253, 107, 0.7) 0);" class="vk_highlighter">該当する制御レジスタのアドレスを特定して、設定したいパラメータを書き込むこと</span></strong>をペリフェラルライブラリ（デバイスドライバ）を使ったり、レジスタに直接書き込んだりして設定するわけです。</p>
</div></div></div>



<div class="wp-block-vk-blocks-balloon vk_balloon vk_balloon-position-left vk_balloon-type-speech vk_balloon-animation-none"><div class="vk_balloon_icon"><figure><img decoding="async" class="vk_balloon_icon_image vk_balloon_icon_image-type-normal " src="https://depfields.com/wp-content/uploads/2020/05/instructor.jpg" alt=""/><figcaption class="vk_balloon_icon_name">めかのとろ</figcaption></figure></div><div class="vk_balloon_content_outer"><div class="vk_balloon_content  "><span class="vk_balloon_content_before "></span><span class="vk_balloon_content_after "></span>
<p>ペリフェラルライブラリは制御レジスタを知らなくても簡単に使いこなせてしまう<strong><span data-color="#fffd6b" style="background: linear-gradient(transparent 60%,rgba(255, 253, 107, 0.7) 0);" class="vk_highlighter">便利な反面</span></strong>、<strong><span data-color="#fffd6b" style="background: linear-gradient(transparent 60%,rgba(255, 253, 107, 0.7) 0);" class="vk_highlighter">冗長な部分もあります</span></strong>ので、プログラムコードサイズを小さくし、より処理速度の向上を追求する場合には直接レジスタを操作する必要がでてくる場合があります。</p>
</div></div></div>



<div class="wp-block-vk-blocks-balloon vk_balloon vk_balloon-position-left vk_balloon-type-speech vk_balloon-animation-none"><div class="vk_balloon_icon"><figure><img decoding="async" class="vk_balloon_icon_image vk_balloon_icon_image-type-normal " src="https://depfields.com/wp-content/uploads/2020/05/instructor.jpg" alt=""/><figcaption class="vk_balloon_icon_name">めかのとろ</figcaption></figure></div><div class="vk_balloon_content_outer"><div class="vk_balloon_content  "><span class="vk_balloon_content_before "></span><span class="vk_balloon_content_after "></span>
<p>処理速度もプログラム格納のメモリサイズも十分な高性能なマイコンを使うのであればより便利なペリフェラルライブラリだけを使って開発はアプリケーションに集中するのもいいかもしれません。</p>
</div></div></div>



<div class="wp-block-vk-blocks-spacer vk_spacer vk_spacer-type-margin-top"><div class="vk_block-margin-md--margin-top"></div></div>



<div class="linkcard"><div class="lkc-external-wrap"><a class="lkc-link no_icon" href="https://en.depfields.com/register-map/" target="_blank" rel="external noopener"><div class="lkc-card"><div class="lkc-info"><img class="lkc-favicon" src="https://www.google.com/s2/favicons?domain=en.depfields.com" alt="" width=16 height=16 /><div class="lkc-domain">Most Powerful Bible to Become an Embedded Engineer</div></div><div class="lkc-content"><figure class="lkc-thumbnail"><img class="lkc-thumbnail-img" src="//depfields.com/wp-content/uploads/pz-linkcard/cache/bac2817e1ca146c2d04aa8c17d0af9d324d9c3b331332ee2c6abb499778c15c4.jpeg" alt="" /></figure><div class="lkc-title"><div class="lkc-title-text">How to read the ARM STM32 register map [for advanced users] | Most Powerful B...</div></div><div class="lkc-url">https://en.depfields.com/register-map/</div><div class="lkc-excerpt">Register mapIf you use only the peripheral library, you do not need to be aware of the register map, but understanding how the MCU&#039;s registers are operated in the library will improve your MCU skills.From a different perspec</div></div><div class="clear"></div></div></a></div></div><p>The post <a href="https://depfields.com/register-map/">ARMマイコンSTM32レジスタマップの見方【上級者向け】</a> first appeared on <a href="https://depfields.com">即戦力モノづくり!エンジニアへの道標</a>.</p>]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>ARMマイコンSTM32F1シリーズのペリフェラルライブラリ</title>
		<link>https://depfields.com/library/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=library</link>
		
		<dc:creator><![CDATA[めかのとろ]]></dc:creator>
		<pubDate>Tue, 02 Jun 2020 16:19:28 +0000</pubDate>
				<category><![CDATA[マイコン周辺機能（ペリフェラル）とは]]></category>
		<category><![CDATA[STM32]]></category>
		<guid isPermaLink="false">https://depfields.com/?page_id=1978</guid>

					<description><![CDATA[<p>マイコンのペリフェラル ポイント 各ペリフェラルの機能をON/OFFといってもスイッチで行うわけではなく、クロックの供給の有無により機能させるかさせないかを設定します。クロックが供給されなければほとんどのペリフェラル（周 [&#8230;]</p>
<p>The post <a href="https://depfields.com/library/">ARMマイコンSTM32F1シリーズのペリフェラルライブラリ</a> first appeared on <a href="https://depfields.com">即戦力モノづくり!エンジニアへの道標</a>.</p>]]></description>
										<content:encoded><![CDATA[<div class="veu_autoEyeCatchBox"><img width="640" height="591" src="https://depfields.com/wp-content/uploads/2020/06/books-2596809_640.jpg" class="attachment-large size-large wp-post-image" alt="" decoding="async" srcset="https://depfields.com/wp-content/uploads/2020/06/books-2596809_640.jpg 640w, https://depfields.com/wp-content/uploads/2020/06/books-2596809_640-300x277.jpg 300w" sizes="(max-width: 640px) 100vw, 640px" /></div>




<h2 class="wp-block-heading">マイコンのペリフェラル</h2>



<div class="wp-block-vk-blocks-balloon vk_balloon vk_balloon-position-left vk_balloon-type-speech vk_balloon-animation-none"><div class="vk_balloon_icon"><figure><img decoding="async" class="vk_balloon_icon_image vk_balloon_icon_image-type-normal " src="https://depfields.com/wp-content/uploads/2020/05/instructor.jpg" alt=""/><figcaption class="vk_balloon_icon_name">めかのとろ</figcaption></figure></div><div class="vk_balloon_content_outer"><div class="vk_balloon_content  "><span class="vk_balloon_content_before "></span><span class="vk_balloon_content_after "></span>
<p>仕様書にある<strong><span data-color="#fffd6b" style="background: linear-gradient(transparent 60%,rgba(255, 253, 107, 0.7) 0);" class="vk_highlighter">周辺機能（ペリフェラル）の制御レジスタを簡単に設定</span>できるようなドライバ</strong>が<strong><span data-color="#fffd6b" style="background: linear-gradient(transparent 60%,rgba(255, 253, 107, 0.7) 0);" class="vk_highlighter">ペリフェラルライブラリ</span></strong>です。これ以降、実際に当サイトでとりあげるマイコンをもとに具体的な解説をすすめていきます。以後<strong>周辺機能は<span data-color="#fffd6b" style="background: linear-gradient(transparent 60%,rgba(255, 253, 107, 0.7) 0);" class="vk_highlighter">ペリフェラル</span>と呼びます</strong>。</p>
</div></div></div>



<div class="wp-block-vk-blocks-balloon vk_balloon vk_balloon-position-left vk_balloon-type-speech vk_balloon-animation-none"><div class="vk_balloon_icon"><figure><img decoding="async" class="vk_balloon_icon_image vk_balloon_icon_image-type-normal " src="https://depfields.com/wp-content/uploads/2020/05/instructor.jpg" alt=""/><figcaption class="vk_balloon_icon_name">めかのとろ</figcaption></figure></div><div class="vk_balloon_content_outer"><div class="vk_balloon_content  "><span class="vk_balloon_content_before "></span><span class="vk_balloon_content_after "></span>
<p>ターゲットマイコンのモデルタイプはARM　Cortex-M3マイコンのSTM32F103RBです。STM32F103RBマイコンの仕様表を示します。このマイコンはシリーズのミディアムパフォーマンスラインモデルです。</p>
</div></div></div>



<figure class="wp-block-image size-large is-resized"><a href="https://depfields.com/wp-content/uploads/2020/06/specification_rb.jpg"><img decoding="async" src="https://depfields.com/wp-content/uploads/2020/06/specification_rb.jpg" alt="" class="wp-image-6595" width="546" height="626" srcset="https://depfields.com/wp-content/uploads/2020/06/specification_rb.jpg 478w, https://depfields.com/wp-content/uploads/2020/06/specification_rb-262x300.jpg 262w" sizes="(max-width: 546px) 100vw, 546px" /></a><figcaption>STM32F103RB仕様</figcaption></figure>



<div class="wp-block-vk-blocks-balloon vk_balloon vk_balloon-position-left vk_balloon-type-speech vk_balloon-animation-none"><div class="vk_balloon_icon"><figure><img decoding="async" class="vk_balloon_icon_image vk_balloon_icon_image-type-normal " src="https://depfields.com/wp-content/uploads/2020/05/instructor.jpg" alt=""/><figcaption class="vk_balloon_icon_name">めかのとろ</figcaption></figure></div><div class="vk_balloon_content_outer"><div class="vk_balloon_content  "><span class="vk_balloon_content_before "></span><span class="vk_balloon_content_after "></span>
<p>STM32F103RBマイコン内部は複雑ですが、簡略化すると下図のブロック図のようになります。</p>
</div></div></div>



<figure class="wp-block-image size-large is-resized"><a href="https://depfields.com/wp-content/uploads/2020/06/block_diagram_rb.jpg"><img decoding="async" src="https://depfields.com/wp-content/uploads/2020/06/block_diagram_rb.jpg" alt="" class="wp-image-6601" width="531" height="487"/></a><figcaption>簡易ブロック図</figcaption></figure>



<div class="wp-block-vk-blocks-balloon vk_balloon vk_balloon-position-left vk_balloon-type-speech vk_balloon-animation-none"><div class="vk_balloon_icon"><figure><img decoding="async" class="vk_balloon_icon_image vk_balloon_icon_image-type-normal " src="https://depfields.com/wp-content/uploads/2020/05/instructor.jpg" alt=""/><figcaption class="vk_balloon_icon_name">めかのとろ</figcaption></figure></div><div class="vk_balloon_content_outer"><div class="vk_balloon_content  "><span class="vk_balloon_content_before "></span><span class="vk_balloon_content_after "></span>
<p>CPUとメモリ類はAHB（高速転送バス）で接続されており、一方ペリフェラルはAPB（高機能周辺回路バス）で接続されています。APB（Advanced Peripheral Bus）はAPB1とAPB2の2つに分けられており、<strong><span data-color="#fffd6b" style="background: linear-gradient(transparent 60%,rgba(255, 253, 107, 0.7) 0);" class="vk_highlighter">APB1には低速なペリフェラル</span></strong>が接続されており、<strong><span data-color="#fffd6b" style="background: linear-gradient(transparent 60%,rgba(255, 253, 107, 0.7) 0);" class="vk_highlighter">APB2には高速なペリフェラル</span></strong>が接続されています。</p>
</div></div></div>



<div class="wp-block-vk-blocks-balloon vk_balloon vk_balloon-position-left vk_balloon-type-speech vk_balloon-animation-none"><div class="vk_balloon_icon"><figure><img decoding="async" class="vk_balloon_icon_image vk_balloon_icon_image-type-normal " src="https://depfields.com/wp-content/uploads/2020/05/instructor.jpg" alt=""/><figcaption class="vk_balloon_icon_name">めかのとろ</figcaption></figure></div><div class="vk_balloon_content_outer"><div class="vk_balloon_content  "><span class="vk_balloon_content_before "></span><span class="vk_balloon_content_after "></span>
<p>ペリフェラルは使用する機能だけ選択してONにし、<strong><span data-color="#fffd6b" style="background: linear-gradient(transparent 60%,rgba(255, 253, 107, 0.7) 0);" class="vk_highlighter">使用しない機能はOFFにすることで消費電力を押さえることができます</span></strong>。</p>
</div></div></div>



<div class="wp-block-vk-blocks-balloon vk_balloon vk_balloon-position-left vk_balloon-type-speech vk_balloon-animation-none"><div class="vk_balloon_icon"><figure><img decoding="async" class="vk_balloon_icon_image vk_balloon_icon_image-type-normal " src="https://depfields.com/wp-content/uploads/2020/05/instructor.jpg" alt=""/><figcaption class="vk_balloon_icon_name">めかのとろ</figcaption></figure></div><div class="vk_balloon_content_outer"><div class="vk_balloon_content  "><span class="vk_balloon_content_before "></span><span class="vk_balloon_content_after "></span>
<p>ピン配置を下図に示します。図の見方ですが、左下PA1（15）のピンはGPIOのポートAの1番目、つまりGPIOA_1を意味します。PA1のピンには汎用入出力以外にも<strong><span data-color="#fffd6b" style="background: linear-gradient(transparent 60%,rgba(255, 253, 107, 0.7) 0);" class="vk_highlighter">複数の機能を共有</span></strong>しています。設定の仕方は後ほど詳しく説明します。</p>
</div></div></div>



<figure class="wp-block-image size-large is-resized"><a href="https://depfields.com/wp-content/uploads/2020/06/STM32F103RBピン配置.jpg"><img decoding="async" src="https://depfields.com/wp-content/uploads/2020/06/STM32F103RBピン配置.jpg" alt="" class="wp-image-6597" width="485" height="360" srcset="https://depfields.com/wp-content/uploads/2020/06/STM32F103RBピン配置.jpg 434w, https://depfields.com/wp-content/uploads/2020/06/STM32F103RBピン配置-300x223.jpg 300w" sizes="(max-width: 485px) 100vw, 485px" /></a><figcaption>ピン配置</figcaption></figure>



<figure class="wp-block-image size-large is-resized"><a href="https://depfields.com/wp-content/uploads/2020/06/multiple_functions_rb.jpg"><img decoding="async" src="https://depfields.com/wp-content/uploads/2020/06/multiple_functions_rb.png" alt="" class="wp-image-9942" width="574" height="430" srcset="https://depfields.com/wp-content/uploads/2020/06/multiple_functions_rb.png 582w, https://depfields.com/wp-content/uploads/2020/06/multiple_functions_rb-300x225.png 300w" sizes="(max-width: 574px) 100vw, 574px" /></a><figcaption>  複数の機能 </figcaption></figure>



<div class="wp-block-vk-blocks-balloon vk_balloon vk_balloon-position-left vk_balloon-type-speech vk_balloon-animation-none"><div class="vk_balloon_icon"><figure><img decoding="async" class="vk_balloon_icon_image vk_balloon_icon_image-type-normal " src="https://depfields.com/wp-content/uploads/2020/05/instructor.jpg" alt=""/><figcaption class="vk_balloon_icon_name">めかのとろ</figcaption></figure></div><div class="vk_balloon_content_outer"><div class="vk_balloon_content  "><span class="vk_balloon_content_before "></span><span class="vk_balloon_content_after "></span>
<p>ARMマイコンが性能の割に消費電力が低いのは使っていない部分をきめ細かくOFFできるからです。<br><strong><span data-color="#fffd6b" style="background: linear-gradient(transparent 60%,rgba(255, 253, 107, 0.7) 0);" class="vk_highlighter">各ペリフェラルは個々にON/OFFの切り替え設定ができます</span></strong>。これは自動で行われるのでなく<strong><span data-color="#fffd6b" style="background: linear-gradient(transparent 60%,rgba(255, 253, 107, 0.7) 0);" class="vk_highlighter">プログラム作成時に機能選択します</span></strong>。&nbsp;</p>
</div></div></div>



<div style="display: inline-block; background: #191970; padding: 5px 10px; color: #ffffff; border-radius: 5px 5px 0px 0px;"><strong>ポイント</strong></div>
<div style="background: #ffffea; border-radius: 0px 10px 10px 10px; padding: 10px; border: 3px solid #191970;">
<p>各ペリフェラルの機能をON/OFFといってもスイッチで行うわけではなく、<strong><span class="vk_highlighter" style="background: linear-gradient(transparent 60%,rgba(255, 253, 107, 0.7) 0);" data-color="#fffd6b">クロックの供給の有無により機能させるかさせないかを設定</span></strong>します。クロックが供給されなければほとんどのペリフェラル（周辺機能）は動作しません。&nbsp;</p>
</div>



<div class="wp-block-vk-blocks-spacer vk_spacer vk_spacer-type-height"><div class="vk_block-margin-md--height"></div></div>



<h2 class="wp-block-heading">SPL（Standard Peripheral Libraries）</h2>



<div class="wp-block-vk-blocks-balloon vk_balloon vk_balloon-position-left vk_balloon-type-speech vk_balloon-animation-none"><div class="vk_balloon_icon"><figure><img decoding="async" class="vk_balloon_icon_image vk_balloon_icon_image-type-normal " src="https://depfields.com/wp-content/uploads/2020/05/instructor.jpg" alt=""/><figcaption class="vk_balloon_icon_name">めかのとろ</figcaption></figure></div><div class="vk_balloon_content_outer"><div class="vk_balloon_content  "><span class="vk_balloon_content_before "></span><span class="vk_balloon_content_after "></span>
<p>総合開発環境でライブラリは下図のように収められています。このうち<strong><span data-color="#fffd6b" style="background: linear-gradient(transparent 60%,rgba(255, 253, 107, 0.7) 0);" class="vk_highlighter">「CMSIS」フォルダはARMマイコンコア用のライブラリ</span></strong>です。基本的に操作することはないと思います。</p>
</div></div></div>



<div class="wp-block-vk-blocks-balloon vk_balloon vk_balloon-position-left vk_balloon-type-speech vk_balloon-animation-none"><div class="vk_balloon_icon"><figure><img decoding="async" class="vk_balloon_icon_image vk_balloon_icon_image-type-normal " src="https://depfields.com/wp-content/uploads/2020/05/instructor.jpg" alt=""/><figcaption class="vk_balloon_icon_name">めかのとろ</figcaption></figure></div><div class="vk_balloon_content_outer"><div class="vk_balloon_content  "><span class="vk_balloon_content_before "></span><span class="vk_balloon_content_after "></span>
<p>このフォルダツリーで「<strong><span data-color="#fffd6b" style="background: linear-gradient(transparent 60%,rgba(255, 253, 107, 0.7) 0);" class="vk_highlighter">STM32F10x_StdPeriph_Driver</span></strong>」フォルダ以下のファイルが各ペリフェラルのライブラリ群で<strong><span data-color="#fffd6b" style="background: linear-gradient(transparent 60%,rgba(255, 253, 107, 0.7) 0);" class="vk_highlighter">SPL</span></strong>（Standard Peripheral Libraries）です。内容を確認してみるとライブラリ内にはC言語で記述された関数が機能設定ごとに複数定義されています。この関数が制御レジスタを操作しており、<strong><span data-color="#fffd6b" style="background: linear-gradient(transparent 60%,rgba(255, 253, 107, 0.7) 0);" class="vk_highlighter">関数に与えるパラメータがマイコンのもつ各ペリフェラルの設定値</span></strong>となるのです。</p>
</div></div></div>



<div class="wp-block-vk-blocks-balloon vk_balloon vk_balloon-position-left vk_balloon-type-speech vk_balloon-animation-none"><div class="vk_balloon_icon"><figure><img decoding="async" class="vk_balloon_icon_image vk_balloon_icon_image-type-normal " src="https://depfields.com/wp-content/uploads/2020/05/instructor.jpg" alt=""/><figcaption class="vk_balloon_icon_name">めかのとろ</figcaption></figure></div><div class="vk_balloon_content_outer"><div class="vk_balloon_content  "><span class="vk_balloon_content_before "></span><span class="vk_balloon_content_after "></span>
<p>名称がSTM32F10x_なのでこのライブラリはSTM10xシリーズマイコンが対象であることを意味しています。STM32F4シリーズなど仕様の異なるマイコンには使用できずその都度仕様にあったプロジェクトを新規作成して相当のライブラリを使用する必要があります。</p>
</div></div></div>



<figure class="wp-block-image size-large is-resized"><a href="https://depfields.com/wp-content/uploads/2020/06/spl.jpg"><img decoding="async" src="https://depfields.com/wp-content/uploads/2020/06/spl.jpg" alt="" class="wp-image-2033" width="380" height="438" srcset="https://depfields.com/wp-content/uploads/2020/06/spl.jpg 382w, https://depfields.com/wp-content/uploads/2020/06/spl-260x300.jpg 260w" sizes="(max-width: 380px) 100vw, 380px" /></a><figcaption>ペリフェラルライブラリ</figcaption></figure>



<div class="wp-block-vk-blocks-balloon vk_balloon vk_balloon-position-left vk_balloon-type-speech vk_balloon-animation-none"><div class="vk_balloon_icon"><figure><img decoding="async" class="vk_balloon_icon_image vk_balloon_icon_image-type-normal " src="https://depfields.com/wp-content/uploads/2020/05/instructor.jpg" alt=""/><figcaption class="vk_balloon_icon_name">めかのとろ</figcaption></figure></div><div class="vk_balloon_content_outer"><div class="vk_balloon_content  "><span class="vk_balloon_content_before "></span><span class="vk_balloon_content_after "></span>
<p>ペリフェラルライブラリのファイルを以下の表に示しますがとりわけよく使われるものを太字で示しています。使用するペリフェラルのライブラリの本体は<strong><span data-color="#fffd6b" style="background: linear-gradient(transparent 60%,rgba(255, 253, 107, 0.7) 0);" class="vk_highlighter">stm32f10x_xxxx.c</span></strong>とヘッダファイル<strong><span data-color="#fffd6b" style="background: linear-gradient(transparent 60%,rgba(255, 253, 107, 0.7) 0);" class="vk_highlighter">stm32f10x_xxxx.h</span></strong>で関数が機能設定ごとに定義されています。</p>
</div></div></div>



<div class="wp-block-vk-blocks-balloon vk_balloon vk_balloon-position-left vk_balloon-type-speech vk_balloon-animation-none"><div class="vk_balloon_icon"><figure><img decoding="async" class="vk_balloon_icon_image vk_balloon_icon_image-type-normal " src="https://depfields.com/wp-content/uploads/2020/05/instructor.jpg" alt=""/><figcaption class="vk_balloon_icon_name">めかのとろ</figcaption></figure></div><div class="vk_balloon_content_outer"><div class="vk_balloon_content  "><span class="vk_balloon_content_before "></span><span class="vk_balloon_content_after "></span>
<p>ペリフェラルライブラリの各種関数を呼び出すためには<strong><span data-color="#fffd6b" style="background: linear-gradient(transparent 60%,rgba(255, 253, 107, 0.7) 0);" class="vk_highlighter">stm32f10x.h</span>をアプリプログラム内にインクルードしておく必要があります</strong>。</p>
</div></div></div>



<div class="wp-block-vk-blocks-balloon vk_balloon vk_balloon-position-left vk_balloon-type-speech vk_balloon-animation-none"><div class="vk_balloon_icon"><figure><img decoding="async" class="vk_balloon_icon_image vk_balloon_icon_image-type-normal " src="https://depfields.com/wp-content/uploads/2020/05/instructor.jpg" alt=""/><figcaption class="vk_balloon_icon_name">めかのとろ</figcaption></figure></div><div class="vk_balloon_content_outer"><div class="vk_balloon_content  "><span class="vk_balloon_content_before "></span><span class="vk_balloon_content_after "></span>
<p>ペリフェラルライブラリにはペリフェラルごとに多くのヘッダファイルがありますが、それらはstm32f10x.hから呼び出されるようになっているため、<span data-color="#fffd6b" style="background: linear-gradient(transparent 60%,rgba(255, 253, 107, 0.7) 0);" class="vk_highlighter"><strong>stm32f10x.hをインクルードしておくだけでペリフェラルライブラリの機能全体を使用できます</strong>。</span></p>
</div></div></div>



<div class="wp-block-vk-blocks-balloon vk_balloon vk_balloon-position-left vk_balloon-type-speech vk_balloon-animation-none"><div class="vk_balloon_icon"><figure><img decoding="async" class="vk_balloon_icon_image vk_balloon_icon_image-type-normal " src="https://depfields.com/wp-content/uploads/2020/05/instructor.jpg" alt=""/><figcaption class="vk_balloon_icon_name">めかのとろ</figcaption></figure></div><div class="vk_balloon_content_outer"><div class="vk_balloon_content  "><span class="vk_balloon_content_before "></span><span class="vk_balloon_content_after "></span>
<p>ヘッダファイル<strong>stm32f10x.h</strong>自体は「CMSIS」フォルダ以下「Device」-「ST」-「STM32F10x」-「Include」にあります。</p>
</div></div></div>



<div class="wp-block-vk-blocks-balloon vk_balloon vk_balloon-position-left vk_balloon-type-speech vk_balloon-animation-none"><div class="vk_balloon_icon"><figure><img decoding="async" class="vk_balloon_icon_image vk_balloon_icon_image-type-normal " src="https://depfields.com/wp-content/uploads/2020/05/instructor.jpg" alt=""/><figcaption class="vk_balloon_icon_name">めかのとろ</figcaption></figure></div><div class="vk_balloon_content_outer"><div class="vk_balloon_content  "><span class="vk_balloon_content_before "></span><span class="vk_balloon_content_after "></span>
<p>例えば、ライブラリの中でGPIOのヘッダファイルはstm32f10x_gpio.hでライブラリ本体はstm32f10x_gpio.cです。</p>
</div></div></div>



<figure class="wp-block-image size-large is-resized"><a href="https://depfields.com/wp-content/uploads/2020/06/peripheral.jpg"><img decoding="async" src="https://depfields.com/wp-content/uploads/2020/06/peripheral.jpg" alt="" class="wp-image-2032" width="552" height="494" srcset="https://depfields.com/wp-content/uploads/2020/06/peripheral.jpg 558w, https://depfields.com/wp-content/uploads/2020/06/peripheral-300x268.jpg 300w" sizes="(max-width: 552px) 100vw, 552px" /></a><figcaption>搭載マイコンSTM32F1xxで使えるペリフェラルライブラリ</figcaption></figure>



<h2 class="wp-block-heading">フローチャート</h2>



<div class="wp-block-vk-blocks-balloon vk_balloon vk_balloon-position-left vk_balloon-type-speech vk_balloon-animation-none"><div class="vk_balloon_icon"><figure><img decoding="async" class="vk_balloon_icon_image vk_balloon_icon_image-type-normal " src="https://depfields.com/wp-content/uploads/2020/05/instructor.jpg" alt=""/><figcaption class="vk_balloon_icon_name">めかのとろ</figcaption></figure></div><div class="vk_balloon_content_outer"><div class="vk_balloon_content  "><span class="vk_balloon_content_before "></span><span class="vk_balloon_content_after "></span>
<p>ここで、ペリフェラルを使えるようにするためのフローチャートを<strong><span data-color="#fffd6b" style="background: linear-gradient(transparent 60%,rgba(255, 253, 107, 0.7) 0);" class="vk_highlighter">GPIOAのPin1</span>を<span data-color="#fffd6b" style="background: linear-gradient(transparent 60%,rgba(255, 253, 107, 0.7) 0);" class="vk_highlighter">プッシュプル出力に設定</span>する例</strong>で示します。ここでは設定の内容は理解できなくてもよいので流れを掴んでください。</p>
</div></div></div>



<div class="wp-block-vk-blocks-balloon vk_balloon vk_balloon-position-left vk_balloon-type-speech vk_balloon-animation-none"><div class="vk_balloon_icon"><figure><img decoding="async" class="vk_balloon_icon_image vk_balloon_icon_image-type-normal " src="https://depfields.com/wp-content/uploads/2020/05/instructor.jpg" alt=""/><figcaption class="vk_balloon_icon_name">めかのとろ</figcaption></figure></div><div class="vk_balloon_content_outer"><div class="vk_balloon_content  "><span class="vk_balloon_content_before "></span><span class="vk_balloon_content_after "></span>
<p><strong><span data-color="#fffd6b" style="background: linear-gradient(transparent 60%,rgba(255, 253, 107, 0.7) 0);" class="vk_highlighter">初期状態ではペリフェラルはOFF</span></strong>（クロックが供給されていない状態）なのでONにするために<strong><span data-color="#fffd6b" style="background: linear-gradient(transparent 60%,rgba(255, 253, 107, 0.7) 0);" class="vk_highlighter">クロックを供給</span></strong>します①。次に初期化変数に<strong><span data-color="#fffd6b" style="background: linear-gradient(transparent 60%,rgba(255, 253, 107, 0.7) 0);" class="vk_highlighter">初期値を設定</span></strong>してから②、<strong><span data-color="#fffd6b" style="background: linear-gradient(transparent 60%,rgba(255, 253, 107, 0.7) 0);" class="vk_highlighter">初期化を実行</span></strong>します③。ペリフェラルによっては、別途起動④やキャリブレーション⑤が必要となります。<br>こうして、ペリフェラルは初期化を終えた段階になってアプリケーションプログラム内で任意に使用できるようになります。</p>
</div></div></div>



<div class="wp-block-vk-blocks-balloon vk_balloon vk_balloon-position-left vk_balloon-type-speech vk_balloon-animation-none"><div class="vk_balloon_icon"><figure><img decoding="async" class="vk_balloon_icon_image vk_balloon_icon_image-type-normal " src="https://depfields.com/wp-content/uploads/2020/05/instructor.jpg" alt=""/><figcaption class="vk_balloon_icon_name">めかのとろ</figcaption></figure></div><div class="vk_balloon_content_outer"><div class="vk_balloon_content  "><span class="vk_balloon_content_before "></span><span class="vk_balloon_content_after "></span>
<p>初期化を設定してからクロックを供給しても設定は反映されません。<br>ペリフェラルの初期化変数はGPIOの場合はGPIO_InitTypeDef型の構造体変数で<strong><span data-color="#fffd6b" style="background: linear-gradient(transparent 60%,rgba(255, 253, 107, 0.7) 0);" class="vk_highlighter">初期化を実行するGPIO_Init関数</span></strong>にパラメータを渡しています（②の部分）。GPIO_InitTypeDef型の構造体変数はライブラリstm32f10x_gpioのヘッダファイルstm32f10x_gpio.hの中で定義されています。</p>
</div></div></div>



<div class="wp-block-vk-blocks-balloon vk_balloon vk_balloon-position-left vk_balloon-type-speech vk_balloon-animation-none"><div class="vk_balloon_icon"><figure><img decoding="async" class="vk_balloon_icon_image vk_balloon_icon_image-type-normal " src="https://depfields.com/wp-content/uploads/2020/05/instructor.jpg" alt=""/><figcaption class="vk_balloon_icon_name">めかのとろ</figcaption></figure></div><div class="vk_balloon_content_outer"><div class="vk_balloon_content  "><span class="vk_balloon_content_before "></span><span class="vk_balloon_content_after "></span>
<p>他のペリフェラルも同様にライブラリの中で定義されています。ペリフェラルの中でもタイマなどは高機能のために、初期化変数は機能ごとのグループ数種類に分かれた構造体変数となっています。設定するパラメータも多種類にわたります。詳細は各ペリフェラルで解説します。</p>
</div></div></div>



<figure class="wp-block-image size-large is-resized"><a href="https://depfields.com/wp-content/uploads/2020/06/peripheral_flow.jpg"><img decoding="async" src="https://depfields.com/wp-content/uploads/2020/06/peripheral_flow.png" alt="" class="wp-image-9945" width="580" height="400" srcset="https://depfields.com/wp-content/uploads/2020/06/peripheral_flow.png 856w, https://depfields.com/wp-content/uploads/2020/06/peripheral_flow-300x207.png 300w, https://depfields.com/wp-content/uploads/2020/06/peripheral_flow-768x530.png 768w" sizes="(max-width: 580px) 100vw, 580px" /></a><figcaption> ペリフェラルを使えるようにするためのフローチャート </figcaption></figure>



<div class="wp-block-vk-blocks-balloon vk_balloon vk_balloon-position-left vk_balloon-type-speech vk_balloon-animation-none"><div class="vk_balloon_icon"><figure><img decoding="async" class="vk_balloon_icon_image vk_balloon_icon_image-type-normal " src="https://depfields.com/wp-content/uploads/2020/05/instructor.jpg" alt=""/><figcaption class="vk_balloon_icon_name">めかのとろ</figcaption></figure></div><div class="vk_balloon_content_outer"><div class="vk_balloon_content  "><span class="vk_balloon_content_before "></span><span class="vk_balloon_content_after "></span>
<p>ペリフェラルをONさせるにはクロックを供給することは前述しました。低速なペリフェラルにはバスAPB1が接続されて、高速なペリフェラルにはバスAPB2が接続されているため、ペリフェラルのクロック供給も対象のバスのもので行います。<strong><span data-color="#fffd6b" style="background: linear-gradient(transparent 60%,rgba(255, 253, 107, 0.7) 0);" class="vk_highlighter">バスAPB1とAPB2に接続されているペリフェラルの定義されたマクロ名をそれぞれ下表</span></strong>にまとめました。</p>
</div></div></div>



<div class="wp-block-vk-blocks-balloon vk_balloon vk_balloon-position-left vk_balloon-type-speech vk_balloon-animation-none"><div class="vk_balloon_icon"><figure><img decoding="async" class="vk_balloon_icon_image vk_balloon_icon_image-type-normal " src="https://depfields.com/wp-content/uploads/2020/05/instructor.jpg" alt=""/><figcaption class="vk_balloon_icon_name">めかのとろ</figcaption></figure></div><div class="vk_balloon_content_outer"><div class="vk_balloon_content  "><span class="vk_balloon_content_before "></span><span class="vk_balloon_content_after "></span>
<p>各ペリフェラルはAPB1に属するものは<strong><span data-color="#fffd6b" style="background: linear-gradient(transparent 60%,rgba(255, 253, 107, 0.7) 0);" class="vk_highlighter">RCC_APB1PeriphClockCmd関数</span>、</strong>APB2に属するものは<strong><span data-color="#fffd6b" style="background: linear-gradient(transparent 60%,rgba(255, 253, 107, 0.7) 0);" class="vk_highlighter">RCC_APB1PeriphClockCmd関数</span></strong>を実行し、クロックを供給しON/OFFを設定します。<strong><span data-color="#fffd6b" style="background: linear-gradient(transparent 60%,rgba(255, 253, 107, 0.7) 0);" class="vk_highlighter">”ENABLE”でON</span></strong>、<span data-color="#fffd6b" style="background: linear-gradient(transparent 60%,rgba(255, 253, 107, 0.7) 0);" class="vk_highlighter"><strong>”DISABLE”でOFF</strong></span>となります。</p>
</div></div></div>



<figure class="wp-block-image size-large is-resized"><a href="https://depfields.com/wp-content/uploads/2020/06/RCC_APB1Priph_rb.jpg"><img decoding="async" src="https://depfields.com/wp-content/uploads/2020/06/RCC_APB1Priph_rb.jpg" alt="" class="wp-image-6607" width="532" height="386" srcset="https://depfields.com/wp-content/uploads/2020/06/RCC_APB1Priph_rb.jpg 532w, https://depfields.com/wp-content/uploads/2020/06/RCC_APB1Priph_rb-300x218.jpg 300w" sizes="(max-width: 532px) 100vw, 532px" /></a><figcaption>ペリフェラルAPB1</figcaption></figure>



<figure class="wp-block-image size-large is-resized"><a href="https://depfields.com/wp-content/uploads/2020/06/RCC_APB2Priph_rb.jpg"><img decoding="async" src="https://depfields.com/wp-content/uploads/2020/06/RCC_APB2Priph_rb.jpg" alt="" class="wp-image-6605" width="532" height="338" srcset="https://depfields.com/wp-content/uploads/2020/06/RCC_APB2Priph_rb.jpg 532w, https://depfields.com/wp-content/uploads/2020/06/RCC_APB2Priph_rb-300x191.jpg 300w" sizes="(max-width: 532px) 100vw, 532px" /></a><figcaption> ペリフェラルAPB2</figcaption></figure>



<h2 class="wp-block-heading">ペリフェラルライブラリまとめ</h2>



<div class="wp-block-vk-blocks-balloon vk_balloon vk_balloon-position-left vk_balloon-type-speech vk_balloon-animation-none"><div class="vk_balloon_icon"><figure><img decoding="async" class="vk_balloon_icon_image vk_balloon_icon_image-type-normal " src="https://depfields.com/wp-content/uploads/2020/05/instructor.jpg" alt=""/><figcaption class="vk_balloon_icon_name">めかのとろ</figcaption></figure></div><div class="vk_balloon_content_outer"><div class="vk_balloon_content  "><span class="vk_balloon_content_before "></span><span class="vk_balloon_content_after "></span>
<p>各ペリフェラルの制御レジスタにはたくさんの機能が割り当てられています。例えば、<strong><span data-color="#fffd6b" style="background: linear-gradient(transparent 60%,rgba(255, 253, 107, 0.7) 0);" class="vk_highlighter">GPIO</span></strong>では<strong><span data-color="#fffd6b" style="background: linear-gradient(transparent 60%,rgba(255, 253, 107, 0.7) 0);" class="vk_highlighter">入力と出力の仕様選択</span></strong>、入力の場合は扱う信号によりアナログ、プルアップ、プルダウン、デジタル電圧入力の4種類の<strong><span data-color="#fffd6b" style="background: linear-gradient(transparent 60%,rgba(255, 253, 107, 0.7) 0);" class="vk_highlighter">信号仕様選択</span></strong>などがあります。</p>
</div></div></div>



<div class="wp-block-vk-blocks-balloon vk_balloon vk_balloon-position-left vk_balloon-type-speech vk_balloon-animation-none"><div class="vk_balloon_icon"><figure><img decoding="async" class="vk_balloon_icon_image vk_balloon_icon_image-type-normal " src="https://depfields.com/wp-content/uploads/2020/05/instructor.jpg" alt=""/><figcaption class="vk_balloon_icon_name">めかのとろ</figcaption></figure></div><div class="vk_balloon_content_outer"><div class="vk_balloon_content  "><span class="vk_balloon_content_before "></span><span class="vk_balloon_content_after "></span>
<p>制御レジスタはメモリの一種ですので各々設定するレジスタには<strong><span data-color="#fffd6b" style="background: linear-gradient(transparent 60%,rgba(255, 253, 107, 0.7) 0);" class="vk_highlighter">アドレス</span></strong>があります。STM32マイコンでは<strong><span data-color="#fffd6b" style="background: linear-gradient(transparent 60%,rgba(255, 253, 107, 0.7) 0);" class="vk_highlighter">32ビットのアドレス</span></strong>で、例えば、具体的にはGPIOAのピン1の入出力仕様を選択するレジスタはGPIOA_CRLでアドレスは0x40010800です。この特定されたアドレスのレジスタに上記の仕様機能が割り当てられていて、デジタル値の0(OFF)と1(ON)の組み合わせで指定するのです。</p>
</div></div></div>



<div class="wp-block-vk-blocks-balloon vk_balloon vk_balloon-position-left vk_balloon-type-speech vk_balloon-animation-none"><div class="vk_balloon_icon"><figure><img decoding="async" class="vk_balloon_icon_image vk_balloon_icon_image-type-normal " src="https://depfields.com/wp-content/uploads/2020/05/instructor.jpg" alt=""/><figcaption class="vk_balloon_icon_name">めかのとろ</figcaption></figure></div><div class="vk_balloon_content_outer"><div class="vk_balloon_content  "><span class="vk_balloon_content_before "></span><span class="vk_balloon_content_after "></span>
<p>マイコンはデジタルシステムで<strong>多数のスイッチを組み合わせて機能</strong>するものですので<strong><span data-color="#fffd6b" style="background: linear-gradient(transparent 60%,rgba(255, 253, 107, 0.7) 0);" class="vk_highlighter">制御レジスタに0と1を書き込む</span>ことで仕様を選択</strong>できるのです。</p>
</div></div></div>



<div style="display: inline-block; background: #191970; padding: 5px 10px; color: #ffffff; border-radius: 5px 5px 0px 0px;"><strong>ポイント</strong></div>
<div style="background: #ffffea; border-radius: 0px 10px 10px 10px; padding: 10px; border: 3px solid #191970;">
<p><strong><span class="vk_highlighter" style="background: linear-gradient(transparent 60%,rgba(255, 253, 107, 0.7) 0);" data-color="#fffd6b">ペリフェラルライブラリ</span>は</strong>各制御レジスタに設定する一連の動作を<strong><span class="vk_highlighter" style="background: linear-gradient(transparent 60%,rgba(255, 253, 107, 0.7) 0);" data-color="#fffd6b">「マクロ」としてコード化し関数としてブロック化したもの</span></strong>ですのでレファレンスマニュアルに記述されているレジスタのアドレスや機能詳細を意識することなく使うことができるとても便利なものです。</p>
</div>



<div class="wp-block-vk-blocks-spacer vk_spacer vk_spacer-type-margin-top"><div class="vk_block-margin-md--margin-top"></div></div>



<div class="wp-block-vk-blocks-balloon vk_balloon vk_balloon-position-right vk_balloon-type-speech vk_balloon-animation-none"><div class="vk_balloon_icon"><figure><img decoding="async" class="vk_balloon_icon_image vk_balloon_icon_image-type-normal " src="https://depfields.com/wp-content/uploads/2020/05/instructor.jpg" alt=""/><figcaption class="vk_balloon_icon_name">めかのとろ</figcaption></figure></div><div class="vk_balloon_content_outer"><div class="vk_balloon_content  "><span class="vk_balloon_content_before "></span><span class="vk_balloon_content_after "></span>
<p><strong><span data-color="#fffd6b" style="background: linear-gradient(transparent 60%,rgba(255, 253, 107, 0.7) 0);" class="vk_highlighter">必要な知識は各ペリフェラルライブラリの使い方だけ</span></strong>ですので<strong><span data-color="#fffd6b" style="background: linear-gradient(transparent 60%,rgba(255, 253, 107, 0.7) 0);" class="vk_highlighter">入門者でも簡単</span></strong>にマイコンを使いはじめることができます。</p>
</div></div></div>



<div class="wp-block-vk-blocks-balloon vk_balloon vk_balloon-position-right vk_balloon-type-speech vk_balloon-animation-none"><div class="vk_balloon_icon"><figure><img decoding="async" class="vk_balloon_icon_image vk_balloon_icon_image-type-normal " src="https://depfields.com/wp-content/uploads/2020/05/instructor.jpg" alt=""/><figcaption class="vk_balloon_icon_name">めかのとろ</figcaption></figure></div><div class="vk_balloon_content_outer"><div class="vk_balloon_content  "><span class="vk_balloon_content_before "></span><span class="vk_balloon_content_after "></span>
<p>次章では実際にペリフェラルライブラリの中で行われている部分を解説しています。結構難解ですがマイコンの理解が深まりますので慣れてきたらチャレンジしてください。</p>
</div></div></div>



<div class="wp-block-vk-blocks-spacer vk_spacer vk_spacer-type-margin-top"><div class="vk_block-margin-md--margin-top"></div></div>



<div class="linkcard"><div class="lkc-external-wrap"><a class="lkc-link no_icon" href="https://en.depfields.com/library/" target="_blank" rel="external noopener"><div class="lkc-card"><div class="lkc-info"><img class="lkc-favicon" src="https://www.google.com/s2/favicons?domain=en.depfields.com" alt="" width=16 height=16 /><div class="lkc-domain">Most Powerful Bible to Become an Embedded Engineer</div></div><div class="lkc-content"><figure class="lkc-thumbnail"><img class="lkc-thumbnail-img" src="//depfields.com/wp-content/uploads/pz-linkcard/cache/84a308c24bda5cd8eba261610e0688ed239dbe43989b3a0f6c0f1c8c0025ea70.jpeg" alt="" /></figure><div class="lkc-title"><div class="lkc-title-text">Peripheral library for ARM STM32F1 series | Most Powerful Bible to Become an ...</div></div><div class="lkc-url">https://en.depfields.com/library/</div><div class="lkc-excerpt">MCU PeripheralsA peripheral library is a driver that allows you to easily set the control registers of peripheral functions (peripherals) in the specifications. From this point onward, we will provide specific explanations based o</div></div><div class="clear"></div></div></a></div></div><p>The post <a href="https://depfields.com/library/">ARMマイコンSTM32F1シリーズのペリフェラルライブラリ</a> first appeared on <a href="https://depfields.com">即戦力モノづくり!エンジニアへの道標</a>.</p>]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>ARMマイコンSTM32の周辺機能とファームウェアライブラリとの関連</title>
		<link>https://depfields.com/firmware/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=firmware</link>
		
		<dc:creator><![CDATA[めかのとろ]]></dc:creator>
		<pubDate>Mon, 01 Jun 2020 14:11:29 +0000</pubDate>
				<category><![CDATA[マイコン周辺機能（ペリフェラル）とは]]></category>
		<category><![CDATA[STM32]]></category>
		<guid isPermaLink="false">https://depfields.com/?page_id=1976</guid>

					<description><![CDATA[<p>ファームウェアの役割とは ソフトウェア・システム構成 ライブラリSPLを使用する理由 ポイント ある程度、STM32マイコンに慣れてきたところで、最新の開発環境にシフトしてHALを使用するとその便利さは発揮されるでしょう [&#8230;]</p>
<p>The post <a href="https://depfields.com/firmware/">ARMマイコンSTM32の周辺機能とファームウェアライブラリとの関連</a> first appeared on <a href="https://depfields.com">即戦力モノづくり!エンジニアへの道標</a>.</p>]]></description>
										<content:encoded><![CDATA[<div class="veu_autoEyeCatchBox"><img width="640" height="426" src="https://depfields.com/wp-content/uploads/2020/06/old-books-436498_640.jpg" class="attachment-large size-large wp-post-image" alt="" decoding="async" srcset="https://depfields.com/wp-content/uploads/2020/06/old-books-436498_640.jpg 640w, https://depfields.com/wp-content/uploads/2020/06/old-books-436498_640-300x200.jpg 300w" sizes="(max-width: 640px) 100vw, 640px" /></div>




<h2 class="wp-block-heading">ファームウェアの役割とは</h2>



<div class="wp-block-vk-blocks-balloon vk_balloon vk_balloon-position-left vk_balloon-type-speech vk_balloon-animation-none"><div class="vk_balloon_icon"><figure><img decoding="async" class="vk_balloon_icon_image vk_balloon_icon_image-type-normal " src="https://depfields.com/wp-content/uploads/2020/05/instructor.jpg" alt=""/><figcaption class="vk_balloon_icon_name">めかのとろ</figcaption></figure></div><div class="vk_balloon_content_outer"><div class="vk_balloon_content  "><span class="vk_balloon_content_before "></span><span class="vk_balloon_content_after "></span>
<p>マイコンにはさまざまな<strong><span data-color="#fffd6b" style="background: linear-gradient(transparent 60%,rgba(255, 253, 107, 0.7) 0);" class="vk_highlighter">周辺機能</span></strong>（<strong><span data-color="#fffd6b" style="background: linear-gradient(transparent 60%,rgba(255, 253, 107, 0.7) 0);" class="vk_highlighter">ペリフェラル</span></strong>）が内蔵されています。代表的なものに汎用入出力GPIOがありますがマイコンの各ピンに入出力の機能詳細を定義するためにはGPIO制御レジスタを設定する必要があります。</p>
</div></div></div>



<div class="wp-block-vk-blocks-balloon vk_balloon vk_balloon-position-left vk_balloon-type-speech vk_balloon-animation-none"><div class="vk_balloon_icon"><figure><img decoding="async" class="vk_balloon_icon_image vk_balloon_icon_image-type-normal " src="https://depfields.com/wp-content/uploads/2020/05/instructor.jpg" alt=""/><figcaption class="vk_balloon_icon_name">めかのとろ</figcaption></figure></div><div class="vk_balloon_content_outer"><div class="vk_balloon_content  "><span class="vk_balloon_content_before "></span><span class="vk_balloon_content_after "></span>
<p>マイコンのリファレンスマニュアルにはレジスタ詳細について記述されていますが、このマニュアル通りにレジスタ設定のプログラムを作成していくことは慣れているひとでも大変です。マイコンを使った組み込みエンジニアは<strong><span data-color="#fffd6b" style="background: linear-gradient(transparent 60%,rgba(255, 253, 107, 0.7) 0);" class="vk_highlighter">アプリケーション作成が重要</span></strong>なのであって、各社種々あるマイコンのハードウェア寄りの部分の理解と設定に労力を費やしたくはありません。</p>
</div></div></div>



<div class="wp-block-vk-blocks-balloon vk_balloon vk_balloon-position-left vk_balloon-type-speech vk_balloon-animation-none"><div class="vk_balloon_icon"><figure><img decoding="async" class="vk_balloon_icon_image vk_balloon_icon_image-type-normal " src="https://depfields.com/wp-content/uploads/2020/05/instructor.jpg" alt=""/><figcaption class="vk_balloon_icon_name">めかのとろ</figcaption></figure></div><div class="vk_balloon_content_outer"><div class="vk_balloon_content  "><span class="vk_balloon_content_before "></span><span class="vk_balloon_content_after "></span>
<p>そこで、マイコン各メーカーはハードウェアの操作を行うための<strong><span data-color="#fffd6b" style="background: linear-gradient(transparent 60%,rgba(255, 253, 107, 0.7) 0);" class="vk_highlighter">デバイスドライバ</span></strong>として<strong><span data-color="#fffd6b" style="background: linear-gradient(transparent 60%,rgba(255, 253, 107, 0.7) 0);" class="vk_highlighter">ペリフェラルライブラリであるファームウェアを用意</span></strong>しています。このため、一度、使用するマイコン機種のハードウェアに依存する部分であるペリフェラルライブラリ（デバイスドライバ）の使い方を把握すると、後はアプリケーションの開発だけに集中できます。</p>
</div></div></div>



<div class="wp-block-vk-blocks-balloon vk_balloon vk_balloon-position-left vk_balloon-type-speech vk_balloon-animation-none"><div class="vk_balloon_icon"><figure><img decoding="async" class="vk_balloon_icon_image vk_balloon_icon_image-type-normal " src="https://depfields.com/wp-content/uploads/2020/05/instructor.jpg" alt=""/><figcaption class="vk_balloon_icon_name">めかのとろ</figcaption></figure></div><div class="vk_balloon_content_outer"><div class="vk_balloon_content  "><span class="vk_balloon_content_before "></span><span class="vk_balloon_content_after "></span>
<p>組み込み機器によっては<strong>ファームウェアによらず制御レジスタを直接設定</strong>することにより、<strong>プログラムサイズを小さくしたり</strong>、<strong>応答速度などのパフォーマンスをあげたりする</strong>ことができますので組み込みスキルがあがり慣れるにしたがって、挑戦してみてはいかがでしょうか。</p>
</div></div></div>



<h2 class="wp-block-heading">ソフトウェア・システム構成</h2>



<div class="wp-block-vk-blocks-balloon vk_balloon vk_balloon-position-left vk_balloon-type-speech vk_balloon-animation-none"><div class="vk_balloon_icon"><figure><img decoding="async" class="vk_balloon_icon_image vk_balloon_icon_image-type-normal " src="https://depfields.com/wp-content/uploads/2020/05/instructor.jpg" alt=""/><figcaption class="vk_balloon_icon_name">めかのとろ</figcaption></figure></div><div class="vk_balloon_content_outer"><div class="vk_balloon_content  "><span class="vk_balloon_content_before "></span><span class="vk_balloon_content_after "></span>
<p>比較的簡素で単機能な組み込み機器である場合は、<strong><span data-color="#fffd6b" style="background: linear-gradient(transparent 60%,rgba(255, 253, 107, 0.7) 0);" class="vk_highlighter">デバイスドライバ</span></strong>と<strong><span data-color="#fffd6b" style="background: linear-gradient(transparent 60%,rgba(255, 253, 107, 0.7) 0);" class="vk_highlighter">アプリケーションソフト</span></strong>だけでソフトウェアは構成できますが(構成A)、モニター表示しながら通信を同時におこない、さらにモーターを駆動するような<strong><span data-color="#fffd6b" style="background: linear-gradient(transparent 60%,rgba(255, 253, 107, 0.7) 0);" class="vk_highlighter">多機能な組み込み機器では</span></strong>同時に並列で色々な機能を動作させたいので、このような場合は<strong><span data-color="#fffd6b" style="background: linear-gradient(transparent 60%,rgba(255, 253, 107, 0.7) 0);" class="vk_highlighter">OS（Operation System）が必要</span></strong>となってきます（構成B）。</p>
</div></div></div>



<div class="wp-block-vk-blocks-balloon vk_balloon vk_balloon-position-left vk_balloon-type-speech vk_balloon-animation-none"><div class="vk_balloon_icon"><figure><img decoding="async" class="vk_balloon_icon_image vk_balloon_icon_image-type-normal " src="https://depfields.com/wp-content/uploads/2020/05/instructor.jpg" alt=""/><figcaption class="vk_balloon_icon_name">めかのとろ</figcaption></figure></div><div class="vk_balloon_content_outer"><div class="vk_balloon_content  "><span class="vk_balloon_content_before "></span><span class="vk_balloon_content_after "></span>
<p><strong><span data-color="#fffd6b" style="background: linear-gradient(transparent 60%,rgba(255, 253, 107, 0.7) 0);" class="vk_highlighter">組み込み機器ではリアルタイムでの制御が必要</span></strong>となるため<strong><span data-color="#fffd6b" style="background: linear-gradient(transparent 60%,rgba(255, 253, 107, 0.7) 0);" class="vk_highlighter">RTOS（RealTime Operation System）を使用</span></strong>します。さらにEthernet通信などを組み込む場合などはソフトウェアの通信プロトコルスタックを搭載させる必要がでてきますがこのようなソフトウェアを<strong><span data-color="#fffd6b" style="background: linear-gradient(transparent 60%,rgba(255, 253, 107, 0.7) 0);" class="vk_highlighter">ミドルウェア</span></strong>といいます（構成C）。</p>
</div></div></div>



<div class="wp-block-vk-blocks-balloon vk_balloon vk_balloon-position-left vk_balloon-type-speech vk_balloon-animation-none"><div class="vk_balloon_icon"><figure><img decoding="async" class="vk_balloon_icon_image vk_balloon_icon_image-type-normal " src="https://depfields.com/wp-content/uploads/2020/05/instructor.jpg" alt=""/><figcaption class="vk_balloon_icon_name">めかのとろ</figcaption></figure></div><div class="vk_balloon_content_outer"><div class="vk_balloon_content  "><span class="vk_balloon_content_before "></span><span class="vk_balloon_content_after "></span>
<p><strong><span data-color="#fffd6b" style="background: linear-gradient(transparent 60%,rgba(255, 253, 107, 0.7) 0);" class="vk_highlighter">アプリケーション</span></strong>はシステム構成内では最上位にあたるプログラムですが、これは<strong><span data-color="#fffd6b" style="background: linear-gradient(transparent 60%,rgba(255, 253, 107, 0.7) 0);" class="vk_highlighter">ハードウェアにまったく影響を受けない部分</span></strong>ですのでどの種類のマイコンでも使用できます（多少の修正は必要な場合はあります）。ただし、ビット数の異なるマイコン（32bitマイコンから8bitマイコンへ）間ではそのままでは互換性はないと認識してください。</p>
</div></div></div>



<figure class="wp-block-image size-large is-resized"><a href="https://depfields.com/wp-content/uploads/2020/06/software-construction.jpg"><img decoding="async" src="https://depfields.com/wp-content/uploads/2020/06/software-construction.jpg" alt="" class="wp-image-1984" width="665" height="248" srcset="https://depfields.com/wp-content/uploads/2020/06/software-construction.jpg 780w, https://depfields.com/wp-content/uploads/2020/06/software-construction-300x112.jpg 300w, https://depfields.com/wp-content/uploads/2020/06/software-construction-768x287.jpg 768w" sizes="(max-width: 665px) 100vw, 665px" /></a><figcaption>ソフトウェア構成</figcaption></figure>



<h2 class="wp-block-heading">ライブラリSPLを使用する理由</h2>



<div class="wp-block-vk-blocks-balloon vk_balloon vk_balloon-position-left vk_balloon-type-speech vk_balloon-animation-none"><div class="vk_balloon_icon"><figure><img decoding="async" class="vk_balloon_icon_image vk_balloon_icon_image-type-normal " src="https://depfields.com/wp-content/uploads/2020/05/instructor.jpg" alt=""/><figcaption class="vk_balloon_icon_name">めかのとろ</figcaption></figure></div><div class="vk_balloon_content_outer"><div class="vk_balloon_content  "><span class="vk_balloon_content_before "></span><span class="vk_balloon_content_after "></span>
<p>当サイトで採用するマイコンはARM Cortex-M3コア搭載のSTM32F1シリーズで<strong>ファームウェア</strong>は<strong><span data-color="#fffd6b" style="background: linear-gradient(transparent 60%,rgba(255, 253, 107, 0.7) 0);" class="vk_highlighter">Standrd Peripheral Library(SPL)</span>と呼ばれている<span data-color="#fffd6b" style="background: linear-gradient(transparent 60%,rgba(255, 253, 107, 0.7) 0);" class="vk_highlighter">ペリフェラルライブラリ（デバイスドライバ）を使用</span></strong>します。</p>
</div></div></div>



<div class="wp-block-vk-blocks-balloon vk_balloon vk_balloon-position-left vk_balloon-type-speech vk_balloon-animation-none"><div class="vk_balloon_icon"><figure><img decoding="async" class="vk_balloon_icon_image vk_balloon_icon_image-type-normal " src="https://depfields.com/wp-content/uploads/2020/05/instructor.jpg" alt=""/><figcaption class="vk_balloon_icon_name">めかのとろ</figcaption></figure></div><div class="vk_balloon_content_outer"><div class="vk_balloon_content  "><span class="vk_balloon_content_before "></span><span class="vk_balloon_content_after "></span>
<p>メーカーでは技術の進歩に合わせて新しく高性能のマイコンを開発、リリースすると同時に開発環境も更新していきます。当然、ファームウェアも更新していくわけですが、ファームウェアはSPLからHAL（Hardware Abstraction Layer）とよばれるライブラリに移行している段階です。</p>
</div></div></div>



<div class="wp-block-vk-blocks-balloon vk_balloon vk_balloon-position-left vk_balloon-type-speech vk_balloon-animation-none"><div class="vk_balloon_icon"><figure><img decoding="async" class="vk_balloon_icon_image vk_balloon_icon_image-type-normal " src="https://depfields.com/wp-content/uploads/2020/05/instructor.jpg" alt=""/><figcaption class="vk_balloon_icon_name">めかのとろ</figcaption></figure></div><div class="vk_balloon_content_outer"><div class="vk_balloon_content  "><span class="vk_balloon_content_before "></span><span class="vk_balloon_content_after "></span>
<p><strong>HALの特徴はSTM32マイコンからの移植性も考慮した抽象度の高いドライバで開発期間を短縮できる利便性を追求したもの</strong>です。今後はSTM32マイコンではHALを中心に開発を進めていくことになるのでしょうが、プログラムコードサイズは大きくなりブラックボックス的な要素があります。</p>
</div></div></div>



<div class="wp-block-vk-blocks-balloon vk_balloon vk_balloon-position-left vk_balloon-type-speech vk_balloon-animation-none"><div class="vk_balloon_icon"><figure><img decoding="async" class="vk_balloon_icon_image vk_balloon_icon_image-type-normal " src="https://depfields.com/wp-content/uploads/2020/05/instructor.jpg" alt=""/><figcaption class="vk_balloon_icon_name">めかのとろ</figcaption></figure></div><div class="vk_balloon_content_outer"><div class="vk_balloon_content  "><span class="vk_balloon_content_before "></span><span class="vk_balloon_content_after "></span>
<p>マイコンの基礎を理解したうえで使用するにはよいのですが、これから組み込み技術の習得を目指すものがHALから始めると<strong>表面的なところは理解できてもつぶしが効かない知識のみが残る</strong>といった事態にもなりかねません。</p>
</div></div></div>



<div class="wp-block-vk-blocks-balloon vk_balloon vk_balloon-position-left vk_balloon-type-speech vk_balloon-animation-none"><div class="vk_balloon_icon"><figure><img decoding="async" class="vk_balloon_icon_image vk_balloon_icon_image-type-normal " src="https://depfields.com/wp-content/uploads/2020/05/instructor.jpg" alt=""/><figcaption class="vk_balloon_icon_name">めかのとろ</figcaption></figure></div><div class="vk_balloon_content_outer"><div class="vk_balloon_content  "><span class="vk_balloon_content_before "></span><span class="vk_balloon_content_after "></span>
<p>当サイトは<strong><span data-color="#fffd6b" style="background: linear-gradient(transparent 60%,rgba(255, 253, 107, 0.7) 0);" class="vk_highlighter">組み込み技術の入門者向け</span></strong>のため、あえてHALは使用せず<strong><span data-color="#fffd6b" style="background: linear-gradient(transparent 60%,rgba(255, 253, 107, 0.7) 0);" class="vk_highlighter">SPLで進めていく</span></strong>ことにします。<strong><span data-color="#fffd6b" style="background: linear-gradient(transparent 60%,rgba(255, 253, 107, 0.7) 0);" class="vk_highlighter">SPLはシンプルで制御レジスタとの関連がわかりやすいマクロ</span></strong>となっており、<strong><span data-color="#fffd6b" style="background: linear-gradient(transparent 60%,rgba(255, 253, 107, 0.7) 0);" class="vk_highlighter">プログラムのコードサイズも比較的小さい</span></strong>ものです。</p>
</div></div></div>



<div class="wp-block-vk-blocks-balloon vk_balloon vk_balloon-position-left vk_balloon-type-speech vk_balloon-animation-none"><div class="vk_balloon_icon"><figure><img decoding="async" class="vk_balloon_icon_image vk_balloon_icon_image-type-normal " src="https://depfields.com/wp-content/uploads/2020/05/instructor.jpg" alt=""/><figcaption class="vk_balloon_icon_name">めかのとろ</figcaption></figure></div><div class="vk_balloon_content_outer"><div class="vk_balloon_content  "><span class="vk_balloon_content_before "></span><span class="vk_balloon_content_after "></span>
<p><strong><span data-color="#fffd6b" style="background: linear-gradient(transparent 60%,rgba(255, 253, 107, 0.7) 0);" class="vk_highlighter">SPLのもう一つの利点は使用するにあたっての情報が豊富</span></strong>なことです。インターネットであれば大概の使い方の情報や使用応用例は取得できます。集中的に学習するとマイコンの使い方自体はすぐにでも身につくのではないでしょうか。</p>
</div></div></div>



<div class="wp-block-vk-blocks-balloon vk_balloon vk_balloon-position-left vk_balloon-type-speech vk_balloon-animation-none"><div class="vk_balloon_icon"><figure><img decoding="async" class="vk_balloon_icon_image vk_balloon_icon_image-type-normal " src="https://depfields.com/wp-content/uploads/2020/05/instructor.jpg" alt=""/><figcaption class="vk_balloon_icon_name">めかのとろ</figcaption></figure></div><div class="vk_balloon_content_outer"><div class="vk_balloon_content  "><span class="vk_balloon_content_before "></span><span class="vk_balloon_content_after "></span>
<p>大事なのはその先のシステム設計を含めシステムのすぐれたアプリケーションを構築するまでのスキルですが、それはどのマイコンシステムでも普遍のスキルです。<strong><span data-color="#fffd6b" style="background: linear-gradient(transparent 60%,rgba(255, 253, 107, 0.7) 0);" class="vk_highlighter">SPLはマイコンの概念的なところが理解しやすい</span></strong>ので<strong><span data-color="#fffd6b" style="background: linear-gradient(transparent 60%,rgba(255, 253, 107, 0.7) 0);" class="vk_highlighter">学習には向いており他のマイコンシステムに移行するにもスムーズ</span></strong>であると思います。<strong><span data-color="#fffd6b" style="background: linear-gradient(transparent 60%,rgba(255, 253, 107, 0.7) 0);" class="vk_highlighter">組み込み技術の基礎スキルを身につけて、応用に活かすことが本サイトの趣旨</span></strong>であることを常に心がけておいてください。</p>
</div></div></div>



<div style="display: inline-block; background: #191970; padding: 5px 10px; color: #ffffff; border-radius: 5px 5px 0px 0px;"><strong>ポイント</strong></div>
<div style="background: #ffffea; border-radius: 0px 10px 10px 10px; padding: 10px; border: 3px solid #191970;">
<p>ある程度、STM32マイコンに慣れてきたところで、最新の開発環境にシフトしてHALを使用するとその便利さは発揮されるでしょう。</p>
</div>



<div class="wp-block-vk-blocks-spacer vk_spacer vk_spacer-type-margin-top"><div class="vk_block-margin-md--margin-top"></div></div>


<div class="linkcard"><div class="lkc-external-wrap"><a class="lkc-link no_icon" href="https://en.depfields.com/firmware/" target="_blank" rel="external noopener"><div class="lkc-card"><div class="lkc-info"><img class="lkc-favicon" src="https://www.google.com/s2/favicons?domain=en.depfields.com" alt="" width=16 height=16 /><div class="lkc-domain">Most Powerful Bible to Become an Embedded Engineer</div></div><div class="lkc-content"><figure class="lkc-thumbnail"><img class="lkc-thumbnail-img" src="//depfields.com/wp-content/uploads/pz-linkcard/cache/29911b035f6891cfe99ebd678339085e9bad3b6bab499e3a2d92527a79d38cfe.jpeg" alt="" /></figure><div class="lkc-title"><div class="lkc-title-text">ARM STM32 peripheral functions and their relation to firmware libraries | Mos...</div></div><div class="lkc-url">https://en.depfields.com/firmware/</div><div class="lkc-excerpt">What is the role of firmware?MCUs have a variety of built-in peripheral functions (peripherals). Typical examples are general-purpose input/output GPIOs, but GPIO control registers must be set to define the details of input/output</div></div><div class="clear"></div></div></a></div></div><p>The post <a href="https://depfields.com/firmware/">ARMマイコンSTM32の周辺機能とファームウェアライブラリとの関連</a> first appeared on <a href="https://depfields.com">即戦力モノづくり!エンジニアへの道標</a>.</p>]]></content:encoded>
					
		
		
			</item>
	</channel>
</rss>
