<?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>AD変換 | 即戦力モノづくり!エンジニアへの道標</title>
	<atom:link href="https://depfields.com/tag/adc/feed/" rel="self" type="application/rss+xml" />
	<link>https://depfields.com</link>
	<description>組み込み（マイコン）スキルを楽しんで学びながら身につけて短期間で効率よく自由自在に扱えるようになりたいと思いませんか？</description>
	<lastBuildDate>Mon, 11 Apr 2022 06:45:08 +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>AD変換 | 即戦力モノづくり!エンジニアへの道標</title>
	<link>https://depfields.com</link>
	<width>32</width>
	<height>32</height>
</image> 
	<item>
		<title>STM32マイコン Nucleoボードを使った温度計</title>
		<link>https://depfields.com/thermometer-apl/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=thermometer-apl</link>
		
		<dc:creator><![CDATA[めかのとろ]]></dc:creator>
		<pubDate>Fri, 28 Aug 2020 04:07:31 +0000</pubDate>
				<category><![CDATA[計測アプリ]]></category>
		<category><![CDATA[Nucleo]]></category>
		<category><![CDATA[計測]]></category>
		<category><![CDATA[AD変換]]></category>
		<guid isPermaLink="false">https://depfields.com/?p=6153</guid>

					<description><![CDATA[<p>安価なサーミスタをセンサーの素子として使用した温度計をSTM32マイコン（Nucleoボード）で実現するアプリケーションを作ります。簡易なプログラムですがCortex-M3コアマイコンで浮動小数点演算を使ったアプリで他に [&#8230;]</p>
<p>The post <a href="https://depfields.com/thermometer-apl/">STM32マイコン Nucleoボードを使った温度計</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="372" src="https://depfields.com/wp-content/uploads/2020/09/thermometer-4294021_640.jpg" class="attachment-large size-large wp-post-image" alt="" decoding="async" srcset="https://depfields.com/wp-content/uploads/2020/09/thermometer-4294021_640.jpg 640w, https://depfields.com/wp-content/uploads/2020/09/thermometer-4294021_640-300x174.jpg 300w" sizes="(max-width: 640px) 100vw, 640px" /></div>
<p class="vk_block-margin-sm--margin-top vk_block-margin-sm--margin-bottom">安価なサーミスタをセンサーの素子として使用した温度計をSTM32マイコン（Nucleoボード）で実現するアプリケーションを作ります。簡易なプログラムですが<strong><span data-color="#fffd6b" style="background: linear-gradient(transparent 60%,rgba(255, 253, 107, 0.7) 0);" class="vk_highlighter">Cortex-M3コアマイコンで浮動小数点演算を使ったアプリ</span></strong>で他にいろいろな算術演算アプリにも発展できます。</p>



<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">NTC特性</span></strong>をもったものです。 NTC特性のものは温度上昇につれ、抵抗値がゆるやかに減少するタイプですが、<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">ミスタは103AT-2</span></strong>で<strong><span data-color="#fffd6b" style="background: linear-gradient(transparent 60%,rgba(255, 253, 107, 0.7) 0);" class="vk_highlighter">B定数</span></strong>は<strong><span data-color="#fffd6b" style="background: linear-gradient(transparent 60%,rgba(255, 253, 107, 0.7) 0);" class="vk_highlighter">3435K</span></strong>,　基準温度<strong><span data-color="#fffd6b" style="background: linear-gradient(transparent 60%,rgba(255, 253, 107, 0.7) 0);" class="vk_highlighter">T<sub>25</sub>(25℃)</span></strong>でのサーミスタの<strong><span data-color="#fffd6b" style="background: linear-gradient(transparent 60%,rgba(255, 253, 107, 0.7) 0);" class="vk_highlighter">抵抗値R<sub>25</sub></span></strong>は<span data-color="#fffd6b" style="background: linear-gradient(transparent 60%,rgba(255, 253, 107, 0.7) 0);" class="vk_highlighter"><strong>10kΩ</strong>で</span>す。サーミスタ抵抗値<strong>R</strong>と温度<strong>T</strong>の関係式は下記のものですが、この関係式の温度は絶対温度(K)です。</p>
</div></div></div>



<figure class="wp-block-image size-large is-resized"><a href="https://depfields.com/wp-content/uploads/2020/09/v-r-formula.jpg"><img decoding="async" src="https://depfields.com/wp-content/uploads/2020/09/v-r-formula.jpg" alt="" class="wp-image-7212" width="492" height="296"/></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 is-resized"><a href="https://depfields.com/wp-content/uploads/2020/09/temp-characteristic2.jpg"><img decoding="async" src="https://depfields.com/wp-content/uploads/2020/09/temp-characteristic2.jpg" alt="" class="wp-image-6171" width="568" height="432" srcset="https://depfields.com/wp-content/uploads/2020/09/temp-characteristic2.jpg 556w, https://depfields.com/wp-content/uploads/2020/09/temp-characteristic2-300x228.jpg 300w" sizes="(max-width: 568px) 100vw, 568px" /></a><figcaption>温度ー抵抗特性</figcaption></figure>



<figure class="wp-block-image size-large is-resized"><a href="https://depfields.com/wp-content/uploads/2020/09/temp-characteristic-table.jpg"><img decoding="async" src="https://depfields.com/wp-content/uploads/2020/09/temp-characteristic-table.jpg" alt="" class="wp-image-6159" width="291" height="546" srcset="https://depfields.com/wp-content/uploads/2020/09/temp-characteristic-table.jpg 290w, https://depfields.com/wp-content/uploads/2020/09/temp-characteristic-table-160x300.jpg 160w" sizes="(max-width: 291px) 100vw, 291px" /></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>



<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> このサンプルでは上限電圧としてのマイコン電圧Vdd(3.3V)とGND間にサーミスタRと抵抗器Ro（サーミスタのR<sub>25</sub>と同じ程度の値のもの 10kΩ ）を直列に接続しています。中間の電圧Vが温度変化に応じて変化しますのでこの電圧をAD変換で読み取り、<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/09/voltage-resister.jpg"><img decoding="async" src="https://depfields.com/wp-content/uploads/2020/09/voltage-resister.jpg" alt="" class="wp-image-6232" width="491" height="283" srcset="https://depfields.com/wp-content/uploads/2020/09/voltage-resister.jpg 491w, https://depfields.com/wp-content/uploads/2020/09/voltage-resister-300x173.jpg 300w" sizes="(max-width: 491px) 100vw, 491px" /></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">自然対数を使った算術演算</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>



<figure class="wp-block-image size-large is-resized"><a href="https://depfields.com/wp-content/uploads/2020/09/v-r-formula2.jpg"><img decoding="async" src="https://depfields.com/wp-content/uploads/2020/09/v-r-formula2.jpg" alt="" class="wp-image-6177" width="387" height="192" srcset="https://depfields.com/wp-content/uploads/2020/09/v-r-formula2.jpg 387w, https://depfields.com/wp-content/uploads/2020/09/v-r-formula2-300x149.jpg 300w" sizes="(max-width: 387px) 100vw, 387px" /></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>この演算を実現するには、まず自然対数log関数を使用するために<strong><span data-color="#fffd6b" style="background: linear-gradient(transparent 60%,rgba(255, 253, 107, 0.7) 0);" class="vk_highlighter">"math.h"をインクルード</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>ですので、273.15を引いて<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"><a href="https://depfields.com/wp-content/uploads/2020/09/program1.jpg"><img decoding="async" width="648" height="770" src="https://depfields.com/wp-content/uploads/2020/09/program1.png" alt="" class="wp-image-11287" srcset="https://depfields.com/wp-content/uploads/2020/09/program1.png 648w, https://depfields.com/wp-content/uploads/2020/09/program1-252x300.png 252w" sizes="(max-width: 648px) 100vw, 648px" /></a></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">抵抗値に相当する電圧(ADCValue_IN0)</span></strong>をAD変換で取り込むのですがこのサンプルプログラムでは連続変換に指定していますので<strong><span data-color="#fffd6b" style="background: linear-gradient(transparent 60%,rgba(255, 253, 107, 0.7) 0);" class="vk_highlighter">任意のタイミングで取得でき、141行で抵抗値に変換</span></strong>しています。<strong><span data-color="#fffd6b" style="background: linear-gradient(transparent 60%,rgba(255, 253, 107, 0.7) 0);" class="vk_highlighter">3.3V入力時にデジタル値4096</span></strong>となるようにしています。142行は表示数字桁数を設定するものです。</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>143行で<strong><span data-color="#fffd6b" style="background: linear-gradient(transparent 60%,rgba(255, 253, 107, 0.7) 0);" class="vk_highlighter">log関数による浮動小数点演算を実施して温度を求めています</span></strong>。144行は表示数字桁数の設定です。</p>
</div></div></div>



<figure class="wp-block-image size-large is-resized"><a href="https://depfields.com/wp-content/uploads/2020/09/program2.jpg"><img decoding="async" src="https://depfields.com/wp-content/uploads/2020/09/program2.png" alt="" class="wp-image-11286" width="580" height="135" srcset="https://depfields.com/wp-content/uploads/2020/09/program2.png 632w, https://depfields.com/wp-content/uploads/2020/09/program2-300x70.png 300w" sizes="(max-width: 580px) 100vw, 580px" /></a></figure>



<figure class="wp-block-image size-large is-resized"><a href="https://depfields.com/wp-content/uploads/2020/09/circuit.jpg"><img decoding="async" src="https://depfields.com/wp-content/uploads/2020/09/circuit.jpg" alt="" class="wp-image-6725" width="473" height="350"/></a><figcaption>接続図</figcaption></figure>



<figure class="wp-block-image size-large"><img decoding="async" width="503" height="337" src="https://depfields.com/wp-content/uploads/2020/09/thermometer.jpg" alt="" class="wp-image-6167" srcset="https://depfields.com/wp-content/uploads/2020/09/thermometer.jpg 503w, https://depfields.com/wp-content/uploads/2020/09/thermometer-300x201.jpg 300w" sizes="(max-width: 503px) 100vw, 503px" /></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>0.5秒周期でサーミスタ抵抗値と温度を表示しています。サーミスタ温度-抵抗値特性表の値とほぼ一致していることが確認できます。指でサーミスタをつまむと温度が体温近くまで上昇するのがわかります。</p>
</div></div></div>



<figure class="wp-block-image size-large is-resized"><img decoding="async" src="https://depfields.com/wp-content/uploads/2020/09/temp-monitor.jpg" alt="" class="wp-image-6165" width="540" height="430" srcset="https://depfields.com/wp-content/uploads/2020/09/temp-monitor.jpg 539w, https://depfields.com/wp-content/uploads/2020/09/temp-monitor-300x239.jpg 300w" sizes="(max-width: 540px) 100vw, 540px" /><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">STM32F103RB搭載Cortex-M3コアで浮動小数点演算を使った例</span></strong>を扱いました。他に、非線形演算のSIN関数、COS関数などをつかったアプリにも応用できます。</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 style="background: #00ccff; padding: 5px 10px; color: #ffffff; border-radius: 10px 10px 0 0;"><strong>コラム</strong></div>
<div style="background: #ffffea; padding: 10px; border: 2px solid #00ccff; border-radius: 0 0 10px 10px;">
<p>NUCLEO-F103RBに搭載している<strong>STM32F103RB</strong>は<strong><span class="vk_highlighter" style="background: linear-gradient(transparent 60%,rgba(255, 253, 107, 0.7) 0);" data-color="#fffd6b">Cortex-M3コア</span></strong>マイコンで<span class="vk_highlighter" style="background: linear-gradient(transparent 60%,rgba(255, 253, 107, 0.7) 0);" data-color="#fffd6b"><strong>浮動小数点を演算</strong></span>するためのハードウェアDSP(Digital Signal Processor)は搭載しておらず演算は<strong><span class="vk_highlighter" style="background: linear-gradient(transparent 60%,rgba(255, 253, 107, 0.7) 0);" data-color="#fffd6b">ソフトウェアによる</span></strong>ものですが、それを特別に意識しないでも実現できます。このサンプルの温度演算のような比較的低速なアプリケーションでは問題はないでしょうが、例えばFFTアナライザーなど高速演算を必要とする浮動小数点演算を行うアプリケーションの場合にはハードウェアのDSPを搭載したCortex-M4など上位マイコンが有利です。</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='w3eden'><!-- WPDM Link Template: Default Template -->

<div class="link-template-default card mb-2">
    <div class="card-body">
        <div class="media">
            <div class="mr-3 img-48"><img class="wpdm_icon" alt="アイコン"   src="https://depfields.com/wp-content/plugins/download-manager/assets/file-type-icons/box_download.png" /></div>
            <div class="media-body">
                <h3 class="package-title"><a href='https://depfields.com/download/thermometer/'>温度計アプリ</a></h3>
                <div class="text-muted text-small"><i class="fas fa-copy"></i> 1 ファイル <i class="fas fa-hdd ml-3"></i> 9.04 KB</div>
            </div>
            <div class="ml-3">
                <a href='#unlock' class='wpdm-download-link wpdm-download-locked btn btn-primary ' data-package='6169'>ダウンロード</a>
            </div>
        </div>
    </div>
</div>

</div>


<div class="linkcard"><div class="lkc-external-wrap"><a class="lkc-link no_icon" href="https://en.depfields.com/thermometer-apl/" 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/4accd6d9f0d97e5f853fabf7ebe071915bfe2912570f3b43216a11993be2f275.jpeg" alt="" /></figure><div class="lkc-title"><div class="lkc-title-text">Thermometer using STM32 Nucleo | Most Powerful Bible to Become an Embedded En...</div></div><div class="lkc-url">https://en.depfields.com/thermometer-apl/</div><div class="lkc-excerpt">I will create an application to realize a thermometer using an inexpensive thermistor as a sensor element with an STM32 MCU (Nucleo board). It is a simple program, but it can be developed into various other arithmetic applications using fl</div></div><div class="clear"></div></div></a></div></div><p>The post <a href="https://depfields.com/thermometer-apl/">STM32マイコン Nucleoボードを使った温度計</a> first appeared on <a href="https://depfields.com">即戦力モノづくり!エンジニアへの道標</a>.</p>]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>STM32 Nucleoで加速度センサを使ってみる</title>
		<link>https://depfields.com/accel-apl/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=accel-apl</link>
		
		<dc:creator><![CDATA[めかのとろ]]></dc:creator>
		<pubDate>Sat, 29 Aug 2020 04:46:33 +0000</pubDate>
				<category><![CDATA[計測アプリ]]></category>
		<category><![CDATA[計測]]></category>
		<category><![CDATA[AD変換]]></category>
		<category><![CDATA[USART]]></category>
		<category><![CDATA[Nucleo]]></category>
		<guid isPermaLink="false">https://depfields.com/?p=6708</guid>

					<description><![CDATA[<p>加速度センサとは 加速度センサというものはいろいろなセンサの中でも製品内の見えない場所で使われていることが多いので利用率が高い割にはどのようなものかを知らない人が多いかもしれません。 例えば、スマホでは内部の加速度センサ [&#8230;]</p>
<p>The post <a href="https://depfields.com/accel-apl/">STM32 Nucleoで加速度センサを使ってみる</a> first appeared on <a href="https://depfields.com">即戦力モノづくり!エンジニアへの道標</a>.</p>]]></description>
										<content:encoded><![CDATA[<div class="veu_autoEyeCatchBox"><img width="640" height="428" src="https://depfields.com/wp-content/uploads/2020/10/rocket-launch-67643_640.jpg" class="attachment-large size-large wp-post-image" alt="" decoding="async" srcset="https://depfields.com/wp-content/uploads/2020/10/rocket-launch-67643_640.jpg 640w, https://depfields.com/wp-content/uploads/2020/10/rocket-launch-67643_640-300x201.jpg 300w" sizes="(max-width: 640px) 100vw, 640px" /></div>




<h2 class="wp-block-heading">加速度センサとは</h2>



<p class="vk_block-margin-sm--margin-top vk_block-margin-sm--margin-bottom"><strong><span data-color="#fffd6b" style="background: linear-gradient(transparent 60%,rgba(255, 253, 107, 0.7) 0);" class="vk_highlighter">加速度センサ</span></strong>というものはいろいろなセンサの中でも製品内の見えない場所で使われていることが多いので利用率が高い割にはどのようなものかを知らない人が多いかもしれません。</p>



<p class="vk_block-margin-sm--margin-top vk_block-margin-sm--margin-bottom">例えば、スマホでは内部の加速度センサにかかる重力から傾きを検知して画面の向きを変えたり、振動を計測する歩数計アプリなどに使われています。</p>



<p class="vk_block-margin-sm--margin-top vk_block-margin-sm--margin-bottom">今回使用する加速度センサはKinox社の3次元空間の加速度 をX,Y,Z軸で検出できるセンサ本体KXTC9-2050に50Hzのローパスフィルタ用コンデンサを装備したモジュールとなったものです。</p>



<p class="vk_block-margin-sm--margin-top vk_block-margin-sm--margin-bottom">検出した加速度には<strong><span data-color="#fffd6b" style="background: linear-gradient(transparent 60%,rgba(255, 253, 107, 0.7) 0);" class="vk_highlighter">動き、振動、衝撃などによる加速度</span></strong>に加えて重力(G)もオフセット分(DC分）として含まれるので、X,Y,Z軸方向の重力成分が分かれば<strong><span data-color="#fffd6b" style="background: linear-gradient(transparent 60%,rgba(255, 253, 107, 0.7) 0);" class="vk_highlighter">センサの傾きも検出</span></strong>できます。</p>



<p class="vk_block-margin-sm--margin-top vk_block-margin-sm--margin-bottom">加速度センサを利用したアプリケーションとしては<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>



<figure class="wp-block-image size-large is-resized"><img decoding="async" src="https://depfields.com/wp-content/uploads/2020/10/KXTC9-2050.jpg" alt="" class="wp-image-6808" width="287" height="206" srcset="https://depfields.com/wp-content/uploads/2020/10/KXTC9-2050.jpg 461w, https://depfields.com/wp-content/uploads/2020/10/KXTC9-2050-300x216.jpg 300w" sizes="(max-width: 287px) 100vw, 287px" /><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> 加速度センサKXTC9-2050 は<strong><span data-color="#fffd6b" style="background: linear-gradient(transparent 60%,rgba(255, 253, 107, 0.7) 0);" class="vk_highlighter">±2Gの範囲内</span></strong>で加速度を検出できます。仕様表1の出力から、例えば、X,Y軸を水平面とし、Z軸に重力方向にセンサを設置すると、X,Y出力は重力成分はゼロなので1.65V, Z軸出力は1G分を含むので2.32(=1.65+0.66)Vとなるはずです。</p>
</div></div></div>



<figure class="wp-block-image size-large is-resized"><a href="https://depfields.com/wp-content/uploads/2020/10/仕様表1.jpg"><img decoding="async" src="https://depfields.com/wp-content/uploads/2020/10/仕様表1.jpg" alt="" class="wp-image-6823" width="599" height="333" srcset="https://depfields.com/wp-content/uploads/2020/10/仕様表1.jpg 599w, https://depfields.com/wp-content/uploads/2020/10/仕様表1-300x167.jpg 300w" sizes="(max-width: 599px) 100vw, 599px" /></a><figcaption> 仕様表1(データシートより) </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">オフセット分（DC成分）</span></strong>として含んでいます。<strong><span data-color="#fffd6b" style="background: linear-gradient(transparent 60%,rgba(255, 253, 107, 0.7) 0);" class="vk_highlighter">重力Gは9.8[m/sec<sup>2</sup>]で地面の向きに一定にかかっている加速度</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>しています。どういうことでしょうか。</p>
</div></div></div>



<figure class="wp-block-image size-large is-resized"><a href="https://depfields.com/wp-content/uploads/2020/10/重力成分.jpg"><img decoding="async" src="https://depfields.com/wp-content/uploads/2020/10/重力成分.jpg" alt="" class="wp-image-6829" width="388" height="226" srcset="https://depfields.com/wp-content/uploads/2020/10/重力成分.jpg 388w, https://depfields.com/wp-content/uploads/2020/10/重力成分-300x175.jpg 300w" sizes="(max-width: 388px) 100vw, 388px" /></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">重力に対する垂直抗力を検出している</span></strong>のです。したがって、机上など水平面に静止させると重力加速度Gと釣り合っている垂直抗力が重力Gとして検出されます。</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>となりますので、実際の動作の加速度にオフセット分（DC分）として含まれます。例えばZ軸の実際の重力方向（マイナス方向）に自由落下させると加速度センサ出力のZ軸成分は垂直抗力による重力オフセット分がキャンセルされてゼロ、つまり1.65Vになります。</p>
</div></div></div>



<figure class="wp-block-image size-large is-resized"><img decoding="async" src="https://depfields.com/wp-content/uploads/2020/10/KXTC9-2050_dir.jpg" alt="" class="wp-image-6830" width="407" height="293" srcset="https://depfields.com/wp-content/uploads/2020/10/KXTC9-2050_dir.jpg 461w, https://depfields.com/wp-content/uploads/2020/10/KXTC9-2050_dir-300x216.jpg 300w" sizes="(max-width: 407px) 100vw, 407px" /><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">傾きを検知するには各軸のオフセット分である重力成分だけ</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>加速度センサはアイディアしだいでさまざまな用途に発展できる面白いセンサです。今回はその前準備として加速度センサの出力がどのようなものであるかを確認するために加速度3軸分の加速度出力をモニターするアプリを作成します。</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>していきます。</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">AD変換</span></strong>を使用します。ペリフェラルAD変換は<strong><a href="https://depfields.com/adc/" target="_blank" aria-label=" (opens in a new tab)" rel="noreferrer noopener">ADコンバータ【STM32のADコンバータ詳細】</a></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>STM32のAD変換ではアナログ信号入力のパラメータとして、センサの<strong><span data-color="#fffd6b" style="background: linear-gradient(transparent 60%,rgba(255, 253, 107, 0.7) 0);" class="vk_highlighter">出力インピーダンス</span></strong>を指定する必要があります。メーカーの仕様表3(データシート)より<strong><span data-color="#fffd6b" style="background: linear-gradient(transparent 60%,rgba(255, 253, 107, 0.7) 0);" class="vk_highlighter">出力インピーダンスは平均32kΩ</span></strong>となっています。</p>
</div></div></div>



<figure class="wp-block-image size-large is-resized"><a href="https://depfields.com/wp-content/uploads/2020/10/仕様表2.jpg"><img decoding="async" src="https://depfields.com/wp-content/uploads/2020/10/仕様表2.jpg" alt="" class="wp-image-6824" width="612" height="161" srcset="https://depfields.com/wp-content/uploads/2020/10/仕様表2.jpg 612w, https://depfields.com/wp-content/uploads/2020/10/仕様表2-300x79.jpg 300w" sizes="(max-width: 612px) 100vw, 612px" /></a><figcaption> 仕様表2(データシートより) </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>加速度センサの信号をモニターするアプリにはアナログ入力3点およびPCへのシリアル通信を使用します。今回の AD変換 はアナログ信号が3点ありますので<strong><a href="https://depfields.com/dma/">DMA(Direct Memorry Access)</a></strong>と組み合わせると効率がよいです。</p>
</div></div></div>



<figure class="wp-block-image size-large is-resized"><a href="https://depfields.com/wp-content/uploads/2020/10/仕様表.jpg"><img decoding="async" src="https://depfields.com/wp-content/uploads/2020/10/仕様表.jpg" alt="" class="wp-image-6809" width="497" height="284" srcset="https://depfields.com/wp-content/uploads/2020/10/仕様表.jpg 497w, https://depfields.com/wp-content/uploads/2020/10/仕様表-300x171.jpg 300w" sizes="(max-width: 497px) 100vw, 497px" /></a><figcaption>仕様表</figcaption></figure>



<figure class="wp-block-image size-large is-resized"><img decoding="async" src="https://depfields.com/wp-content/uploads/2020/10/配線図.jpg" alt="" class="wp-image-6818" width="517" height="361" srcset="https://depfields.com/wp-content/uploads/2020/10/配線図.jpg 517w, https://depfields.com/wp-content/uploads/2020/10/配線図-300x209.jpg 300w" sizes="(max-width: 517px) 100vw, 517px" /><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>実際のプログラムではX,Y,Z軸3点アナログ信号入力用にそれぞれポートPA0,PA1,PA4をアナログ入力AD1_CH0,AD1_CH1,AD1_CH4に設定し、AD変換を<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">複数チャネルデータをDMAによりメモリに自動転送</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>してから<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"><a href="https://depfields.com/wp-content/uploads/2020/10/section1.png"><img decoding="async" width="606" height="967" src="https://depfields.com/wp-content/uploads/2020/10/section1.png" alt="" class="wp-image-6838" srcset="https://depfields.com/wp-content/uploads/2020/10/section1.png 606w, https://depfields.com/wp-content/uploads/2020/10/section1-188x300.png 188w" sizes="(max-width: 606px) 100vw, 606px" /></a></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>AD変換の初期設定では<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>



<figure class="wp-block-image size-large"><a href="https://depfields.com/wp-content/uploads/2020/10/section2.png"><img decoding="async" width="617" height="705" src="https://depfields.com/wp-content/uploads/2020/10/section2.png" alt="" class="wp-image-6839" srcset="https://depfields.com/wp-content/uploads/2020/10/section2.png 617w, https://depfields.com/wp-content/uploads/2020/10/section2-263x300.png 263w" sizes="(max-width: 617px) 100vw, 617px" /></a></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>このアプリでは1秒毎に加速度成分のX軸,Y軸,Z軸の電圧値（整数）をシリアル送信してPCターミナルでモニターしています。加速度センサーをX,Y軸平面上に静止させているので<strong><span data-color="#fffd6b" style="background: linear-gradient(transparent 60%,rgba(255, 253, 107, 0.7) 0);" class="vk_highlighter">Z軸に重力加速度成分がオフセット分として追加</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>静止しているため、重力の影響を受ける成分（垂直抗力分）だけ  基準値約1.65Vに対して出力に変化が現れます。</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>X軸、Y軸についても重力の影響をうける向きに傾けると出力が変化するのがわかります。</p>
</div></div></div>



<figure class="wp-block-image size-large is-resized"><img decoding="async" src="https://depfields.com/wp-content/uploads/2020/10/output-monitor.jpg" alt="" class="wp-image-6834" width="560" height="426" srcset="https://depfields.com/wp-content/uploads/2020/10/output-monitor.jpg 560w, https://depfields.com/wp-content/uploads/2020/10/output-monitor-300x228.jpg 300w" sizes="(max-width: 560px) 100vw, 560px" /><figcaption>Z軸方向の重力（電圧値：整数）</figcaption></figure>



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



<div class='w3eden'><!-- WPDM Link Template: Default Template -->

<div class="link-template-default card mb-2">
    <div class="card-body">
        <div class="media">
            <div class="mr-3 img-48"><img class="wpdm_icon" alt="アイコン"   src="https://depfields.com/wp-content/plugins/download-manager/assets/file-type-icons/box_download.png" /></div>
            <div class="media-body">
                <h3 class="package-title"><a href='https://depfields.com/download/accel-gravity-apl/'>加速度センサでの重力計測</a></h3>
                <div class="text-muted text-small"><i class="fas fa-copy"></i> 1 ファイル <i class="fas fa-hdd ml-3"></i> 5.99 KB</div>
            </div>
            <div class="ml-3">
                <a href='#unlock' class='wpdm-download-link wpdm-download-locked btn btn-primary ' data-package='6954'>ダウンロード</a>
            </div>
        </div>
    </div>
</div>

</div>



<p></p>



<div class="linkcard"><div class="lkc-external-wrap"><a class="lkc-link no_icon" href="https://en.depfields.com/accel-apl/" 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/e834d1c33e999e43d46d98170ccc43b30179469f963d4acb3904c239c68b8c0a.jpeg" alt="" /></figure><div class="lkc-title"><div class="lkc-title-text">Accelerometer using STM32 Nucleo | Most Powerful Bible to Become an Embedded ...</div></div><div class="lkc-url">https://en.depfields.com/accel-apl/</div><div class="lkc-excerpt">What is an Accelerometer?Among various sensors, accelerometers are often used in invisible places in products, so many people may not know what they are, despite their high utilization.For example, it is used in smartphones t</div></div><div class="clear"></div></div></a></div></div><p>The post <a href="https://depfields.com/accel-apl/">STM32 Nucleoで加速度センサを使ってみる</a> first appeared on <a href="https://depfields.com">即戦力モノづくり!エンジニアへの道標</a>.</p>]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>脈拍センサーとSTM32Nucleoで心拍数を測ってみる</title>
		<link>https://depfields.com/heartbeat/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=heartbeat</link>
		
		<dc:creator><![CDATA[めかのとろ]]></dc:creator>
		<pubDate>Thu, 27 Aug 2020 14:38:47 +0000</pubDate>
				<category><![CDATA[計測アプリ]]></category>
		<category><![CDATA[計測]]></category>
		<category><![CDATA[AD変換]]></category>
		<category><![CDATA[システムクロック・割り込み]]></category>
		<guid isPermaLink="false">https://depfields.com/?p=5749</guid>

					<description><![CDATA[<p>低速パルスである脈拍をカウントして一分間あたりの心拍数を表示するアプリケーションに挑戦してみましょう。 フォトリフレクタおよびオペアンプを使った脈拍センサーの作成 脈拍センサ信号および出力モニター用LEDをマイコンに接続 [&#8230;]</p>
<p>The post <a href="https://depfields.com/heartbeat/">脈拍センサーとSTM32Nucleoで心拍数を測ってみる</a> first appeared on <a href="https://depfields.com">即戦力モノづくり!エンジニアへの道標</a>.</p>]]></description>
										<content:encoded><![CDATA[<div class="veu_autoEyeCatchBox"><img width="640" height="414" src="https://depfields.com/wp-content/uploads/2020/09/banner-1133782_640.jpg" class="attachment-large size-large wp-post-image" alt="" decoding="async" srcset="https://depfields.com/wp-content/uploads/2020/09/banner-1133782_640.jpg 640w, https://depfields.com/wp-content/uploads/2020/09/banner-1133782_640-300x194.jpg 300w" sizes="(max-width: 640px) 100vw, 640px" /></div>
<p class="vk_block-margin-sm--margin-top vk_block-margin-sm--margin-bottom"> <strong>低速<span data-color="#fffd6b" style="background: linear-gradient(transparent 60%,rgba(255, 253, 107, 0.7) 0);" class="vk_highlighter">パルスである脈拍をカウントして一分間あたりの心拍数</span></strong>を表示するアプリケーションに挑戦してみましょう。 </p>







<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>脈拍をカウントして心拍数を表示するアプリケーションの解説をします。心拍数アプリを実現するためのアプリにはアナログ電子回路の知識、STM32マイコンの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>と呼ばれる部品を使用します。<br>このフォトリフレクタは<strong><span data-color="#fffd6b" style="background: linear-gradient(transparent 60%,rgba(255, 253, 107, 0.7) 0);" class="vk_highlighter">赤外線を発光するLED</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">オペアンプ</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>オペアンプは1段でも機能するかもしれませんがここでは2段使用しています。フォトリフレクタ信号の変化分だけパルスとしてとりだしたいので直流分をカットする<strong><span data-color="#fffd6b" style="background: linear-gradient(transparent 60%,rgba(255, 253, 107, 0.7) 0);" class="vk_highlighter">コンデンサCと抵抗Rを組み合わせたRCハイパスフィルタ</span></strong>(カットオフ周波数：約1kHz)を入り口にいれています。</p>
</div></div></div>



<figure class="wp-block-image size-full is-resized"><a href="https://depfields.com/wp-content/uploads/2020/09/脈拍センサ.jpg"><img decoding="async" src="https://depfields.com/wp-content/uploads/2020/09/脈拍センサ.jpg" alt="" class="wp-image-5750" width="480" height="337" srcset="https://depfields.com/wp-content/uploads/2020/09/脈拍センサ.jpg 479w, https://depfields.com/wp-content/uploads/2020/09/脈拍センサ-300x210.jpg 300w" sizes="(max-width: 480px) 100vw, 480px" /></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">LTSpice®</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>を使用して上記回路の特性を調べてみます。入力信号には振幅1mV、オフセット2.5V、周期1sの矩形波としています。妥当な波形が出力にあらわれているのでこれで回路を構成することにします。</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/10/heartbeat-simulation.jpg"><img decoding="async" src="https://depfields.com/wp-content/uploads/2020/10/heartbeat-simulation.jpg" alt="" class="wp-image-6457" width="536" height="402" srcset="https://depfields.com/wp-content/uploads/2020/10/heartbeat-simulation.jpg 640w, https://depfields.com/wp-content/uploads/2020/10/heartbeat-simulation-300x225.jpg 300w" sizes="(max-width: 536px) 100vw, 536px" /></a><figcaption>LTspiceによる回路シミュレーション</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">あえて学習用にフォトリフレクタという素子を使って電子工作を兼ねて心拍モニターを実現する</span></strong>ことにしています。</p>
</div></div></div>



<h2 class="wp-block-heading">脈拍センサ信号および出力モニター用LEDをマイコンに接続</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>オペアンプ出力のVINを直接マイコンに入力として接続するので<strong><span data-color="#fffd6b" style="background: linear-gradient(transparent 60%,rgba(255, 253, 107, 0.7) 0);" class="vk_highlighter">入力最大電圧がマイコン電源電圧を超えないようにオペアンプの電源をマイコン電源と共通</span></strong>のものにしています。（STM32では端子により５V入力が可能なものもありますが、すべてではありません。<strong>STM32F103RBの仕様書で確認</strong>してください。）</p>
</div></div></div>



<figure class="wp-block-image size-large is-resized"><a href="https://depfields.com/wp-content/uploads/2020/09/脈拍connection.jpg"><img decoding="async" src="https://depfields.com/wp-content/uploads/2020/09/脈拍connection.jpg" alt="" class="wp-image-5772" width="505" height="379"/></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>オペアンプにより増幅した<strong><span data-color="#fffd6b" style="background: linear-gradient(transparent 60%,rgba(255, 253, 107, 0.7) 0);" class="vk_highlighter">脈拍センサ信号は電圧パルス信号としてPA8に入力</span></strong>します。心拍モニターとして入力パルスに同調した<strong><span data-color="#fffd6b" style="background: linear-gradient(transparent 60%,rgba(255, 253, 107, 0.7) 0);" class="vk_highlighter">LED点灯するためにPB6を汎用プッシュプル出力</span></strong>に設定をします。</p>
</div></div></div>



<figure class="wp-block-image size-large is-resized"><a href="https://depfields.com/wp-content/uploads/2020/09/gpio-setting-1.jpg"><img decoding="async" src="https://depfields.com/wp-content/uploads/2020/09/gpio-setting-1.jpg" alt="" class="wp-image-5966" width="615" height="466" srcset="https://depfields.com/wp-content/uploads/2020/09/gpio-setting-1.jpg 615w, https://depfields.com/wp-content/uploads/2020/09/gpio-setting-1-300x227.jpg 300w" sizes="(max-width: 615px) 100vw, 615px" /></a><figcaption>GPIO設定</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">PA8は外部割り込み信号</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>



<p>割り込み設定は「<strong><a href="https://depfields.com/interrupt/" target="_blank" aria-label=" (opens in a new tab)" rel="noreferrer noopener">さまざまな割り込み【STM32の割り込み詳細</a>】</strong>」で詳細を解説しています。</p>



<figure class="wp-block-image size-large is-resized"><img decoding="async" src="https://depfields.com/wp-content/uploads/2020/09/interrupt-setting.jpg" alt="" class="wp-image-5759" width="525" height="482" srcset="https://depfields.com/wp-content/uploads/2020/09/interrupt-setting.jpg 525w, https://depfields.com/wp-content/uploads/2020/09/interrupt-setting-300x275.jpg 300w" sizes="(max-width: 525px) 100vw, 525px" /><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>RTOSを使って役割毎にタスクに分類します。脈拍パルス間隔を計測するためのタスク<strong><span data-color="#fffd6b" style="background: linear-gradient(transparent 60%,rgba(255, 253, 107, 0.7) 0);" class="vk_highlighter">prvTask_pulse</span></strong>（10ms毎に実行）、LED点灯用のタスク<strong><span data-color="#fffd6b" style="background: linear-gradient(transparent 60%,rgba(255, 253, 107, 0.7) 0);" class="vk_highlighter">prvTask_led</span></strong>（100ms毎に実行） 、そして演算して得た心拍数をPCに送る<strong><span data-color="#fffd6b" style="background: linear-gradient(transparent 60%,rgba(255, 253, 107, 0.7) 0);" class="vk_highlighter">タスクprvTask_monitor</span></strong>（1000ms毎に実行） です。</p>
</div></div></div>



<p>リアルタイムOS(FreeRTOS)のタスクの使い方は「<strong><a href="https://depfields.com/task/" target="_blank" aria-label=" (opens in a new tab)" rel="noreferrer noopener">FreeRTOSタスク管理の基本【学習・実践向け：具体的な使い方】</a></strong>」で詳細を解説しています。</p>



<figure class="wp-block-image size-large"><a href="https://depfields.com/wp-content/uploads/2020/09/main-procedure.jpg"><img decoding="async" width="680" height="311" src="https://depfields.com/wp-content/uploads/2020/09/main-procedure.jpg" alt="" class="wp-image-5760" srcset="https://depfields.com/wp-content/uploads/2020/09/main-procedure.jpg 680w, https://depfields.com/wp-content/uploads/2020/09/main-procedure-300x137.jpg 300w" sizes="(max-width: 680px) 100vw, 680px" /></a></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>脈拍パルス数計測のタイムチャートです。PA8の割り込み入力パルス立ち上がりで割り込みが発生して割り込みハンドラEXTI9_5_IRQHandlerが呼び出されます。ここでフラグtriger_flag=1として、割り込みが発生したことを通知します。</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>10msごとに実行している 脈拍パルス間隔を計測するためのタスク<strong><span data-color="#fffd6b" style="background: linear-gradient(transparent 60%,rgba(255, 253, 107, 0.7) 0);" class="vk_highlighter">prvTask_pulse</span></strong>がtrigger_flag=1で割り込み発生の通知を受けると 10msごとに<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">(10msクロックのカウント)</span></strong> <strong><span data-color="#fffd6b" style="background: linear-gradient(transparent 60%,rgba(255, 253, 107, 0.7) 0);" class="vk_highlighter">した値（count_interval_cycle)を取得</span></strong>して<strong><span data-color="#fffd6b" style="background: linear-gradient(transparent 60%,rgba(255, 253, 107, 0.7) 0);" class="vk_highlighter">心拍数(pulse_count)を演算</span></strong>します。演算処理後、割り込み通知用フラグtrigger_flagとカウント値count_interval_cycleをリセットします。 <strong><span data-color="#fffd6b" style="background: linear-gradient(transparent 60%,rgba(255, 253, 107, 0.7) 0);" class="vk_highlighter">心拍数は割り込み入力の1分間における回数</span></strong>がわかればよく10msごとの クロックカウント値count_interval_cycle の場合は<strong><span data-color="#fffd6b" style="background: linear-gradient(transparent 60%,rgba(255, 253, 107, 0.7) 0);" class="vk_highlighter">6000を count_interval_cycle で割ったもの</span></strong>になります。 </p>
</div></div></div>



<figure class="wp-block-image size-large is-resized"><a href="https://depfields.com/wp-content/uploads/2020/09/time_chart.jpg"><img decoding="async" src="https://depfields.com/wp-content/uploads/2020/09/time_chart.jpg" alt="" class="wp-image-5777" width="475" height="339"/></a><figcaption>脈拍パルスカウントのタイムチャート</figcaption></figure>



<figure class="wp-block-image size-large is-resized"><a href="https://depfields.com/wp-content/uploads/2020/09/pulse-frequency.jpg"><img decoding="async" src="https://depfields.com/wp-content/uploads/2020/09/pulse-frequency.jpg" alt="" class="wp-image-5761" width="576" height="485" srcset="https://depfields.com/wp-content/uploads/2020/09/pulse-frequency.jpg 575w, https://depfields.com/wp-content/uploads/2020/09/pulse-frequency-300x253.jpg 300w" sizes="(max-width: 576px) 100vw, 576px" /></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>



<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-media-text is-stacked-on-mobile" style="grid-template-columns:76% auto"><figure class="wp-block-media-text__media"><video controls src="https://depfields.com/wp-content/uploads/2022/02/heartbeat0.mp4"></video></figure><div class="wp-block-media-text__content">
<p class="has-large-font-size"></p>
</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>



<h2 class="wp-block-heading">LEDおよびモニター出力</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>脈拍パルスに同調したLED発光はprvTask_ledで行っています。実行頻度は100ms程度で十分です。</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>演算して得られた心拍数をシリアルUSART通信で心拍数をモニターするためのタスクがprvTask_monitorです。演算値を文字列に変換して1000msごとにPCモニターに表示させます。PC側のターミナルソフトで値が確認できます。</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>フォトリフレクタは指の押さえ方により敏感に反応してしまいますが安定するように押さえてやると妥当な心拍数が表示されていることがわかります。出力モニター用LEDは脈拍に同調して発光しています。</p>
</div></div></div>



<p>シリアル通信USARTの使い方は「<strong><a href="https://depfields.com/usart/" target="_blank" aria-label=" (opens in a new tab)" rel="noreferrer noopener">シリアル通信USART【STM32のUSART詳細】</a></strong>」および「<strong><a href="https://depfields.com/monitor-debug-apl/">シリアルモニター【STM32シリアル通信】</a></strong>」で詳細を解説しています。</p>



<figure class="wp-block-image size-large is-resized"><a href="https://depfields.com/wp-content/uploads/2020/09/ledoutput-and-monitor.jpg"><img decoding="async" src="https://depfields.com/wp-content/uploads/2020/09/ledoutput-and-monitor.jpg" alt="" class="wp-image-5763" width="513" height="416" srcset="https://depfields.com/wp-content/uploads/2020/09/ledoutput-and-monitor.jpg 512w, https://depfields.com/wp-content/uploads/2020/09/ledoutput-and-monitor-300x243.jpg 300w" sizes="(max-width: 513px) 100vw, 513px" /></a><figcaption>LEDおよびモニター出力</figcaption></figure>



<figure class="wp-block-image size-large is-resized"><a href="https://depfields.com/wp-content/uploads/2020/09/heartbeat-monitor.jpg"><img decoding="async" src="https://depfields.com/wp-content/uploads/2020/09/heartbeat-monitor.jpg" alt="" class="wp-image-6474" width="580" height="462" srcset="https://depfields.com/wp-content/uploads/2020/09/heartbeat-monitor.jpg 539w, https://depfields.com/wp-content/uploads/2020/09/heartbeat-monitor-300x239.jpg 300w" sizes="(max-width: 580px) 100vw, 580px" /></a><figcaption>心拍数モニター</figcaption></figure>



<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-media-text is-stacked-on-mobile" style="grid-template-columns:76% auto"><figure class="wp-block-media-text__media"><video controls src="https://depfields.com/wp-content/uploads/2022/02/heatbeat1.mp4"></video></figure><div class="wp-block-media-text__content">
<p class="has-large-font-size"></p>
</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="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>以上が 基本的な心拍数モニターのプログラム構成です。LEDの点滅をPWM出力の調光にしてみたり、シリアル通信をWiFiで実現してみたり、いろいろと組み合わせて発展していくとよいでしょう。</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='w3eden'><!-- WPDM Link Template: Default Template -->

<div class="link-template-default card mb-2">
    <div class="card-body">
        <div class="media">
            <div class="mr-3 img-48"><img class="wpdm_icon" alt="アイコン"   src="https://depfields.com/wp-content/plugins/download-manager/assets/file-type-icons/box_download.png" /></div>
            <div class="media-body">
                <h3 class="package-title"><a href='https://depfields.com/download/heartbeat-monitor/'>心拍数モニター</a></h3>
                <div class="text-muted text-small"><i class="fas fa-copy"></i> 1 ファイル <i class="fas fa-hdd ml-3"></i> 7.49 KB</div>
            </div>
            <div class="ml-3">
                <a href='#unlock' class='wpdm-download-link wpdm-download-locked btn btn-primary ' data-package='5780'>ダウンロード</a>
            </div>
        </div>
    </div>
</div>

</div>



<div class="linkcard"><div class="lkc-external-wrap"><a class="lkc-link no_icon" href="https://en.depfields.com/heartbeat/" 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/2704a55c0b9e70c62144f796c598a94c1f543c3a467c53d743637b07b23743b4.jpeg" alt="" /></figure><div class="lkc-title"><div class="lkc-title-text">Heart rate monitor using pulse sensor and STM32 Nucleo | Most Powerful Bible ...</div></div><div class="lkc-url">https://en.depfields.com/heartbeat/</div><div class="lkc-excerpt">Try an application that counts the pulse, which is a slow pulse, and displays the heart rate per minute.  Creating a pulse rate sensor using a photo reflector and operational amplifierThis section provides an explanation of</div></div><div class="clear"></div></div></a></div></div><p>The post <a href="https://depfields.com/heartbeat/">脈拍センサーとSTM32Nucleoで心拍数を測ってみる</a> first appeared on <a href="https://depfields.com">即戦力モノづくり!エンジニアへの道標</a>.</p>]]></content:encoded>
					
		
		<enclosure url="https://depfields.com/wp-content/uploads/2022/02/heartbeat0.mp4" length="13090962" type="video/mp4" />
<enclosure url="https://depfields.com/wp-content/uploads/2022/02/heatbeat1.mp4" length="14265864" type="video/mp4" />

			</item>
		<item>
		<title>複数チャネル連続AD変換(DMA)アプリ【STM32のADC】</title>
		<link>https://depfields.com/adc-dma-apl/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=adc-dma-apl</link>
		
		<dc:creator><![CDATA[めかのとろ]]></dc:creator>
		<pubDate>Tue, 16 Jun 2020 12:51:09 +0000</pubDate>
				<category><![CDATA[ADコンバータを使ったアプリ]]></category>
		<category><![CDATA[AD変換]]></category>
		<guid isPermaLink="false">https://depfields.com/?page_id=3542</guid>

					<description><![CDATA[<p>STM32マイコンのADCで複数チャネルのアナログ信号を連続で自動変換してメモリに取得する実用的なアプリです。完全に理解してぜひ活用してください。 &#160;2チャンネル分のアナログ変換値をDMAでメモリに変換する場合 [&#8230;]</p>
<p>The post <a href="https://depfields.com/adc-dma-apl/">複数チャネル連続AD変換(DMA)アプリ【STM32のADC】</a> first appeared on <a href="https://depfields.com">即戦力モノづくり!エンジニアへの道標</a>.</p>]]></description>
										<content:encoded><![CDATA[<div class="veu_autoEyeCatchBox"><img width="640" height="443" src="https://depfields.com/wp-content/uploads/2020/05/797484_s.jpg" class="attachment-large size-large wp-post-image" alt="" decoding="async" srcset="https://depfields.com/wp-content/uploads/2020/05/797484_s.jpg 640w, https://depfields.com/wp-content/uploads/2020/05/797484_s-300x208.jpg 300w" sizes="(max-width: 640px) 100vw, 640px" /></div>
<p class="vk_block-margin-sm--margin-top vk_block-margin-sm--margin-bottom"><strong><a href="https://depfields.com/adc/" target="_blank" rel="noreferrer noopener">STM32マイコンのADC</a></strong>で複数チャネルのアナログ信号を連続で自動変換してメモリに取得する実用的なアプリです。完全に理解してぜひ活用してください。</p>



<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>これまでは１つのチャネルのAD変換を扱ってきました。<br>ここではピンPA0とPA1に入力したアナログ電圧を読み込むために複数のチャネルをレギュラー変換グループに登録してからDMAによりメモリに転送するプログラムを解説します。</p>
</div></div></div>



<p><span style="background-color: #003300; color: #ffffff;">&nbsp;2チャンネル分のアナログ変換値をDMAでメモリに変換する場合：&nbsp;</span></p>



<ul><li>AD変換値を格納する変数（メモリ）をチャネル数分準備する。<br>2CHの場合は、<strong><span data-color="#fffd6b" style="background: linear-gradient(transparent 60%,rgba(255, 253, 107, 0.7) 0);" class="vk_highlighter">ADCValue[0]</span></strong>と<strong><span data-color="#fffd6b" style="background: linear-gradient(transparent 60%,rgba(255, 253, 107, 0.7) 0);" class="vk_highlighter">ADCValue[1]</span></strong>の2個分。</li><li>DMA設定（DMA_AD1_Configuration関数）で格納変数のアドレス<strong>&amp;ADValue</strong>を指定</li><li>DMA.BufferSize(バッファサイズ）にチャネル数<strong>2</strong>を指定</li><li>DMA.MemoryInc（メモリインクリメント）を<strong>有効</strong>に指定<br></li></ul>



<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>2チャンネル分のアナログ変換値を格納するメモリを<strong><span data-color="#fffd6b" style="background: linear-gradient(transparent 60%,rgba(255, 253, 107, 0.7) 0);" class="vk_highlighter">配列で準備</span></strong>し、<strong>その先頭アドレスをDMA設定時に指定</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>DMAのバッファサイズを準備した<strong><span data-color="#fffd6b" style="background: linear-gradient(transparent 60%,rgba(255, 253, 107, 0.7) 0);" class="vk_highlighter">配列と同じ数</span></strong>2に指定して、メモリインクリメントを有効にすると、<strong><span data-color="#fffd6b" style="background: linear-gradient(transparent 60%,rgba(255, 253, 107, 0.7) 0);" class="vk_highlighter">自動的に</span></strong>ADCのチャンネルに応じてメモリへ転送を繰り返します。</p>
</div></div></div>



<div class='w3eden'><!-- WPDM Link Template: Default Template -->

<div class="link-template-default card mb-2">
    <div class="card-body">
        <div class="media">
            <div class="mr-3 img-48"><img class="wpdm_icon" alt="アイコン"   src="https://depfields.com/wp-content/plugins/download-manager/assets/file-type-icons/box_download.png" /></div>
            <div class="media-body">
                <h3 class="package-title"><a href='https://depfields.com/download/adc-2ch-dma/'>複数チャネル連続AD変換(DMA)</a></h3>
                <div class="text-muted text-small"><i class="fas fa-copy"></i> 1 ファイル <i class="fas fa-hdd ml-3"></i> 5.45 KB</div>
            </div>
            <div class="ml-3">
                <a href='#unlock' class='wpdm-download-link wpdm-download-locked btn btn-primary ' data-package='3545'>ダウンロード</a>
            </div>
        </div>
    </div>
</div>

</div>



<p></p>



<div class="linkcard"><div class="lkc-external-wrap"><a class="lkc-link no_icon" href="https://en.depfields.com/adc-dma-apl/" 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/f7a1e992f036d3901dffc9f74a5a8b6ea55f9e9f70b7f12891658755a40d338c.jpeg" alt="" /></figure><div class="lkc-title"><div class="lkc-title-text">Multi-channel continuous ADC (DMA) application [ADC of STM32] | Most Powerful...</div></div><div class="lkc-url">https://en.depfields.com/adc-dma-apl/</div><div class="lkc-excerpt">This is a practical application that automatically converts multiple channels of analog signals in succession on an STM32 MCU and retrieves them into memory. Please understand it completely and make use of it by all means.So far I hav</div></div><div class="clear"></div></div></a></div></div><p>The post <a href="https://depfields.com/adc-dma-apl/">複数チャネル連続AD変換(DMA)アプリ【STM32のADC】</a> first appeared on <a href="https://depfields.com">即戦力モノづくり!エンジニアへの道標</a>.</p>]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>連続AD変換完了時割り込みアプリ【STM32のADC】</title>
		<link>https://depfields.com/adc-continuous-it-apl/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=adc-continuous-it-apl</link>
		
		<dc:creator><![CDATA[めかのとろ]]></dc:creator>
		<pubDate>Tue, 16 Jun 2020 10:02:21 +0000</pubDate>
				<category><![CDATA[ADコンバータを使ったアプリ]]></category>
		<category><![CDATA[AD変換]]></category>
		<guid isPermaLink="false">https://depfields.com/?page_id=3530</guid>

					<description><![CDATA[<p>AD変換と割り込みの組み合わせの紹介プログラムです。AD変換完了のたびに割り込みが発生することになっていて、このままでは割り込みの頻度が多すぎるため実用的ではないですが学習向けとして割り込みを理解してください。 割り込み [&#8230;]</p>
<p>The post <a href="https://depfields.com/adc-continuous-it-apl/">連続AD変換完了時割り込みアプリ【STM32のADC】</a> first appeared on <a href="https://depfields.com">即戦力モノづくり!エンジニアへの道標</a>.</p>]]></description>
										<content:encoded><![CDATA[<div class="veu_autoEyeCatchBox"><img width="640" height="475" src="https://depfields.com/wp-content/uploads/2020/06/oscilloscope.jpg" class="attachment-large size-large wp-post-image" alt="" decoding="async" srcset="https://depfields.com/wp-content/uploads/2020/06/oscilloscope.jpg 640w, https://depfields.com/wp-content/uploads/2020/06/oscilloscope-300x223.jpg 300w" sizes="(max-width: 640px) 100vw, 640px" /></div>
<p><strong><a href="https://depfields.com/adc/" target="_blank" rel="noreferrer noopener">AD変換</a></strong>と割り込みの組み合わせの紹介プログラムです。AD変換完了のたびに割り込みが発生することになっていて、このままでは割り込みの頻度が多すぎるため実用的ではないですが学習向けとして割り込みを理解してください。</p>



<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>AD変換完了時に割り込みを発生させて、割り込みハンドラ内の処理で変換値を取得して、100msサイクルで取得値をモニター表示するプログラムです。ADC1の割り込みハンドラは<strong><span data-color="#fffd6b" style="background: linear-gradient(transparent 60%,rgba(255, 253, 107, 0.7) 0);" class="vk_highlighter">ADC1_2_IRQHander関数</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>変換完了時に割り込みを使用する例を示したプログラムです。<br>サンプルプログラムでは<strong>割り込み発生原因の確認</strong>に<strong>ADC_GetITStatus関数</strong>を使って変換完了フラグ<strong>ADC_IT_EOC</strong>の状態をチェックしています。</p>
</div></div></div>



<p>割り込みステータスの実行例：<br>if(<strong>ADC_GetITStatus</strong>(ADC1, ADC_IT_EOC) != RESET){<br><strong>ADC_ClearITPendingBit</strong>(ADC1, ADC_IT_EOC);<br><strong>&nbsp; [割り込み時の処理]</strong><br>}</p>



<p><strong>第1引数</strong>は<strong>設定対象ADC</strong>を指定します。<br>■　設定対象ADC : ADC1 – ADC3</p>



<p><strong>第２引数</strong>は<strong>有効にする割り込みを下記いずれかのマクロで指定</strong>します。</p>



<figure class="wp-block-image size-large"><img decoding="async" width="502" height="169" src="https://depfields.com/wp-content/uploads/2020/06/adc_it_flag.jpg" alt="" class="wp-image-3540" srcset="https://depfields.com/wp-content/uploads/2020/06/adc_it_flag.jpg 502w, https://depfields.com/wp-content/uploads/2020/06/adc_it_flag-300x101.jpg 300w" sizes="(max-width: 502px) 100vw, 502px" /></figure>



<p><strong><strong>第３引数</strong>は<strong>有効か無効を指定</strong>します。<br>■　ENABLE : 有効<br>■　DISABLE : 無効</strong></p>



<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>サンプルプログラムはAD変換と割り込みの組み合わせの紹介です。AD変換完了のたびに割り込みが発生することになっていて、このままでは割り込みの頻度が多すぎるため、実用的なものにするには割り込み頻度を減らすなどの一工夫が必要です。</p>
</div></div></div>



<div class='w3eden'><!-- WPDM Link Template: Default Template -->

<div class="link-template-default card mb-2">
    <div class="card-body">
        <div class="media">
            <div class="mr-3 img-48"><img class="wpdm_icon" alt="アイコン"   src="https://depfields.com/wp-content/plugins/download-manager/assets/file-type-icons/box_download.png" /></div>
            <div class="media-body">
                <h3 class="package-title"><a href='https://depfields.com/download/adc-continuous-interrupt/'>連続AD変換完了時割り込み</a></h3>
                <div class="text-muted text-small"><i class="fas fa-copy"></i> 1 ファイル <i class="fas fa-hdd ml-3"></i> 4.87 KB</div>
            </div>
            <div class="ml-3">
                <a href='#unlock' class='wpdm-download-link wpdm-download-locked btn btn-primary ' data-package='3533'>ダウンロード</a>
            </div>
        </div>
    </div>
</div>

</div>



<div class="linkcard"><div class="lkc-external-wrap"><a class="lkc-link no_icon" href="https://en.depfields.com/adc-continuous-it-apl/" 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/ece0d4b1df88d06fd93a5d08f97d86a1abbb78e9d9118e168f43452b8f39c369.jpeg" alt="" /></figure><div class="lkc-title"><div class="lkc-title-text">Continuous ADC application with completion interrupt [ADC of STM32] | Most Po...</div></div><div class="lkc-url">https://en.depfields.com/adc-continuous-it-apl/</div><div class="lkc-excerpt">This program is an introduction to the combination of AD conversion and interrupts; interrupts are supposed to be generated each time AD conversion is completed, and as it is, the frequency of interrupts is too high to be practical, but pl</div></div><div class="clear"></div></div></a></div></div><p>The post <a href="https://depfields.com/adc-continuous-it-apl/">連続AD変換完了時割り込みアプリ【STM32のADC】</a> first appeared on <a href="https://depfields.com">即戦力モノづくり!エンジニアへの道標</a>.</p>]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>連続AD変換アプリ【STM32のADC】</title>
		<link>https://depfields.com/adc-continuous-apl/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=adc-continuous-apl</link>
		
		<dc:creator><![CDATA[めかのとろ]]></dc:creator>
		<pubDate>Tue, 16 Jun 2020 08:06:32 +0000</pubDate>
				<category><![CDATA[ADコンバータを使ったアプリ]]></category>
		<category><![CDATA[AD変換]]></category>
		<guid isPermaLink="false">https://depfields.com/?page_id=3519</guid>

					<description><![CDATA[<p>STM32マイコンADCの1chアナログ入力信号を自動で連続変換して表示するプログラムです。連続変換モードですので一度設定すると任意のタイミングで変換値を取得できます。</p>
<p>The post <a href="https://depfields.com/adc-continuous-apl/">連続AD変換アプリ【STM32のADC】</a> first appeared on <a href="https://depfields.com">即戦力モノづくり!エンジニアへの道標</a>.</p>]]></description>
										<content:encoded><![CDATA[<div class="veu_autoEyeCatchBox"><img width="640" height="469" src="https://depfields.com/wp-content/uploads/2020/06/podcast-4209770_640.jpg" class="attachment-large size-large wp-post-image" alt="" decoding="async" srcset="https://depfields.com/wp-content/uploads/2020/06/podcast-4209770_640.jpg 640w, https://depfields.com/wp-content/uploads/2020/06/podcast-4209770_640-300x220.jpg 300w" sizes="(max-width: 640px) 100vw, 640px" /></div>
<p class="vk_block-margin-sm--margin-top vk_block-margin-sm--margin-bottom"><strong><a href="https://depfields.com/adc/" target="_blank" rel="noreferrer noopener">STM32マイコンADC</a></strong>の1chアナログ入力信号を自動で連続変換して表示するプログラムです。連続変換モードですので一度設定すると任意のタイミングで変換値を取得できます。</p>



<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>1chのアナログ入力信号を自動で連続変換して表示するプログラムです。</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='w3eden'><!-- WPDM Link Template: Default Template -->

<div class="link-template-default card mb-2">
    <div class="card-body">
        <div class="media">
            <div class="mr-3 img-48"><img class="wpdm_icon" alt="アイコン"   src="https://depfields.com/wp-content/plugins/download-manager/assets/file-type-icons/box_download.png" /></div>
            <div class="media-body">
                <h3 class="package-title"><a href='https://depfields.com/download/adc-continuous/'>連続AD変換</a></h3>
                <div class="text-muted text-small"><i class="fas fa-copy"></i> 1 ファイル <i class="fas fa-hdd ml-3"></i> 4.28 KB</div>
            </div>
            <div class="ml-3">
                <a href='#unlock' class='wpdm-download-link wpdm-download-locked btn btn-primary ' data-package='3525'>ダウンロード</a>
            </div>
        </div>
    </div>
</div>

</div>



<div class="linkcard"><div class="lkc-external-wrap"><a class="lkc-link no_icon" href="https://en.depfields.com/adc-continuous-apl/" 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/c8b22e41e15bf6f641a4beb57f60c0e85530596c15d5b12788b1aeb7cf475de2.jpeg" alt="" /></figure><div class="lkc-title"><div class="lkc-title-text">Continuous ADC application [ADC of STM32] | Most Powerful Bible to Become an ...</div></div><div class="lkc-url">https://en.depfields.com/adc-continuous-apl/</div><div class="lkc-excerpt">This program automatically and continuously converts and displays the 1-channel analog input signal from STM32 ADC.  Since this is a continuous conversion mode, once set, the conversion value can be obtained at any desired timing.This</div></div><div class="clear"></div></div></a></div></div><p>The post <a href="https://depfields.com/adc-continuous-apl/">連続AD変換アプリ【STM32のADC】</a> first appeared on <a href="https://depfields.com">即戦力モノづくり!エンジニアへの道標</a>.</p>]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>都度AD変換アプリ【STM32のADC】</title>
		<link>https://depfields.com/adc-single-apl/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=adc-single-apl</link>
		
		<dc:creator><![CDATA[めかのとろ]]></dc:creator>
		<pubDate>Tue, 16 Jun 2020 07:10:55 +0000</pubDate>
				<category><![CDATA[ADコンバータを使ったアプリ]]></category>
		<category><![CDATA[AD変換]]></category>
		<guid isPermaLink="false">https://depfields.com/?page_id=3434</guid>

					<description><![CDATA[<p>STM32マイコンADCの1chアナログ入力信号を必要に応じて、手動で都度AD変換を開始して取得したデータを表示するプログラムです。</p>
<p>The post <a href="https://depfields.com/adc-single-apl/">都度AD変換アプリ【STM32のADC】</a> first appeared on <a href="https://depfields.com">即戦力モノづくり!エンジニアへの道標</a>.</p>]]></description>
										<content:encoded><![CDATA[<div class="veu_autoEyeCatchBox"><img width="400" height="250" src="https://depfields.com/wp-content/uploads/2020/06/record-player.jpg" class="attachment-large size-large wp-post-image" alt="" decoding="async" srcset="https://depfields.com/wp-content/uploads/2020/06/record-player.jpg 400w, https://depfields.com/wp-content/uploads/2020/06/record-player-300x188.jpg 300w" sizes="(max-width: 400px) 100vw, 400px" /></div>
<p class="vk_block-margin-sm--margin-top vk_block-margin-sm--margin-bottom"><strong><a href="https://depfields.com/adc/" target="_blank" rel="noreferrer noopener">STM32マイコンADC</a></strong>の1chアナログ入力信号を必要に応じて、手動で都度AD変換を開始して取得したデータを表示するプログラムです。</p>



<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>PA0から取り込んだアナログ電圧の<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>してPCへ<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-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 is-resized"><img decoding="async" src="https://depfields.com/wp-content/uploads/2020/06/ADC_NUCLEO.jpg" alt="" class="wp-image-5132" width="578" height="376" srcset="https://depfields.com/wp-content/uploads/2020/06/ADC_NUCLEO.jpg 578w, https://depfields.com/wp-content/uploads/2020/06/ADC_NUCLEO-300x195.jpg 300w" sizes="(max-width: 578px) 100vw, 578px" /><figcaption>アナログ入力</figcaption></figure>



<div class='w3eden'><!-- WPDM Link Template: Default Template -->

<div class="link-template-default card mb-2">
    <div class="card-body">
        <div class="media">
            <div class="mr-3 img-48"><img class="wpdm_icon" alt="アイコン"   src="https://depfields.com/wp-content/plugins/download-manager/assets/file-type-icons/box_download.png" /></div>
            <div class="media-body">
                <h3 class="package-title"><a href='https://depfields.com/download/adc-single/'>都度AD変換</a></h3>
                <div class="text-muted text-small"><i class="fas fa-copy"></i> 1 ファイル <i class="fas fa-hdd ml-3"></i> 4.27 KB</div>
            </div>
            <div class="ml-3">
                <a href='#unlock' class='wpdm-download-link wpdm-download-locked btn btn-primary ' data-package='3516'>ダウンロード</a>
            </div>
        </div>
    </div>
</div>

</div>



<div class="linkcard"><div class="lkc-external-wrap"><a class="lkc-link no_icon" href="https://en.depfields.com/adc-single-apl/" 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/7a5cca27be0d38873e50be89dc0749b92ccc682b0f155c7a97056b8377880d74.jpeg" alt="" /></figure><div class="lkc-title"><div class="lkc-title-text">On demand ADC application [ADC of STM32] | Most Powerful Bible to Become an E...</div></div><div class="lkc-url">https://en.depfields.com/adc-single-apl/</div><div class="lkc-excerpt">This program displays the data acquired by manually starting AD conversion of the 1-channel analog input signal of the STM32 ADC each time it is needed.Numerical data of analog voltage taken from PA0 is converted to character strings</div></div><div class="clear"></div></div></a></div></div><p>The post <a href="https://depfields.com/adc-single-apl/">都度AD変換アプリ【STM32のADC】</a> first appeared on <a href="https://depfields.com">即戦力モノづくり!エンジニアへの道標</a>.</p>]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>DMA(Direct Memory Access)【STM32のDMA詳細】</title>
		<link>https://depfields.com/dma/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=dma</link>
		
		<dc:creator><![CDATA[めかのとろ]]></dc:creator>
		<pubDate>Tue, 09 Jun 2020 15:16:30 +0000</pubDate>
				<category><![CDATA[各周辺機能(ペリフェラル)詳細]]></category>
		<category><![CDATA[AD変換]]></category>
		<category><![CDATA[USART]]></category>
		<guid isPermaLink="false">https://depfields.com/?page_id=2807</guid>

					<description><![CDATA[<p>DMAは初心者・入門者には必須のスキルではありませんが、DMAを使用するとCPUの負担が減るため、CPU能力を他の処理に回せ、省電力に寄与できますので実務では求められることもあるでしょう。この章ではADコンバータの複数チ [&#8230;]</p>
<p>The post <a href="https://depfields.com/dma/">DMA(Direct Memory Access)【STM32のDMA詳細】</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/board-2440249_640-1.jpg" class="attachment-large size-large wp-post-image" alt="" decoding="async" srcset="https://depfields.com/wp-content/uploads/2020/06/board-2440249_640-1.jpg 640w, https://depfields.com/wp-content/uploads/2020/06/board-2440249_640-1-300x200.jpg 300w" sizes="(max-width: 640px) 100vw, 640px" /></div>
<p class="vk_block-margin-sm--margin-top vk_block-margin-sm--margin-bottom">DMAは初心者・入門者には必須のスキルではありませんが、DMAを使用するとCPUの負担が減るため、CPU能力を他の処理に回せ、省電力に寄与できますので実務では求められることもあるでしょう。この章では<strong><span data-color="#fffd6b" style="background: linear-gradient(transparent 60%,rgba(255, 253, 107, 0.7) 0);" class="vk_highlighter">ADコンバータの複数チャネルデータ</span></strong>をDMAでメモリに転送する例や<strong><span data-color="#fffd6b" style="background: linear-gradient(transparent 60%,rgba(255, 253, 107, 0.7) 0);" class="vk_highlighter">USART送受信</span></strong>にDMAを使用した例で解説しています。</p>







<h2 class="wp-block-heading">STM32のDMA転送</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><span data-color="#fffd6b" style="background: linear-gradient(transparent 60%, rgba(255, 253, 107, 0.7) 0px);" class="vk_highlighter"><b>DMA</b></span>(<strong>D</strong>irect <strong>M</strong>emory <strong>A</strong>ccess)とは<strong><span data-color="#fffd6b" style="background: linear-gradient(transparent 60%,rgba(255, 253, 107, 0.7) 0);" class="vk_highlighter">直接メモリアクセス</span></strong>と呼ばれるもので通常、データはCPUを介してメモリに転送するのに対して、<strong><span data-color="#fffd6b" style="background: linear-gradient(transparent 60%,rgba(255, 253, 107, 0.7) 0);" class="vk_highlighter">DMA転送</span></strong>を行うと<strong><span data-color="#fffd6b" style="background: linear-gradient(transparent 60%,rgba(255, 253, 107, 0.7) 0);" class="vk_highlighter">CPUを介さず</span></strong>にADコンバータ、シリアル通信など<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-gallery has-nested-images columns-default is-cropped wp-block-gallery-1 is-layout-flex wp-block-gallery-is-layout-flex">
<figure class="wp-block-image size-large"><img decoding="async" width="410" height="288" data-id="2810" src="https://depfields.com/wp-content/uploads/2020/06/cpu-data-transfer.jpg" alt="" class="wp-image-2810" srcset="https://depfields.com/wp-content/uploads/2020/06/cpu-data-transfer.jpg 410w, https://depfields.com/wp-content/uploads/2020/06/cpu-data-transfer-300x211.jpg 300w" sizes="(max-width: 410px) 100vw, 410px" /><figcaption>CPUによるデータ転送</figcaption></figure>



<figure class="wp-block-image size-large"><img decoding="async" width="421" height="280" data-id="2811" src="https://depfields.com/wp-content/uploads/2020/06/dma-data-transfer.jpg" alt="" class="wp-image-2811" srcset="https://depfields.com/wp-content/uploads/2020/06/dma-data-transfer.jpg 421w, https://depfields.com/wp-content/uploads/2020/06/dma-data-transfer-300x200.jpg 300w" sizes="(max-width: 421px) 100vw, 421px" /><figcaption>DMAによるデータ転送</figcaption></figure>
</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の代わりになるものがDMAコントローラと呼ばれるものでSTM32マイコンでは最高で2個内蔵されています。STM32F10xではDMA1とDMA2の2個のコントローラがあり<strong><span data-color="#fffd6b" style="background: linear-gradient(transparent 60%,rgba(255, 253, 107, 0.7) 0);" class="vk_highlighter">AHBに接続</span></strong>されています。<br>各DMAには<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>



<figure class="wp-block-image size-large is-resized"><img decoding="async" src="https://depfields.com/wp-content/uploads/2020/06/dma1-channel.jpg" alt="" class="wp-image-2813" width="780" height="287" srcset="https://depfields.com/wp-content/uploads/2020/06/dma1-channel.jpg 780w, https://depfields.com/wp-content/uploads/2020/06/dma1-channel-300x110.jpg 300w, https://depfields.com/wp-content/uploads/2020/06/dma1-channel-768x282.jpg 768w" sizes="(max-width: 780px) 100vw, 780px" /><figcaption>ペリフェラルからDMA1に発せられるDMA要求チャネル</figcaption></figure>



<figure class="wp-block-image size-large is-resized"><img decoding="async" src="https://depfields.com/wp-content/uploads/2020/06/dma2-channel.jpg" alt="" class="wp-image-2814" width="631" height="297" srcset="https://depfields.com/wp-content/uploads/2020/06/dma2-channel.jpg 644w, https://depfields.com/wp-content/uploads/2020/06/dma2-channel-300x141.jpg 300w" sizes="(max-width: 631px) 100vw, 631px" /><figcaption>ペリフェラルからDMA2に発せられるDMA要求チャネル</figcaption></figure>



<h2 class="wp-block-heading">複数チャネルADCのDMAによるデータ転送</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>ADC1のCH1とCH2の変換値取得にDMAを使用する例をあげて解説します。</p>
</div></div></div>



<figure class="wp-block-image size-large is-resized"><img decoding="async" src="https://depfields.com/wp-content/uploads/2020/06/adc-dma-transfer.jpg" alt="" class="wp-image-2816" width="596" height="323" srcset="https://depfields.com/wp-content/uploads/2020/06/adc-dma-transfer.jpg 596w, https://depfields.com/wp-content/uploads/2020/06/adc-dma-transfer-300x163.jpg 300w" sizes="(max-width: 596px) 100vw, 596px" /><figcaption>ADCのDMAによるデータ転送</figcaption></figure>



<figure class="wp-block-image size-large"><img decoding="async" width="621" height="632" src="https://depfields.com/wp-content/uploads/2020/06/adc-dma-setting.png" alt="" class="wp-image-10073" srcset="https://depfields.com/wp-content/uploads/2020/06/adc-dma-setting.png 621w, https://depfields.com/wp-content/uploads/2020/06/adc-dma-setting-295x300.png 295w" sizes="(max-width: 621px) 100vw, 621px" /></figure>



<p><span style="background-color: #003300; color: #ffffff;">&nbsp;①　使用するDMAにクロック供給&nbsp;</span></p>



<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">ADC1はDMA要求がDMA1のCH1に発せられるので使用するDMA1にクロックを供給</span></strong>します。DMAはAHBに接続していますのでAHBに供給します。</p>
</div></div></div>



<p>設定例： RCC_AHBPeriphClockCmd(RCC_AHBPeriph_DMA1, ENABLE);//DMA1にクロック供給</p>



<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>第1引数は下表に示すAHBに接続するペリフェラルを指定します。</p>
</div></div></div>



<figure class="wp-block-image size-large is-resized"><img decoding="async" src="https://depfields.com/wp-content/uploads/2020/06/ahb-peripheral.jpg" alt="" class="wp-image-2818" width="388" height="336" srcset="https://depfields.com/wp-content/uploads/2020/06/ahb-peripheral.jpg 420w, https://depfields.com/wp-content/uploads/2020/06/ahb-peripheral-300x260.jpg 300w" sizes="(max-width: 388px) 100vw, 388px" /><figcaption>AHBに接続するペリフェラル用クロック供給関数へのマクロ</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>クロック供給関数RCC_AHBPeriphClockCmdの第2引数が<strong>ENABLEで供給開始、DISABLEで供給停止</strong>となります。</p>
</div></div></div>



<p><span style="background-color: #003300; color: #ffffff;">&nbsp;②　DMA1_CH1初期設定&nbsp;</span></p>



<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>ADC1はDMA1のチャネル1を使用しているので<strong><span data-color="#fffd6b" style="background: linear-gradient(transparent 60%,rgba(255, 253, 107, 0.7) 0);" class="vk_highlighter">DMA1_CH1の初期設定を実行</span></strong>します。はじめの<strong><span data-color="#fffd6b" style="background: linear-gradient(transparent 60%,rgba(255, 253, 107, 0.7) 0);" class="vk_highlighter">DMA_Deinit関数</span></strong>は<strong>リセット直後の初期状態に戻すもの</strong>で一応実行しておきます。関数の引数には<strong>設定対象のDMAのチャネル(DMA<em>x</em>_Channel<em>y</em>)を指定</strong>(<em>x</em>:1-2, <em>y</em>:1-7)します。</p>
</div></div></div>



<p>DMA1の初期化関数設定例： DMA_Init(DMA1_Channel1, &amp;DMA_InitStructure);</p>



<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">DMA_Init関数を実行</span></strong>します。関数の第1引数には<strong>DMA_Dinit関数と同じものを指定</strong>し、第2引数は<strong>構造体メンバ</strong>になっていて以下に示します。</p>
</div></div></div>



<figure class="wp-block-image size-large"><img decoding="async" width="658" height="81" src="https://depfields.com/wp-content/uploads/2020/06/dma-member1.jpg" alt="" class="wp-image-2820" srcset="https://depfields.com/wp-content/uploads/2020/06/dma-member1.jpg 658w, https://depfields.com/wp-content/uploads/2020/06/dma-member1-300x37.jpg 300w" sizes="(max-width: 658px) 100vw, 658px" /></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">データレジスタ（ADC_DR）のアドレスを指定</span></strong>します。<br>これはペリフェラルライブラリstm32f10x.h内で定義されている<strong><span data-color="#fffd6b" style="background: linear-gradient(transparent 60%,rgba(255, 253, 107, 0.7) 0);" class="vk_highlighter">ADC1のアドレスのレジスタ名(DR)で指定</span></strong>しておきます。実際のアドレスはレファレンスマニュアルに記載しているもの((uint32_t)0x4001244C)で直接指定してもよいです。</p>
</div></div></div>



<figure class="wp-block-image size-large"><img decoding="async" width="656" height="82" src="https://depfields.com/wp-content/uploads/2020/06/dma-member2.jpg" alt="" class="wp-image-2822" srcset="https://depfields.com/wp-content/uploads/2020/06/dma-member2.jpg 656w, https://depfields.com/wp-content/uploads/2020/06/dma-member2-300x38.jpg 300w" sizes="(max-width: 656px) 100vw, 656px" /></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">メモリ側のアドレス</span></strong>を指定します。この例では<strong>配列変数ADCConvertedValue[2]</strong>のアドレスとして<strong>&amp;ADCConvertedValueと指定</strong>しています。</p>
</div></div></div>



<figure class="wp-block-image size-large"><img decoding="async" width="652" height="126" src="https://depfields.com/wp-content/uploads/2020/06/dma-member3.jpg" alt="" class="wp-image-2825" srcset="https://depfields.com/wp-content/uploads/2020/06/dma-member3.jpg 652w, https://depfields.com/wp-content/uploads/2020/06/dma-member3-300x58.jpg 300w" sizes="(max-width: 652px) 100vw, 652px" /></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">データの転送方向を指定</span></strong>します。ACコンバータの変換値レジスタからメモリの場合はDMA_DIR_PeripheralSRTを指定します。</p>
</div></div></div>



<figure class="wp-block-image size-large"><img decoding="async" width="652" height="166" src="https://depfields.com/wp-content/uploads/2020/06/dma-member4.jpg" alt="" class="wp-image-2826" srcset="https://depfields.com/wp-content/uploads/2020/06/dma-member4.jpg 652w, https://depfields.com/wp-content/uploads/2020/06/dma-member4-300x76.jpg 300w" sizes="(max-width: 652px) 100vw, 652px" /></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">DMAチャネルの優先度</span></strong>はDMA_Priorith_High(高)を指定しておきます。</p>
</div></div></div>



<figure class="wp-block-image size-large is-resized"><img decoding="async" src="https://depfields.com/wp-content/uploads/2020/06/dma-member5.jpg" alt="" class="wp-image-2828" width="658" height="82" srcset="https://depfields.com/wp-content/uploads/2020/06/dma-member5.jpg 662w, https://depfields.com/wp-content/uploads/2020/06/dma-member5-300x38.jpg 300w" sizes="(max-width: 658px) 100vw, 658px" /></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">転送するデータ数</span></strong>を指定します。<strong><span data-color="#fffd6b" style="background: linear-gradient(transparent 60%,rgba(255, 253, 107, 0.7) 0);" class="vk_highlighter">2チャネル分</span></strong>であれば<strong><span data-color="#fffd6b" style="background: linear-gradient(transparent 60%,rgba(255, 253, 107, 0.7) 0);" class="vk_highlighter">2</span></strong>となります。</p>
</div></div></div>



<figure class="wp-block-image size-large"><img decoding="async" width="663" height="121" src="https://depfields.com/wp-content/uploads/2020/06/dma-member6.png" alt="" class="wp-image-10069" srcset="https://depfields.com/wp-content/uploads/2020/06/dma-member6.png 663w, https://depfields.com/wp-content/uploads/2020/06/dma-member6-300x55.png 300w" sizes="(max-width: 663px) 100vw, 663px" /></figure>



<figure class="wp-block-image size-full"><img decoding="async" width="651" height="111" src="https://depfields.com/wp-content/uploads/2020/06/dma-member7.jpg" alt="" class="wp-image-11471" srcset="https://depfields.com/wp-content/uploads/2020/06/dma-member7.jpg 651w, https://depfields.com/wp-content/uploads/2020/06/dma-member7-300x51.jpg 300w" sizes="(max-width: 651px) 100vw, 651px" /></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>DMA_PeripheralInc</strong>と<strong>DMA_MemoryInc</strong>はデータ転送時に<strong>転送ごとにメモリのアドレスを自動的に増やしてくれます</strong>。</p>
</div></div></div>



<figure class="wp-block-image size-large"><img decoding="async" width="657" height="140" src="https://depfields.com/wp-content/uploads/2020/06/dma-member8.jpg" alt="" class="wp-image-2831" srcset="https://depfields.com/wp-content/uploads/2020/06/dma-member8.jpg 657w, https://depfields.com/wp-content/uploads/2020/06/dma-member8-300x64.jpg 300w" sizes="(max-width: 657px) 100vw, 657px" /></figure>



<figure class="wp-block-image size-large"><img decoding="async" width="652" height="136" src="https://depfields.com/wp-content/uploads/2020/06/dma-member9.jpg" alt="" class="wp-image-2832" srcset="https://depfields.com/wp-content/uploads/2020/06/dma-member9.jpg 652w, https://depfields.com/wp-content/uploads/2020/06/dma-member9-300x63.jpg 300w" sizes="(max-width: 652px) 100vw, 652px" /></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>DMA_PeripheralDataSizeとDMA_MemoryDataSizeはそれぞれ<strong>ペリフェラルとメモリのデータビット長を指定</strong>します。ADCの扱うデータ長は16ビットなので<strong>HalfWord</strong>を指定しています。</p>
</div></div></div>



<figure class="wp-block-image size-large is-resized"><img decoding="async" src="https://depfields.com/wp-content/uploads/2020/06/dma-member10.jpg" alt="" class="wp-image-2833" width="648" height="116" srcset="https://depfields.com/wp-content/uploads/2020/06/dma-member10.jpg 658w, https://depfields.com/wp-content/uploads/2020/06/dma-member10-300x54.jpg 300w" sizes="(max-width: 648px) 100vw, 648px" /></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 is-resized"><img decoding="async" src="https://depfields.com/wp-content/uploads/2020/06/dma-member11.jpg" alt="" class="wp-image-2834" width="658" height="118" srcset="https://depfields.com/wp-content/uploads/2020/06/dma-member11.jpg 667w, https://depfields.com/wp-content/uploads/2020/06/dma-member11-300x54.jpg 300w" sizes="(max-width: 658px) 100vw, 658px" /></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>



<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">DMA_Init(DMA1_Channel1, &amp;DMA_InitStructure)</span></strong>を実行します。</p>
</div></div></div>



<p><span style="background-color: #003300; color: #ffffff;">&nbsp;③　DMA1の有効化&nbsp;</span></p>



<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>これまででDMAの初期化ができましたのでここで<strong><span data-color="#fffd6b" style="background: linear-gradient(transparent 60%,rgba(255, 253, 107, 0.7) 0);" class="vk_highlighter">DMA_Cmd関数を実行</span></strong>して<strong><span data-color="#fffd6b" style="background: linear-gradient(transparent 60%,rgba(255, 253, 107, 0.7) 0);" class="vk_highlighter">DMAを有効化</span></strong>します。</p>
</div></div></div>



<p>DMA有効化関数実行例：　DMA_Cmd(DMA1_Channel1, ENABLE);</p>



<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>関数の第1引数には<strong>設定対象のDMAのチャネル(DMA<em>x</em>_Channel<em>y</em>))を指定</strong>(<em>x</em>:1-2, <em>y</em>:1-7)し、第2引数は<strong>ENABLEで有効、DISABLEで無効</strong>となります。</p>
</div></div></div>



<p><span style="background-color: #003300; color: #ffffff;">&nbsp;④　DMA1要求の有効化&nbsp;</span></p>



<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>ここまでで、DMAの初期設定は完了し、有効化したのでスタンバイ状態です。実際にデータの転送を始めるには各ペリフェラルからDMA転送開始させるための<strong><span data-color="#fffd6b" style="background: linear-gradient(transparent 60%,rgba(255, 253, 107, 0.7) 0);" class="vk_highlighter">DMA要求の有効化</span></strong>を行う必要があります。サンプル例ではADコンバータのADC1のチャネル1とチャネル2の変換と同時に転送を開始続けるために<strong><span data-color="#fffd6b" style="background: linear-gradient(transparent 60%,rgba(255, 253, 107, 0.7) 0);" class="vk_highlighter">ADC_DMACmd関数を実行</span></strong>します。</p>
</div></div></div>



<p>DMA要求の有効化関数の実行例：ADC_DMACmd(ADC1, ENABLE);</p>



<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>関数の第1引数には<strong>設定対象のADコンバータ(ADC1-3：マイコンによります)を指定</strong>し、第2引数は<strong>ENABLEで有効、DISABLEで無効</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>これでADコンバータでの2チャンネル分の変換と同時に指定したメモリへ変換値が自動的に繰り返し転送されます。</p>
</div></div></div>



<h2 class="wp-block-heading">シリアル通信のDMA転送</h2>



<h3 class="wp-block-heading">文字列受信DMA転送</h3>



<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>DMAをつかったUSART通信の受信プログラムは比較的に単純です。<br>ここでは受信データ6文字分をDMAによりシリアル通信受信レジスタからメモリに自動転送する例を解説します</p>
</div></div></div>



<figure class="wp-block-image size-large is-resized"><img decoding="async" src="https://depfields.com/wp-content/uploads/2020/06/usart-dma-receive.jpg" alt="" class="wp-image-2858" width="566" height="260" srcset="https://depfields.com/wp-content/uploads/2020/06/usart-dma-receive.jpg 676w, https://depfields.com/wp-content/uploads/2020/06/usart-dma-receive-300x138.jpg 300w" sizes="(max-width: 566px) 100vw, 566px" /><figcaption>シリアル通信DMA受信</figcaption></figure>



<figure class="wp-block-image size-large"><img decoding="async" width="658" height="792" src="https://depfields.com/wp-content/uploads/2020/06/usart-dma-rx-setting1.png" alt="" class="wp-image-10075" srcset="https://depfields.com/wp-content/uploads/2020/06/usart-dma-rx-setting1.png 658w, https://depfields.com/wp-content/uploads/2020/06/usart-dma-rx-setting1-249x300.png 249w" sizes="(max-width: 658px) 100vw, 658px" /></figure>



<p><span style="background-color: #003300; color: #ffffff;">&nbsp;①　データ格納変数など準備&nbsp;</span></p>



<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>シリアルUSART通信の受信においてここでは<strong>DMAで<span data-color="#fffd6b" style="background: linear-gradient(transparent 60%,rgba(255, 253, 107, 0.7) 0);" class="vk_highlighter">6文字分転送する設定（6文字の文字列）</span></strong>にするため、変数など準備します。ここでは<strong><span data-color="#fffd6b" style="background: linear-gradient(transparent 60%,rgba(255, 253, 107, 0.7) 0);" class="vk_highlighter">配列RxData[]に受信文字を格納</span></strong>します。</p>
</div></div></div>



<p><span style="background-color: #003300; color: #ffffff;">&nbsp;②　DMA1(USART3_RX)にクロック供給&nbsp;</span></p>



<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">USART3受信はDMA要求がDMA1のCH3に発せられるので使用するDMA1にクロックを供給</span></strong>します。DMAはAHBに接続していますのでAHBに供給します。</p>
</div></div></div>



<p><span style="background-color: #003300; color: #ffffff;">&nbsp;③　DMA1_CH3(USART3_RX)のIRQ割り込み</span><span style="background-color: #003300; color: #ffffff;">設定</span></p>



<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>今回はDMAで受信データがメモリに転送完了したときに<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">優先度を設定します（優先度0)</span></strong>。</p>
</div></div></div>



<p><span style="background-color: #003300; color: #ffffff;">&nbsp;④　DMA1_CH3初期設定&nbsp;</span></p>



<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>DMAの初期設定をします。<strong><span data-color="#fffd6b" style="background: linear-gradient(transparent 60%,rgba(255, 253, 107, 0.7) 0);" class="vk_highlighter">転送先のメモリRxData[]のアドレス</span></strong>、<strong><span data-color="#fffd6b" style="background: linear-gradient(transparent 60%,rgba(255, 253, 107, 0.7) 0);" class="vk_highlighter">転送数(RX_BUFFER)</span></strong>、<strong><span data-color="#fffd6b" style="background: linear-gradient(transparent 60%,rgba(255, 253, 107, 0.7) 0);" class="vk_highlighter">転送データは1文字8bitなのでDataSizeはByte</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>パラメータを構造体メンバに設定してからADCの時と同様に<strong><span data-color="#fffd6b" style="background: linear-gradient(transparent 60%,rgba(255, 253, 107, 0.7) 0);" class="vk_highlighter">DMA_Init関数を実行</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">DMAの転送が完了した時点で割り込み処理</span></strong>を行いたいために転送完了割り込みを<strong><span data-color="#fffd6b" style="background: linear-gradient(transparent 60%,rgba(255, 253, 107, 0.7) 0);" class="vk_highlighter">DMA_ITConfig関数で有効化</span></strong>します。</p>
</div></div></div>



<p>DMA転送完了割り込み有効化実行例：DMA_ITConfig(DMA1_Channel3, DMA_IT_TC, ENABLE);</p>



<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>第1引数には<strong>設定対象のDMAのチャネル(DMA<em>x</em>_Channel<em>y</em>))を指定(x:1-2, y:1-7)</strong>し、第2引数は<strong>割り込み発生要因</strong>、第3引数は<strong>ENABLEで割り込み有効、DISABLEで割り込み無効</strong>となります。</p>
</div></div></div>



<figure class="wp-block-image size-large"><img decoding="async" width="488" height="139" src="https://depfields.com/wp-content/uploads/2020/06/dma-it.jpg" alt="" class="wp-image-2873" srcset="https://depfields.com/wp-content/uploads/2020/06/dma-it.jpg 488w, https://depfields.com/wp-content/uploads/2020/06/dma-it-300x85.jpg 300w" sizes="(max-width: 488px) 100vw, 488px" /></figure>



<p><span style="background-color: #003300; color: #ffffff;">&nbsp;⑤　DMA1の有効化</span></p>



<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>設定終了後、DMA_Cmd関数を実行してDMAを有効化します。</p>
</div></div></div>



<p><span style="background-color: #003300; color: #ffffff;">&nbsp;⑥　USART3の設定およびDMA1(USART3_RX)要求の有効化</span></p>



<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>USART3の初期設定をしてから、DMA転送開始させるための<strong><span data-color="#fffd6b" style="background: linear-gradient(transparent 60%,rgba(255, 253, 107, 0.7) 0);" class="vk_highlighter">DMA要求の有効化</span></strong>します。USARTのDMA要求は<strong><span data-color="#fffd6b" style="background: linear-gradient(transparent 60%,rgba(255, 253, 107, 0.7) 0);" class="vk_highlighter">USART_DMACmd関数で実行</span></strong>します。関数の第1引数には<strong>設定対象のUSART</strong>を指定し、第2引数には<strong>設定対象のDMA要求</strong>を、第3引数は<strong>ENABLEで有効、DISABLEで無効</strong>となります。</p>
</div></div></div>



<figure class="wp-block-image size-large"><img decoding="async" width="485" height="282" src="https://depfields.com/wp-content/uploads/2020/06/usart-dmacmd.jpg" alt="" class="wp-image-2875" srcset="https://depfields.com/wp-content/uploads/2020/06/usart-dmacmd.jpg 485w, https://depfields.com/wp-content/uploads/2020/06/usart-dmacmd-300x174.jpg 300w" sizes="(max-width: 485px) 100vw, 485px" /></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>これより、シリアルUSART3で受信が発生するたびにデータが自動でメモリRxData[]に転送されます。</p>
</div></div></div>



<figure class="wp-block-image size-large"><img decoding="async" width="608" height="319" src="https://depfields.com/wp-content/uploads/2020/06/usart-dma-rx-setting2.jpg" alt="" class="wp-image-2854" srcset="https://depfields.com/wp-content/uploads/2020/06/usart-dma-rx-setting2.jpg 608w, https://depfields.com/wp-content/uploads/2020/06/usart-dma-rx-setting2-300x157.jpg 300w" sizes="(max-width: 608px) 100vw, 608px" /></figure>



<p><span style="background-color: #003300; color: #ffffff;">&nbsp;⑦　通常アプリ内の処理&nbsp;</span></p>



<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>この例では<strong><span data-color="#fffd6b" style="background: linear-gradient(transparent 60%,rgba(255, 253, 107, 0.7) 0);" class="vk_highlighter">割り込みが発生したときだけ判別フラグrx_flagが1</span></strong>になるので、判別に応じて処理を行います。</p>
</div></div></div>



<p><span style="background-color: #003300; color: #ffffff;">&nbsp;⑧　DMA割り込みハンドラ&nbsp;</span></p>



<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>DMAで転送が完了すると割り込みが発生し、割り込みハンドラDMA1 Channel3 USART3_RXが起動します。この割り込みハンドラが起動したときに、割り込み要因が転送完了であるかどうかを判別するために、<strong>DMA_GetITStatus</strong>関数を実行して確認します。</p>
</div></div></div>



<p>DMA割り込み有効化関数実行例：　DMA_GetITStatus(DMA1_IT_TC3);</p>



<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>DMA_ClearITPengingBit</strong>関数で割り込みビットフラグをクリア（0にする）しておきます。割り込み処理としては、<strong><span data-color="#fffd6b" style="background: linear-gradient(transparent 60%,rgba(255, 253, 107, 0.7) 0);" class="vk_highlighter">割り込み判別フラグrx_flagを1に設定</span></strong>すると、アプリケーション内で<strong><span data-color="#fffd6b" style="background: linear-gradient(transparent 60%,rgba(255, 253, 107, 0.7) 0);" class="vk_highlighter">判別フラグが1のときだけ受信処理を実行</span></strong>できます。</p>
</div></div></div>



<p>DMA割り込みフラグ(ペンディングビット)クリア関数実行例：　DMA_ClearITPendingBit(DMA1_IT_TC3);</p>



<figure class="wp-block-image size-large is-resized"><img decoding="async" src="https://depfields.com/wp-content/uploads/2020/06/dma-it-flag.jpg" alt="" class="wp-image-2877" width="471" height="137" srcset="https://depfields.com/wp-content/uploads/2020/06/dma-it-flag.jpg 483w, https://depfields.com/wp-content/uploads/2020/06/dma-it-flag-300x88.jpg 300w" sizes="(max-width: 471px) 100vw, 471px" /></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">あまり大きく重い処理はしないように注意</span></strong>します。</p>
</div></div></div>





<h3 class="wp-block-heading">文字列送信DMA転送</h3>



<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>DMAを使用した文字列送信は割り込みを使用していない基本的なものを例にあげて解説します。<br>シンプルな送信プログラムですが、DMAの働きがよくわかります。</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>文字列を格納する配列TxData[]を準備</strong>します。ここでは<strong><span data-color="#fffd6b" style="background: linear-gradient(transparent 60%,rgba(255, 253, 107, 0.7) 0);" class="vk_highlighter">文字数（配列数）</span></strong>つまりDMAに指定するBuffer_Sizeは<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>この場合は送信ごとに転送するデータ数を管理するレジスタDMA_CNDTRxの値として転送分の文字数(DMA_BufferSize)を指定する必要があります。このレジスタは転送がはじまるとインクリメント（増加）していき、指定値に達すると0に戻ります。サーキュラモードの場合はこれを繰り返すのですが、<strong><span data-color="#fffd6b" style="background: linear-gradient(transparent 60%,rgba(255, 253, 107, 0.7) 0);" class="vk_highlighter">ノーマルモードでは何もしないとレジスタ値は0のまま</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">送信のたびにDMAを初期化して転送サイズを指定</span></strong>しています。慣れてくるとこのレジスタ値だけを指定すればよいので、<strong>DMA1_Channel2 -&gt; CNDTR= <span data-color="#fffd6b" style="background: linear-gradient(transparent 60%,rgba(255, 253, 107, 0.7) 0);" class="vk_highlighter">BufferSize</span></strong>のように<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>



<figure class="wp-block-image size-large is-resized"><img decoding="async" src="https://depfields.com/wp-content/uploads/2020/06/usart-dma-transmit.jpg" alt="" class="wp-image-2865" width="503" height="321" srcset="https://depfields.com/wp-content/uploads/2020/06/usart-dma-transmit.jpg 511w, https://depfields.com/wp-content/uploads/2020/06/usart-dma-transmit-300x191.jpg 300w" sizes="(max-width: 503px) 100vw, 503px" /><figcaption>シリアル通信DMA送信</figcaption></figure>



<figure class="wp-block-image size-large is-resized"><img decoding="async" src="https://depfields.com/wp-content/uploads/2020/06/usart-dma-tx-setting1.jpg" alt="" class="wp-image-2885" width="489" height="434" srcset="https://depfields.com/wp-content/uploads/2020/06/usart-dma-tx-setting1.jpg 520w, https://depfields.com/wp-content/uploads/2020/06/usart-dma-tx-setting1-300x266.jpg 300w" sizes="(max-width: 489px) 100vw, 489px" /></figure>



<figure class="wp-block-image size-large"><img decoding="async" width="686" height="501" src="https://depfields.com/wp-content/uploads/2020/06/usart-dma-tx-setting2.png" alt="" class="wp-image-10087" srcset="https://depfields.com/wp-content/uploads/2020/06/usart-dma-tx-setting2.png 686w, https://depfields.com/wp-content/uploads/2020/06/usart-dma-tx-setting2-300x219.png 300w" sizes="(max-width: 686px) 100vw, 686px" /></figure>



<p><span style="background-color: #003300; color: #ffffff;">&nbsp;①　設定パラメータ、関数等の宣言&nbsp;</span></p>



<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>



<p><span style="background-color: #003300; color: #ffffff;">&nbsp;②③</span><span style="background-color: #003300; color: #ffffff;">　設定パラメータ、関数等の宣言&nbsp;</span></p>



<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をはじめ、初期化しておきます。</p>
</div></div></div>



<p><span style="background-color: #003300; color: #ffffff;">&nbsp;④</span><span style="background-color: #003300; color: #ffffff;">　アプリケーション内の通常処理&nbsp;</span></p>



<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>アプリケーションプログラム本体で文字列送信を実行しています。サンプルでは単に登録した文字を無限に表示するものですが、DMAとシリアル送信が機能している動作が確認できます。</p>
</div></div></div>



<p><span style="background-color: #003300; color: #ffffff;">&nbsp;⑤</span><span style="background-color: #003300; color: #ffffff;">　よく使う処理の関数化&nbsp;</span></p>



<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>今回作成した送信関数および送信関数内で使用するDMA初期化部も関数化しています。送信関数を実行し、DMA転送を開始するたびにDMA_Cmd関数を実行しています。<strong>DMA_GetFlagStatus関数</strong>を利用してDMAによる転送が完了するまで待機しています。</p>
</div></div></div>



<figure class="wp-block-image size-large is-resized"><img decoding="async" src="https://depfields.com/wp-content/uploads/2020/06/dma-flag.jpg" alt="" class="wp-image-2891" width="466" height="161" srcset="https://depfields.com/wp-content/uploads/2020/06/dma-flag.jpg 494w, https://depfields.com/wp-content/uploads/2020/06/dma-flag-300x104.jpg 300w" sizes="(max-width: 466px) 100vw, 466px" /></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>ここまでで、DMAによる転送を行ったシリアル送信の解説をしてきましたが、ここでも転送完了で待機しているためこのままではあまり実用的ではありません。DMA転送を使用する場合は、CPUの負担を減らさなければあまり意味がないため、もうひと工夫必要です。</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 style="background: #00ccff; padding: 5px 10px; color: #ffffff; border-radius: 10px 10px 0 0;"><strong>コラム</strong></div>
<div style="background: #ffffea; padding: 10px; border: 2px solid #00ccff; border-radius: 0 0 10px 10px;">
<p>実際の教材を使用したアプリケーションプログラムにおいては<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="linkcard"><div class="lkc-external-wrap"><a class="lkc-link no_icon" href="https://en.depfields.com/dma/" 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/9bdbab6fa5ea930a97b2fdc3312224e7eb6141191b4befc1b48057faef269401.jpeg" alt="" /></figure><div class="lkc-title"><div class="lkc-title-text">DMA (Direct Memory Access) [DMA details of STM32] | Most Powerful Bible to Be...</div></div><div class="lkc-url">https://en.depfields.com/dma/</div><div class="lkc-excerpt">Although DMA is not an essential skill for beginners or novice users, it may be required in practice because DMA reduces the CPU load, allowing CPU capacity to be used for other processing and contributing to power savings. In this chapter</div></div><div class="clear"></div></div></a></div></div><p>The post <a href="https://depfields.com/dma/">DMA(Direct Memory Access)【STM32のDMA詳細】</a> first appeared on <a href="https://depfields.com">即戦力モノづくり!エンジニアへの道標</a>.</p>]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>ADコンバータ【STM32のADコンバータ詳細】</title>
		<link>https://depfields.com/adc/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=adc</link>
		
		<dc:creator><![CDATA[めかのとろ]]></dc:creator>
		<pubDate>Sun, 07 Jun 2020 10:51:36 +0000</pubDate>
				<category><![CDATA[各周辺機能(ペリフェラル)詳細]]></category>
		<category><![CDATA[AD変換]]></category>
		<guid isPermaLink="false">https://depfields.com/?page_id=2595</guid>

					<description><![CDATA[<p>STM32マイコンのADコンバータはとても高機能なために、初心者・入門者は単純なものから順に理解しながらステップアップしていくのがよいと思われます。 この章では1チャンネルのアナログ入力を必要なときだけ手動で取得するシン [&#8230;]</p>
<p>The post <a href="https://depfields.com/adc/">ADコンバータ【STM32のADコンバータ詳細】</a> first appeared on <a href="https://depfields.com">即戦力モノづくり!エンジニアへの道標</a>.</p>]]></description>
										<content:encoded><![CDATA[<div class="veu_autoEyeCatchBox"><img width="640" height="469" src="https://depfields.com/wp-content/uploads/2020/06/podcast-4209770_640.jpg" class="attachment-large size-large wp-post-image" alt="" decoding="async" srcset="https://depfields.com/wp-content/uploads/2020/06/podcast-4209770_640.jpg 640w, https://depfields.com/wp-content/uploads/2020/06/podcast-4209770_640-300x220.jpg 300w" sizes="(max-width: 640px) 100vw, 640px" /></div>
<p class="vk_block-margin-sm--margin-top vk_block-margin-sm--margin-bottom">STM32マイコンのADコンバータはとても高機能なために、初心者・入門者は単純なものから順に理解しながらステップアップしていくのがよいと思われます。</p>



<p class="vk_block-margin-sm--margin-top vk_block-margin-sm--margin-bottom">この章では1チャンネルのアナログ入力を必要なときだけ手動で取得するシングルモード変換方式から複数チャネルのアナログ入力を連続して自動取得してDMA送信でメモリに転送する方式までを解説しています。</p>







<h2 class="wp-block-heading">STAM32のADコンバータ</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>マイコンにはADコンバータ（AD変換器）が内蔵されていて、アナログ信号をマイコンに取り入れてデジタル信号に変換することができます。STM32のADコンバータは12ビットの分解能でSTM32では最大3.3Vですので3.3Vを4096（=2<sup>12</sup>）分割した分解能で数値を扱うことができます。</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>STM32のADコンバータは変換速度もとても速く高性能で一つのADコンバータ回路で複数のチャネルの切り替えできる高機能なものです。複数のADコンバータをもつものもあり、単にAD変換値を取得するだけでも数種類の方法があります。この章ではこのSTM32マイコンの多機能なADコンバータの使い方について解説していきます。</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>



<p></p>



<figure class="wp-block-image size-large is-resized"><img decoding="async" src="https://depfields.com/wp-content/uploads/2020/06/analog-input.jpg" alt="" class="wp-image-2598" width="304" height="115" srcset="https://depfields.com/wp-content/uploads/2020/06/analog-input.jpg 303w, https://depfields.com/wp-content/uploads/2020/06/analog-input-300x114.jpg 300w" sizes="(max-width: 304px) 100vw, 304px" /><figcaption>ADコンバータを使ったアナログ信号入力</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>ADコンバータはアナログ信号を扱うので、少し<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>ADコンバータに接続するアナログセンサなどには内部抵抗というものをもっていてこの抵抗が小さいほど電流が流れやすいのでより高速の変換ができます。この内部抵抗は<strong><span data-color="#fffd6b" style="background: linear-gradient(transparent 60%,rgba(255, 253, 107, 0.7) 0);" class="vk_highlighter">出力インピーダンス</span></strong>とも呼ばれるもので、ADコンバータを使用する際には知っておく必要があります。</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>は直流を含む交流回路の抵抗ですが、ここでは直流の内部抵抗に置き換えて説明します。図中でADコンバータの回路においては出力インピーダンスRoと入力機器の入力インピーダンスRiの関係はRo&lt;&lt;Riが好ましいです。入力側のRiは固定のもので考えると、出力機器側のインピーダンスRoが小さいほど負荷電流iによる電圧降下の影響も小さく、入力機器側に電流も流しやすくなるからです。</p>
</div></div></div>



<figure class="wp-block-image size-large is-resized"><img decoding="async" src="https://depfields.com/wp-content/uploads/2020/06/impedance.jpg" alt="" class="wp-image-2599" width="250" height="203"/><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>STM32のデータシートによるとADコンバータと接続する機器の出力インピーダンスとAD変換にかかる時間は下表になります。これはADコンバータの供給クロックが14MHzであるときの接続できるインピーダンス最大値を示しています。この表から<strong><span data-color="#fffd6b" style="background: linear-gradient(transparent 60%,rgba(255, 253, 107, 0.7) 0);" class="vk_highlighter">インピーダンスが小さいほどAD変換にかかる時間が短い</span></strong>ことがわかります。</p>
</div></div></div>



<figure class="wp-block-image size-large is-resized"><img decoding="async" src="https://depfields.com/wp-content/uploads/2020/06/conversion-time-and-impedance.jpg" alt="" class="wp-image-2600" width="409" height="238" srcset="https://depfields.com/wp-content/uploads/2020/06/conversion-time-and-impedance.jpg 409w, https://depfields.com/wp-content/uploads/2020/06/conversion-time-and-impedance-300x175.jpg 300w" sizes="(max-width: 409px) 100vw, 409px" /><figcaption>出力インピーダンスとAD変換時間</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>まず、STM32マイコンのADコンバータの概要をまとめてから実際のプログラムを例に解説をしていきます。<br>STM32マイコンのADコンバータの設定は<strong>高機能なだけに他のペリフェラルに比べても設定項目も多い</strong>ですが、はじめに理解してさえしてしまえばあとはモジュールとしてブロック化しアプリケーションに活かすだけです。</p>
</div></div></div>



<figure class="wp-block-image size-large"><img decoding="async" src="https://depfields.com/wp-content/uploads/2020/06/adc-setting-single1.jpg" alt="" class="wp-image-2625"/><figcaption>ADコンバータ設定（シングル変換モード）</figcaption></figure>



<p><span style="background-color: #003300; color: #ffffff;">&nbsp;①　ADC1にクロック供給&nbsp;</span></p>



<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>使用するADC1コンバータにクロックを供給します。APB2バスに接続していますのでAPB2に供給します。</p>
</div></div></div>



<p><span style="background-color: #003300; color: #ffffff;">&nbsp;②　ADC1のクロック設定&nbsp;</span></p>



<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>ADコンバータはAPB2の先にあるADコンバータ専用プリスケーラーを介していますのでこの分周比をRCC_ADCCLK関数で設定します。この関数の引数RCC_PCLK2では分周比を指定します。ここでは<strong><span data-color="#fffd6b" style="background: linear-gradient(transparent 60%,rgba(255, 253, 107, 0.7) 0);" class="vk_highlighter">分周比は6分の1を指定</span></strong>し、ADコンバータへのクロックは12MHz（72MHz/6)としています。入力機器の出力インピーダンスのところでは動作クロックが14MHzを前提にしていたためにそれに最も近い12MHzに設定しています。</p>
</div></div></div>



<figure class="wp-block-image size-large is-resized"><img decoding="async" src="https://depfields.com/wp-content/uploads/2020/06/adc-prescaler.jpg" alt="" class="wp-image-2602" width="398" height="156" srcset="https://depfields.com/wp-content/uploads/2020/06/adc-prescaler.jpg 383w, https://depfields.com/wp-content/uploads/2020/06/adc-prescaler-300x117.jpg 300w" sizes="(max-width: 398px) 100vw, 398px" /><figcaption>ADCクロックのプリスケーラによる分周</figcaption></figure>



<p><span style="background-color: #003300; color: #ffffff;">&nbsp;③　ADC1入力ポートGPIOの設定&nbsp;</span></p>



<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">ADCの入力ポートGPIOの設定</span></strong>を行います。<strong><span data-color="#fffd6b" style="background: linear-gradient(transparent 60%,rgba(255, 253, 107, 0.7) 0);" class="vk_highlighter">PA1にアナログ入力</span></strong>を指定します。</p>
</div></div></div>



<p><span style="background-color: #003300; color: #ffffff;">&nbsp;④　ADコンバータの初期設定&nbsp;</span></p>



<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">ADコンバータの初期設定</span></strong>を実行します。はじめのADC_DeInit関数はリセット直後の初期状態に戻すもので一応実行しておきます。<strong><span data-color="#fffd6b" style="background: linear-gradient(transparent 60%,rgba(255, 253, 107, 0.7) 0);" class="vk_highlighter">初期化はADC_Init関数を実行</span></strong>します</p>
</div></div></div>



<p>ADコンバータ初期化関数実行例：　<strong>ADC_Init(ADC1, &amp;ADC_InitStructure);</strong></p>



<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>関数の第1引数には設定対象のADコンバータ(ADC1-３:マイコンによります)を指定し、第2引数は構造体メンバになっていて以下に示します。</p>
</div></div></div>



<figure class="wp-block-image size-large"><img decoding="async" width="704" height="334" src="https://depfields.com/wp-content/uploads/2020/06/init_member1.jpg" alt="" class="wp-image-2608" srcset="https://depfields.com/wp-content/uploads/2020/06/init_member1.jpg 704w, https://depfields.com/wp-content/uploads/2020/06/init_member1-300x142.jpg 300w" sizes="(max-width: 704px) 100vw, 704px" /></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">ADC_Mode</span></strong>メンバでは<strong>単独</strong>か<strong>複数</strong>の<strong>ADコンバータを使用するときのモードを指定</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">ADC_Mode_Independent</span></strong>）、複数のADコンバータを使用する場合に<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>例えば2つのADC1とADC2を使う場合でそれぞれ各ADコンバータのグループとして使用チャネルの変換順序を登録していると、同時に変換をし、変換後次の順序のチャネルを順次変換するのを繰り返すのが<strong>並列レギュラ変換モード</strong>(<strong><span data-color="#fffd6b" style="background: linear-gradient(transparent 60%,rgba(255, 253, 107, 0.7) 0);" class="vk_highlighter">ADC_Mode_RegSimult</span></strong>)です。他に複数のADコンバータを連動させたり、タイミングを合わせたりする方式もありますが、<strong>とりあえず<span data-color="#fffd6b" style="background: linear-gradient(transparent 60%,rgba(255, 253, 107, 0.7) 0);" class="vk_highlighter">この2つのモード</span>を知っておけばよいのではないでしょうか</strong>。他のモード詳細は各マイコンのレファレンスマニュアルに記載しています。</p>
</div></div></div>



<figure class="wp-block-image size-large"><img decoding="async" width="704" height="128" src="https://depfields.com/wp-content/uploads/2020/06/init_member2.jpg" alt="" class="wp-image-2609" srcset="https://depfields.com/wp-content/uploads/2020/06/init_member2.jpg 704w, https://depfields.com/wp-content/uploads/2020/06/init_member2-300x55.jpg 300w" sizes="(max-width: 704px) 100vw, 704px" /></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">ADC_ScanConvMode</span></strong>メンバでは1つのADコンバータには複数のチャネルを持っていて使用するチャネルの変換順序などを登録しておくのですが、<strong>この登録チャネルを一度に連続変換するのがスキャンモード</strong>で、一定数ずつ変換するのが分割スキャンモードです。複数チャネル時は<span data-color="#fffd6b" style="background: linear-gradient(transparent 60%,rgba(255, 253, 107, 0.7) 0);" class="vk_highlighter"><strong>スキャンモード</strong>（<strong>ENABLE</strong>）</span>の指定でいいと思います。</p>
</div></div></div>



<figure class="wp-block-image size-large is-resized"><img decoding="async" src="https://depfields.com/wp-content/uploads/2020/06/init_member3.jpg" alt="" class="wp-image-2610" width="702" height="125" srcset="https://depfields.com/wp-content/uploads/2020/06/init_member3.jpg 703w, https://depfields.com/wp-content/uploads/2020/06/init_member3-300x54.jpg 300w" sizes="(max-width: 702px) 100vw, 702px" /></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">ADC_ContinuousConvMode</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>と変換開始コマンドADC_SoftwareStartConvCmd関数を与えるときだけ変換を行う<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>一度変換を開始すると変換は繰り返す</strong>のでアプリケーションプログラム内で任意のタイミングで最新の変換値が取得できます。対して<strong>シングルモード</strong>は<strong>変換値を取得したいときだけ実行する</strong>ため、消費電力を抑えることができますが、変換にはある程度時間がかかるので一定時間待つ必要があります。</p>
</div></div></div>



<figure class="wp-block-image size-large"><img decoding="async" width="704" height="439" src="https://depfields.com/wp-content/uploads/2020/06/init_member4.jpg" alt="" class="wp-image-2611" srcset="https://depfields.com/wp-content/uploads/2020/06/init_member4.jpg 704w, https://depfields.com/wp-content/uploads/2020/06/init_member4-300x187.jpg 300w" sizes="(max-width: 704px) 100vw, 704px" /></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">ADC_ExternalTrigConv</span></strong>メンバはタイマイベントで変換を開始する時点を決める場合に指定します。使用しない場合は<strong>トリガなし(ADC_ExternalTrigConv_None)を指定</strong>します。</p>
</div></div></div>



<figure class="wp-block-image size-large"><img decoding="async" width="703" height="132" src="https://depfields.com/wp-content/uploads/2020/06/init_member5.jpg" alt="" class="wp-image-2612" srcset="https://depfields.com/wp-content/uploads/2020/06/init_member5.jpg 703w, https://depfields.com/wp-content/uploads/2020/06/init_member5-300x56.jpg 300w" sizes="(max-width: 703px) 100vw, 703px" /></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>STM32マイコンのADコンバータの変換結果は12ビットですが、数値を格納するレジスタは16ビットなので<strong><span data-color="#fffd6b" style="background: linear-gradient(transparent 60%,rgba(255, 253, 107, 0.7) 0);" class="vk_highlighter">格納方法を右詰か左詰の指定</span></strong>をします。通常は<strong>LSB側の下12桁右詰</strong>（<strong>ADC_DataAlign_Right</strong>）に格納でよいと思います。</p>
</div></div></div>



<figure class="wp-block-image size-large"><img decoding="async" width="705" height="82" src="https://depfields.com/wp-content/uploads/2020/06/init_member6.jpg" alt="" class="wp-image-2613" srcset="https://depfields.com/wp-content/uploads/2020/06/init_member6.jpg 705w, https://depfields.com/wp-content/uploads/2020/06/init_member6-300x35.jpg 300w" sizes="(max-width: 705px) 100vw, 705px" /></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>使用するチャネル数を指定します。サンプルでは1チャンネル使用するので<strong>1</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">ADC_Init(ADC1, &amp;ADC_InitStructure)を実行</span></strong>します。</p>
</div></div></div>



<p><span style="background-color: #003300; color: #ffffff;">&nbsp;⑤　ADコンバータの有効化&nbsp;</span></p>



<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>これまでで、ADコンバータの初期化ができましたのでここで<strong><span data-color="#fffd6b" style="background: linear-gradient(transparent 60%,rgba(255, 253, 107, 0.7) 0);" class="vk_highlighter">ADC_Cmd関数</span>を実行</strong>して<strong>ADコンバータを有効化</strong>します。</p>
</div></div></div>



<p>ADコンバータ有効化関数実行例：　ADC_Cmd(ADC1, ENABLE);</p>



<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>関数の第1引数には<strong>設定対象のADコンバータ(ADC1-3：マイコンによります)を指定</strong>し、第2引数は<strong>ENABLEで有効</strong>、<strong>DISABLEで無効</strong>となります。</p>
</div></div></div>



<p><span style="background-color: #003300; color: #ffffff;">&nbsp;⑥　ADコンバータのキャリブレーション&nbsp;</span></p>



<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> 他のペリフェラルではこれで設定は完了ですがADコンバータではもうひと手間必要です。それが、<strong><span data-color="#fffd6b" style="background: linear-gradient(transparent 60%,rgba(255, 253, 107, 0.7) 0);" class="vk_highlighter">キャリブレーション（校正）</span></strong>です。このキャリブレーションは各マイコンの製品個体差を補正するものですので<strong>ADコンバータの初期化を行うたびに実行</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><span data-color="#fffd6b" style="background: linear-gradient(transparent 60%,rgba(255, 253, 107, 0.7) 0);" class="vk_highlighter">ADC_ResetCalibration関数</span>を実行</strong>し、その後<strong>キャリブレーション</strong>を<strong><span data-color="#fffd6b" style="background: linear-gradient(transparent 60%,rgba(255, 253, 107, 0.7) 0);" class="vk_highlighter">ADC_StartCalibration関</span>数で実行</strong>します。<strong>それぞれの関数は時間がかかるためステータスで完了を確認しています</strong>。</p>
</div></div></div>



<p><span style="background-color: #003300; color: #ffffff;">&nbsp;⑦　AD変換対象の変換開始&nbsp;</span></p>



<figure class="wp-block-image size-large"><img decoding="async" width="545" height="133" src="https://depfields.com/wp-content/uploads/2020/06/adc-setting-single2.jpg" alt="" class="wp-image-2626" srcset="https://depfields.com/wp-content/uploads/2020/06/adc-setting-single2.jpg 545w, https://depfields.com/wp-content/uploads/2020/06/adc-setting-single2-300x73.jpg 300w" sizes="(max-width: 545px) 100vw, 545px" /></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>これでいつでもADコンバータによる変換値を取得できます。プログラム例では<strong>ADC1のCH1シングルモード</strong>の例ですので都度<strong><span data-color="#fffd6b" style="background: linear-gradient(transparent 60%,rgba(255, 253, 107, 0.7) 0);" class="vk_highlighter">ADC_RegularChannelConfig関数</span></strong>および<span data-color="#fffd6b" style="font-weight: bold; background: linear-gradient(transparent 60%, rgba(255, 253, 107, 0.7) 0px);" class="vk_highlighter">ADC_SoftwareStartConvCmd関数</span><b><strong>を</strong>実行</b>し<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>ADコンバータを使用するには<strong>変換の対象となるチャネル</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">ADC_RegularChannelConfig関数</span></strong>を使用して指定します。</p>
</div></div></div>



<p>レギュラ変換グループ登録関数実行例：<br>ADC_RegularChannelConfig (ADC1,ADC_Channel_1,1,ADC_SampleTime_13Cycles5);</p>



<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>関数の第1引数には<strong>設定対象のADコンバータ(ADC1-3：マイコンによります)を指定</strong>、第2引数は<strong>チャネル0から17まで指定</strong>（ADC_Channel_1 - ADC_Channel_17）、第3引数は<strong>変換順序を1から16で指定</strong>します。チャネルが1つだけの場合は1とします。 第4引数は<strong>サンプリングタイムを指定</strong>します。</p>
</div></div></div>



<figure class="wp-block-image size-large is-resized"><img decoding="async" src="https://depfields.com/wp-content/uploads/2020/06/init_member7.jpg" alt="" class="wp-image-2614" width="710" height="258" srcset="https://depfields.com/wp-content/uploads/2020/06/init_member7.jpg 704w, https://depfields.com/wp-content/uploads/2020/06/init_member7-300x109.jpg 300w" sizes="(max-width: 710px) 100vw, 710px" /><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>入力機器の出力インピーダンスが10kΩのためサンプリングタイムは13.5サイクルを指定します。</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">ADC_SoftwareStartConvCmd関数を実行して変換を開始</span></strong>します。</p>
</div></div></div>



<p>変換開始関数実行例：<br>ADC_SoftwareStartConvCmd(ADC1,<em>ENABLE</em>);//変換開始<br>while(ADC_GetFlagStatus(ADC1,ADC_FLAG_EOC)==RESET);//変換待機<br>ADCValue_CH1=ADC_GetConversionValue(ADC1);//変換値取得（16ビット）</p>



<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">都度実行</span></strong>のため、変換にかかる時間<strong>待機してから変換値を取得</strong>します。変換が完了したかどうかを<strong>ADC_GetFlagStatus関数</strong>で確認できます。この関数は使用中のADコンバータの状態をフラグで確認することができます。ここでは変換終了通知フラグのADC_FLAG_EOCがSET(=1)になるまで待機しています。</p>
</div></div></div>



<figure class="wp-block-image size-large"><img decoding="async" width="703" height="180" src="https://depfields.com/wp-content/uploads/2020/06/adc-flag.jpg" alt="" class="wp-image-2619" srcset="https://depfields.com/wp-content/uploads/2020/06/adc-flag.jpg 703w, https://depfields.com/wp-content/uploads/2020/06/adc-flag-300x77.jpg 300w" sizes="(max-width: 703px) 100vw, 703px" /></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">ADC_GetConversionValue関数</span>を実行して変換値を取得</strong>します。関数の引数は対象のADコンバータ(ADC1-3：マイコンによります)を指定します。</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">任意のタイミングでAD変換値を取得</span></strong>できます。</p>
</div></div></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">連続変換モード</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>シングルモード</strong>での設定および変換値取得までみてきました。このシングルモードは単純で、都度実行して変換値を取得するために消費電力も小さくてよいのですが、変換にかかる時間が大きいため変換が完了するまで待機しなければなりません。</p>
</div></div></div>



<figure class="wp-block-image size-large is-resized"><img decoding="async" src="https://depfields.com/wp-content/uploads/2020/06/adc-setting-continuous.jpg" alt="" class="wp-image-2621" width="538" height="535" srcset="https://depfields.com/wp-content/uploads/2020/06/adc-setting-continuous.jpg 547w, https://depfields.com/wp-content/uploads/2020/06/adc-setting-continuous-300x298.jpg 300w, https://depfields.com/wp-content/uploads/2020/06/adc-setting-continuous-150x150.jpg 150w" sizes="(max-width: 538px) 100vw, 538px" /><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">連続変換モード</span></strong>を指定してADC_SoftwareStartConvCmd関数を一度実行し変換を開始すると<strong>自動的に変換が繰り返され</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">ADC_ContinuousConvMode</span></strong>メンバを<strong><span data-color="#fffd6b" style="background: linear-gradient(transparent 60%,rgba(255, 253, 107, 0.7) 0);" class="vk_highlighter">ENABLE</span></strong>するだけです。</p>
</div></div></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">複数チャネルでの変換</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>これまではチャネル数は1つで取り扱ってきました。<strong>チャネル</strong>が<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>シングルモードで複数チャネルを変換する場合はAD変換開始のたびにレギュラ変換グループ登録ADC_RegularChannelConfig関数を実行してチャネル指定する必要があります。これは単独チャネルの変換を複数チャネル分実行するため、単純な方式なのですが効率が悪くチャネル数が多い場合は実用的とはいえません。</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>



<figure class="wp-block-image size-large is-resized"><img decoding="async" src="https://depfields.com/wp-content/uploads/2020/06/multi-chanels-adc.jpg" alt="" class="wp-image-2624" width="552" height="620" srcset="https://depfields.com/wp-content/uploads/2020/06/multi-chanels-adc.jpg 553w, https://depfields.com/wp-content/uploads/2020/06/multi-chanels-adc-267x300.jpg 267w" sizes="(max-width: 552px) 100vw, 552px" /><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>



<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>するのですが、これは<span data-color="#fffd6b" style="background: linear-gradient(transparent 60%,rgba(255, 253, 107, 0.7) 0);" class="vk_highlighter"><strong>DMA(D</strong>irect<strong> M</strong>emory<strong> A</strong>ccess<strong>)</strong></span>と呼ばれる技術が使われます④。DMAは自動的にレジスタとメモリ間の処理をCPU関与なしに行います。<strong>DMAに関してはのちに詳細を解説します</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>STM32マイコンではADコンバータは<strong><span data-color="#fffd6b" style="background: linear-gradient(transparent 60%,rgba(255, 253, 107, 0.7) 0);" class="vk_highlighter">複数チャネルの変換にはDMAと組み合わせて使うことが必要不可欠</span></strong>です。<br>連続変換によりプログラムが簡素化されたように変換にかかる時間も短縮されます。</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 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>ここまでで、ADコンバータの基本の使い方を解説してきました。<br>STM32マイコンでは実際のアプリケーションにおいて、チャネル数が増えた場合や、複数のADコンバータを同時に低電力で効率よく使用するなど高度な使い方にも対応できますが、<strong>基本はこれまでの解説のもので十分対応できます</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="linkcard"><div class="lkc-external-wrap"><a class="lkc-link no_icon" href="https://en.depfields.com/adc/" 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/c8b22e41e15bf6f641a4beb57f60c0e85530596c15d5b12788b1aeb7cf475de2.jpeg" alt="" /></figure><div class="lkc-title"><div class="lkc-title-text">AD converter [ADC details of STM32] | Most Powerful Bible to Become an Embedd...</div></div><div class="lkc-url">https://en.depfields.com/adc/</div><div class="lkc-excerpt">Because the STM32 MCU&#039;s AD converters are so sophisticated, it is recommended that beginners step up to them, starting with the simplest ones and understanding them in turn.This chapter describes the single-mode conversion method, in w</div></div><div class="clear"></div></div></a></div></div><p>The post <a href="https://depfields.com/adc/">ADコンバータ【STM32のADコンバータ詳細】</a> first appeared on <a href="https://depfields.com">即戦力モノづくり!エンジニアへの道標</a>.</p>]]></content:encoded>
					
		
		
			</item>
	</channel>
</rss>
