Project_OKI’s diary

エンジニアの勉強ブログ

STM32タイマ割り込みの設定値計算

タイマ割り込みを設定する為の、プリスケーラ値の自動計算

この記事では、STM32F401のタイマ割り込みを設定する為の、プリスケーラ値を自動計算する。

 

APBの値、設定したい割り込み間隔(時間)、Counter Periodの値から、
    設定したい割り込み間隔に設定するのに必要なPrescalerの値を算出します。
※Presclaer及びCounter Periodは、0から16bit(65535)の範囲の整数で設定できますが
    ここでは特に制限していません。
 

 入力:

 ・APB1 , APB2の値[MHz]

 ・設定したい割り込み間隔(時間)[ms]

 ・Counter Periodの値

 出力:

 ・割り込み周波数[Hz]

 ・Prescalerの値

 

1. Prescalerの自動計算

 ・入力

 APB1 or APB2 = [MHz]

 設定したい割り込み間隔(時間) = [ms]

 Counter Period= - 1

 

ーーーーーーーーーーーーーーーーーーーー

 ・出力

 割り込み周波数 = [Hz]

 Prescaler = - 1

ーーーーーーーーーーーーーーーーーーーー

 

計算の詳細については下記記事を参照

STM32マイコン_9(タイマ割り込み:LED点滅) - Project_OKI’s diary

 

4. 計算プログラム

<!DOCTYPE html>
<html lang="ja">

<head>
  <meta charset="UTF-8" />
  <meta http-equiv="X-UA-Compatible" content="IE=edge" />
  <meta name="viewport" content="width=device-width, initial-scale=1.0" />
  <title>タイマ割り込みの計算</title>
  <!-- UI kitの追加 -->
  <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/uikit@3.6.18/dist/css/uikit.min.css" />
  <!-- UIkit JS -->
  <script src="https://cdn.jsdelivr.net/npm/uikit@3.6.18/dist/js/uikit.min.js"></script>
  <script src="https://cdn.jsdelivr.net/npm/uikit@3.6.18/dist/js/uikit-icons.min.js"></script>

  <!-- JQuaryの追加 -->
  <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.6.0/jquery.min.js"></script>
  <style>
  </style>
</head>

<body>
  <h1> 目的 </h1>
  <p>STM32F401のタイマ割り込みを設定する為の、プリスケーラ値を算出するサイト</p>
  <h2>内容</h2>
  <p> APBの値、設定したい割り込み間隔(時間)、Counter Periodの値から、
    設定したい割り込み間隔に設定するのに必要なPrescalerの値を算出します。</p>
  <p> ※Presclaer及びCounter Periodは、0から16bit(65535)の範囲の整数で設定できますが
    ここでは特に制限していません。</p>

  <p>入力</p>
  <p> APB1 or APB2 = <input type"text" size="15" id="APB" value="16"> [MHz]</p>
  <p> 設定したい割り込み間隔(時間) = <input type "text" size="15" id="time" value="1">[ms]</p>
  <p> Counter Period= <input type="text" size="15" id="cntperiod" value="10"> - 1</p>

  <p>出力</p>
  <p> 割り込み周波数 = <input type "text" size="15" id="freq" value="1000">[Hz]</p>
  <p> Prescaler = <input type "text" size="15" id="prescaler" value="1600"> - 1</p>

  <!-- test.js(javascript)ファイルの読み込み -->
  <script type="text/javascript">
    //変数宣言
    $("#APB").change(PrescalerCalc);
    $("#time").change(PrescalerCalc);
    $("#cntperiod").change(PrescalerCalc);

    ///関数の作成
    /**	************************************************************** */
    /**
     *	Prescaler算出
     *	@param	  		: none
     *	@return			  : none
     */
    /**	************************************************************** */
    function PrescalerCalc() {
      ///変数宣言
      let lfreqValue;         ///< 設定したい割り込み間隔[Hz] 
      let lprescalerValue;    ///< Prescalerの値         

      /// 設定したい割り込み間隔[Hz]の算出
      /// 設定したい割り込み間隔[Hz] = 1/設定したい割り込み時間[s]
      lfreqValue = 1 / $("#time").val() * 1000;

      ///prescalerの算出
      /// 割り込み間隔[Hz] = APB1[Hz] /{(Counter Period + 1)*(Prescaler + 1)}
      /// Prescaler = APB1[Hz]/{(Counter Period + 1)*割り込み間隔[Hz]}
      lprescalerValue = $("#APB").val() * 1000000 / (($("#cntperiod").val()) * lfreqValue);

      /// 計算の出力
      $("#freq").val(lfreqValue);
      $("#prescaler").val(lprescalerValue);
    }
  </script>
</body>

</html>

 

 

 HTMLの基本の参考:

 ・HTML の基本 - ウェブ開発を学ぶ | MDN

HTMLのidとは?使い方やclassとの違いについても解説 | 侍エンジニアブログ

【HTML】id属性とは? 使い方と特徴を解説 | ZeroPlus Media

 ・HTML Living Standardリファレンス

 javascript参考

 ・Document: querySelector() メソッド - Web API | MDN

 

関連記事

過去の記事:

 

STM32マイコン38(CubeIDE SPI通信設定について)

STM32マイコン38(CubeIDE SPI通信設定)

1.本日の内容

 (1) STM32のSPI通信設定について記載する。 

 (2) STM32CubeIDEのSPI通信の設定について記載する。

 

  使用マイコン

 

・目次

 

2.内容

2.1 SPI通信とは

 ・マイクロコントローラとその周辺ICの間でよく使用される通信方式の1つ

 ・デバイスを選択するチップセレクト又はNSSと、データの送受信、クロックの4つの線で通信を行う。

 詳細:SPI通信とは - Project_OKI’s diary

 

 2.2 CubeIDEの設定

 (a) CubeIDEのPinout & Configuration のConnectivityにSPIの設定がある。

 (1) モードの種類と内容 

  意味
Full-Duplex Master 全二重通信方式_マスター
Full-Duplex Slave 全二重通信方式_スレーブ
Half-Duplex Master 半二重通信方式_マスター
Half-Duplex Slave 半二重通信方式_スレーブ
Receive Only Master 受信のみ_マスター
Receive Only Slave 受信のみ_スレーブ
Transmit Only Master 送信のみ_マスター
Transmit Only Slave 送信のみ_スレーブ

 通信するデバイスのデータシートを参照して、設定を行う。

 

 ・Full Duplex Transmission:全二重通信方式
  送信回線、受信回線をそれぞれ別に備えることで、送受を同時に行う。

 

 ・Half Duplex Transmission:半二重通信方式
  一度に「送信」と「受信」のどちらか片方しか行えない通信方法
  通信相手との間に1本だけ経路が繋がっていて、「送信」と「受信」を交互に行う

 

 ・マスター

  指示を出す側。開始側。
 ・スレーブ

  指示を受ける側。 


 通信の流れ
 (a) マスターが対象のスレーブを選択する(NSSをアクティブにする)。
 (b) マスターがクロックを発生させ、データをMOSI経由でスレーブに送信する。
 (c) 同時に、スレーブはMISOを通じてデータをマスターに返信する。
 (d) 通信が終了したら、マスターはNSSを非アクティブにし、次のデバイスとの通信に進む。

 

 (2) Hardware NSS Signalの設定

Hardware NSS Signal 内容
Disable

 NSS Signalを使用しない場合設定

(ソフトウェア制御下のGPIOで置き換える)

Hardware NSS Input Signal  NSS signalの入力設定:スレーブの時に使用
Hardware NSS Output Signal  NSS signalの出力設定:マスターの時に使用

 

 NSSは、マスターの場合は出力信号になり、通信時にローレベルへ落ちる。
 スレーブの場合は入力となり、SS信号として働きます。 
 NSS:個別のスレーブ選択信号のこと。

 Disableの場合、NSSとは別にチップセレクト用のGPIOを設定する。

 参考:裏技!? SPIに複数のスレーブを接続する方法:Q&Aで学ぶマイコン講座(49)(2/3 ページ) - EDN Japan

 

 (3) 基本パラメータの設定

設定 内容
Basic Parameters 基本パラメータ
Frame Format

モトローラ又はTIを設定

通信先のデバイスの通信形式で設定する。

Data Size

SPIフレーム内のデータビットを指定。

8ビット又は16ビットサイズ。

通信先のデバイスに依存する。

First Bit

送信する最初のビット位置を指定する。 

LSB:一番右端のビット。

MSB:一番左のビットを指す。

通信先のデバイスに依存する。

Clock Parameters クロックパラメータ
Prescaler SPIクロックの分周比を指定する。SPIクロック速度の調整をする。
Clock Polarity

クロック信号の初期状態を指定。 

CPOL=0:クロックがLowから開始。

CPOL=1:クロックがHighから開始

Clock Phase

データサンプリングのタイミングを指定。 

CPHA=0:クロックの立ち上がりエッジでサンプリング。

CPHA=1:クロックの立下りエッジでサンプリング。

Advanced Parameters 高度なパラメータ
CRC Calculation

SPI通信で、CRCのエラーチェックを有効/無効を設定。

有効の場合、送信データにCRCビットが追加される。

NSS Signal Type

SPIのスレーブセレクト。

Hardware NSS Signalの設定で設定される。

 

・ CRCについて

誤り検出符号の一種で、主にデータ転送などに伴う偶発的な誤りの検出によく使われている。
送信側は定められた生成多項式で除算した余りを検査データとして付加して送信し、受信側で同じ生成多項式を使用してデータを除算し、その余りを比較照合することによって受信データの誤り・破損を検出する。

 

参考動画:

www.youtube.com

 

 

 

3.関連記事

関連記事一覧:
 
組み込みC言語
 
STM32のデータシートなど:

 

RCローパスフィルタとCRハイパスフィルタのカットオフ周波数などの自動計算

RCローパスフィルタとCRハイパスフィルタのカットオフ周波数などの自動計算

この記事では、RCローパスフィルタ及びCRハイパスフィルタの下記計算を行う。

 入力:

 ・抵抗R[Ω]

 ・コンデンサC[uF]

 ・周波数[Hz]

 ・入力電圧[V]

 出力:

 ・カットオフ周波数[Hz] (-3dB(1/√2=0.707倍)になる周波数)

 ・ゲイン[倍] (設定した周波数のゲイン)

 ・出力電圧[V]

 

また、それぞれの計算方法について記載する。

 

1. RCローパスフィルタとCRハイパスフィルタの自動計算

・RCローパスフィルタ

・CRハイパスフィルタ

 

入力

・抵抗R[Ω]入力

コンデンサC[uf]入力

・周波数f[Hz]入力

・Vin[V]入力

ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー

RC(ローパスフィルタ)回路計算結果

・RCローパスフィルタのカットオフ周波数 [Hz]

・RCローパスフィルタのゲイン [倍]

・RCローパスフィルタの出力電圧[V]

 

CR(ハイパスフィルタ)回路計算結果

・CRハイパスフィルタのカットオフ周波数 [Hz]

・CRハイパスフィルタのゲイン [倍]

・CRハイパスフィルタ出力電圧[V]

 

2. RCローパスフィルタの計算式

※抵抗R[Ω]、コンデンサ[f]、円周率π、とする。

 (1) カットオフ周波数[Hz]の算出

  ・カットオフ周波数 =  1 / (2*π*R*C)

 (2) ゲイン[倍]の算出

  ・ゲイン = 1 / √(1+(2πf*R*C)^2)

 (3) 出力電圧[V]の算出

  ・出力電圧 = 入力電圧 * ゲイン

 

3. CRハイパスフィルタの計算式

※抵抗R[Ω]、コンデンサ[f]、円周率π、とする。

 (1) カットオフ周波数[Hz]の算出

  ・カットオフ周波数 =  1 / (2*π*R*C)

 (2) ゲイン[倍]の算出

  ・ゲイン = 2πf*R*C / √(1+(2πf*R*C)^2)

 (3) 出力電圧[V]の算出

  ・出力電圧 = 入力電圧 * ゲイン

 

参考:CRハイパスフィルタの『伝達関数』や『周波数特性』について

 

 

4. 計算プログラム

<!DOCTYPE html>
<!--
概要:反転増幅回路の計算ホームページ
・CR回路及びRC回路の画像を表示
・抵抗、コンデンサ、周波数、入力電圧の記入欄を用意
・記入した抵抗、コンデンサから周波数特性を算出
・記入した抵抗、コンデンサ、周波数からゲインを算出
・ゲインと入力電圧から、出力電圧を算出
-->
<html lang="ja" dir="ltr">

<head>
	<meta charset="utf-8">
	<title>CR回路計算ページ</title>
	<script type="text/javascript" src="js/calc.js"></script>
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.6.0/jquery.min.js"></script> 
</head>


<body>
	<p>CR回路、RC回路の計算ページです</p>
	<p>抵抗値R[Ω],コンデンサC[uf],周波数f[Hz],入力電圧[V]を入力してください。</p>

	<!--増幅回路の入力フォーム  -->
	<p> 抵抗R[Ω]入力 <input type="text" size="15" id="res" value="0"></p>
	<p> コンデンサC[uf]入力 <input type="text" size="15" id="con" value="0"></p>
	<p> 周波数f[Hz]入力 <input type="text" size="15" id="freq" value="0"></p>
	<p> Vin[V]入力<input type="text" size="15" id="vin" value="0"></p>

	<p>-----------------------------------------------</p>
	<p>RC(ローパスフィルタ)回路計算結果</p>
	<p> RCローパスフィルタのカットオフ周波数 <input type="text" size="15" id="lowfilterfreq" value=0> [Hz]
	</p>
	<p> RCローパスフィルタのゲイン <input type="text" size="15" id="lowfiltergain" value=0> [倍]
	</p>
	<p> RCローパスフィルタの出力電圧<input type="text" id="lowfilterVout" size="15" value=0>[V]</p>

	<p>CR(ハイパスフィルタ)回路計算結果</p>
	<p> CRハイパスフィルタのカットオフ周波数 <input type="text" id="highfilterfreq" size="15" value=0>[Hz]
	</p>
	<p> CRハイパスフィルタのゲイン <input type="text" id="highfiltergain" size="15" value=0>[倍]
	</p>
	<p> CRハイパスフィルタ出力電圧<input type="text" id="highfilterVout" size="15" value=0>[V]</p>
	<br>

	<script>
 	///ページ読み込み完了後、javascriptを実行
	window.onload = function () {
		///定数宣言
		const GAIN = 20;
		/// 変数宣言
		let omeg;		//<ω = 2πfc
		let omegrc;		//<omegrc = ω*R*C
		let lcutoff_freq;	//<カットオフ周波数用変数		
		let lgain;		//<ゲイン
		let lvout;		//<出力電圧Vout用[V]変数
		
		///数値が変更した時関数を実行
		$("#res").change(Calc_RCcircuit);
		$("#con").change(Calc_RCcircuit);
		$("#freq").change(Calc_RCcircuit);
		$("#vin").change(Calc_RCcircuit);
		
		///関数の作成
/**	************************************************************** */
/**
 *	カットオフ周波数/関数
 *	@param	num		: 数値
 *	@return			: 2倍の値
 */
/**	************************************************************** */
		function Calc_RCcircuit() {
			console.log("Calc");
			 //R,C,,freq,Vinの値を取得
			 lres_value = $("#res").val();	//<R(抵抗値)の取得
			 lcon_value = $("#con").val();  //<C[uf]の値取得
			 lfreq_value = $("#freq").val();//<f(周波数)[Hz]の値取得
			 lvin_value = $("#vin").val();	//<V(入力電圧)[V]の取得
			 
			 //計算用変数の計算
			 omeg = 2*Math.PI*lfreq_value;	//<ω = 2πf
			 ///omegrc = ω*R*Cの計算結果
			 omegrc = omeg * lres_value*lcon_value/1000000
			 
			///RCローパスフィルタ回路計算
			///カットオフ周波数  = 1/(2*π*R*C)
			lcutoff_freq = 1/(2*Math.PI*lres_value*lcon_value/1000000);
			
			///ゲイン = 1/√(1+(2πf*R*C)^2)
			lgain = 1/Math.sqrt(1+(omegrc)**2);
	
			///出力電圧 = 入力電圧 * ゲイン
			lvout = lvin_value * lgain;
			
			//計算結果の表示			
			$("#lowfilterfreq").val( lcutoff_freq ); //<カットオフ周波数を表示
			$("#lowfiltergain").val(lgain);	//<ゲインを表示
			$("#lowfilterVout").val(lvout);	//<出力電圧を表示
			
			///CRハイパスフィルタ回路
			///ゲイン = ωRC/(√1+(ωCR)-2)
			lgain = omegrc/Math.sqrt(1+(omegrc)**2);
			
			///出力電圧 = 入力電圧 * ゲイン
			lvout = lvin_value * lgain;
			
			///計算結果の表示
			///カットオフ周波数  = 1/(2*PI*R*C) (RCローパスと同じ)
			$("#highfilterfreq").val( lcutoff_freq );//<カットオフ周波数を表示
			$("#highfiltergain").val( lgain );//<ゲインを表示
			$("#highfilterVout").val(lvout);//<出力電圧を表示		
		}
	}
	</script>
</body>

</html>

 

 

 HTMLの基本の参考:

 ・HTML の基本 - ウェブ開発を学ぶ | MDN

HTMLのidとは?使い方やclassとの違いについても解説 | 侍エンジニアブログ

【HTML】id属性とは? 使い方と特徴を解説 | ZeroPlus Media

 ・HTML Living Standardリファレンス

 javascript参考

 ・Document: querySelector() メソッド - Web API | MDN

 

関連記事

過去の記事:

 

抵抗付きLEDの動作確認

抵抗付きLEDの動作確認

この記事では、抵抗付きLEDの動作確認について記載する。

使用LED:

 ・抵抗内蔵5mmLED 5V 赤色 640nm OSR6LU5B64A-5V
 ・抵抗内蔵5mmLED 5V 黄色 590nm OSY5LU5B64A-5V
 ・抵抗内蔵5mmLED 5V 黄緑色 570nm OSG8NU5B64A-5V

 

1. 抵抗付きLEDの動作確認

 上記抵抗付きLEDに0~5の1Vずつ上げていった時の、LEDの光り方を確認する。

 電圧は安定化電源から入力。

  赤色 黄色 黄緑色
0V

1.0V
2.0V
3.0V
4.0V
5.0V

 

代替2Vくらいからうっすら光だし、3Vあれば、一応光っていることが分かる。

データシートより、絶対最大定格DC Forward Voltageが7.5Vなので、3~7V範囲であれば使えそう。

 

関連記事

過去の記事:

5Vトレラントとは

マイコンのGPIOに書いてある5Vトレラントとは

この記事では、5Vトレラントについて説明する。

 

1. 5Vトレラントとは

 ・基本的にマイコンの入力は電源電圧が入力の最大値になっていることが多い。

 ・それに対し、電源電圧に関係なく5Vまで、GPIOの入力として使用できるということを5Vトレラントという。

 参考:ICの「5Vトレラント」とは?

 

2. nucleof401REの5Vトレラント

・データシートの下記FTとなっている場所が、5Vトレラントとなる。

  このFTが記載されている場所であれば、5Vを入力しても問題はない。

データシート:DS10086 | STM32, STM8ファミリはSTの32bit/8bit汎用マイクロコントローラ製品

 

3. obniz Board 1Yの5Vトレラント

  obniz Board 1Yは、全てのピンが5Vトレラントになっている。

 下記Obniz Board 1Yを参照

 ・Obniz1Y のピン配置:PinOut - obniz Docs

 

関連記事

過去の記事:

STM32マイコン37(CubeIDE:USBの設定内容)

STM32マイコン37(CubeIDE:USBの設定内容)

1.本日の内容

 (1) CubeIDEのUSBの設定内容について記載する。

 

  使用マイコン

 

・目次

 

2.内容

(1) USBの設定
Class For FS IP
Disable USB無効(使用しない場合に選択)
Audio Device Class オーディオデバイス(スピーカーやマイクなど)を使用するためのクラス。
Communication Device Class (Virtual Port Com) 仮想COMポートで、シリアル通信を行うためのクラス。
Download Firmware Update Class(DFU) ファームウェアの書き換えなどを行うためのクラス。
Human Interface Device Class (HID) ユーザーインターフェースバイス(キーボード、マウス、ゲームコントローラなど)を使用するためのクラス。
Custom Human Interface Device Class カスタムのユーザーインターフェースバイスを使用するためのクラス。
Mass Storage Class フラッシュドライブやハードディスク、USBメモリなどのストレージデバイスを模倣するためのクラス。

 

 (a) FS (Full-Speed):

  ・USB 2.0規格における通信速度の一つ

  ・最大で12 Mbpsのデータ転送が可能。

  ・この速度は、一般的なオフィス用途や一般的なデバイス(例: キーボード、マウス、プリンターなど)に適している。

 

 (b) HS (High-Speed):

  ・USB 2.0規格における通信速度の一つ

  ・最大で480 Mbpsのデータ転送が可能。

  ・高速データ転送が必要な場合に使用。

  ・ビデオカメラや一部のストレージデバイスなど、データ転送がより速い速度を必要とする場合に使用されている。

 

 (c) IP(Intellectual Property):知的財産

  ・IPコアと呼ばれる。

  ・プログラムでいう所のライブラリ

  ・必要な処理の全てを自分で実装する変わりに利用できる。

  ・ここでは、USBホスト機能を実装するのに利用できるということ。

 

(2) CubeIDEの設定
・USB_OTG_FS設定


 ・Full Speed 12MBit/s:

  USBデバイスがフルスピードモードで動作することを指定。

  フルスピードはUSB 2.0の速度で、データ転送速度が12Mbps(メガビット/秒)

 

 ・Low Power (低電力):
  Disabled (無効): USBデバイスは低電力モードで動作しない。

         通常の動作モードで電力を消費する。

  Enabled (有効): USBデバイスが低電力モードに入ることを許可。

         省電力モードで動作する。

         これはバッテリ駆動のデバイスに適している。

 

 ・Link Power Management (リンク電力管理):
   Disabled (無効): リンクレベルでの電力管理が無効。

         デバイスは通常の電力状態を維持する。
  Enabled (有効): リンクレベルでの電力管理が有効。

         リンクがアイドル状態の場合、省電力モードに入ることがある。

         省電力モードでは、リンクが再度アクティブになるまで待機。

 

 ・Battery Charging (バッテリー充電):
  Disabled (無効): バッテリーの充電機能が無効。

         USBデバイスはバッテリーを充電しないようになる。

  Enabled (有効): バッテリー充電機能が有効。

         バッテリーの充電をサポート、USBデバイスから充電可能とする。

 

・Audio Device Class

 クラス: マイク、スピーカー、ヘッドセットなどのオーディオデバイスをUSBで使用するためのクラス。

・USBD_MAX_NUM_INTERFACES    

 USBデバイスがサポートする最大インターフェースの数。

 1~256で設定

 

・USBD_MAX_NUM_CONFIGURATION    

 USBデバイスがサポートする最大設定

 (コンフィギュレーション)の数。

 1~256で設定

 

・USBD_MAX_STR_DESC_SIZ    

USBデバイスで使用される文字列記述子(String Descriptor)の最大サイズ。

 1~64Kbyteで設定


・USBD_SELF_POWERED

USBデバイスが自己電力供給(セルフパワード)モードで動作する場合に設定されるフラグ。

 Enable/Disableで設定。

 Enable時、セルフパワーモードで動作。


・USBD_DEBUG_LEVEL

USBデバッグメッセージの表示レベルを設定するためのパラメータ。デバッグメッセージはUSB通信に関する情報を提供し、デバッグ目的で使用される。

 0~3で設定。

 0:デバックメッセージなし

 1:ユーザーメッセージのみ表示

 2:ユーザーメッセージ+エラーメッセージを表示

 3:全てのメッセージを表示

 

・USBD_AUDIO_FREQ 

USBオーディオバイスでサポートされるオーディオサンプリング周波数(Hz単位)。

 250~48Kサンプリングで設定

 

VPC

・USB CDC Rx Buffer Size    

 USB CDCデバイスが受信(データを受け取る)用に確保するバッファのサイズ。

 受信データの最大予想サイズに基づいて設定

 

・USB CDC Tx Buffer Size    

 USB CDCデバイスが送信(データを送信する)用に確保するバッファのサイズ。    

 送信データの最大予想サイズに基づいて設定

 

・転送サイズの設定について

  受信および送信データの最大サイズに基づいて、バッファサイズを設定する。

 データがこのサイズを超える場合、バッファオーバーフローが発生する可能性がある。


・データ転送レート

 データが高い速度で送信される場合、バッファのサイズを増やすことで、一時的なデータの貯蔵を確保。できる。

 データの一時的な遅延やデータの損失を防ぐことができる。


・データ転送の頻度

 データの送信や受信の頻度に応じて、バッファサイズを設定する。

 頻繁なデータ転送がある場合は、大きなバッファが必要。


・利用可能なメモリ

 デバイスのメモリ制約に留意する必要がある。

 バッファサイズは、デバイスの利用可能なメモリ容量に合わせて調整する必要がある。

 

 

・DFU

・USBD_DFU_MAX_ITF_NUM    
 USB Device Firmware Upgrade(DFU)インターフェースの最大数。
 通常、1つのDFUインターフェースが十分。

 必要に応じて増減させることができる。

 

・USBD_DFU_XFER_SIZE    
 DFUデータ転送のバッファーサイズの指定。

 DFUデータの転送に使用されるバッファーのサイズ

 

・USBD_DFU_APP_DEFAULT_ADD    
 DFUアプリケーションのデフォルトのアドレスの指定。

 DFUアップデートの際に、新しいファームウェアが配置されるアドレスを指定する。  

 これはターゲットデバイスのメモリマップに依存する。

 

・USBD_DFU_MEDIA Interface    

 DFUメディアインターフェース

 ファームウェアのアップデートを実行するためのインターフェースを指定する。

 USB経由でDFUアップデートをサポートするために使用される。

 

・HID

・HID_FS_BINTERVAL

 USB HIDデバイスがホストコンピューターにデータを送信する頻度を示すパラメータ。

 HIDデバイスがデータを送信する間隔を指定する。(ミリ秒単位)

 

・Custom Huma Interface Device Class

 

 ・CUSTOM_HID_FS_BINTERVAL    
 カスタムHIDエンドポイントの転送周期を設定するための定数。単位:フレーム

 ・USBD_CUSTOM_HID_REPORT_DESC_SIZE    
  カスタムHIDデバイスのレポート記述子サイズをバイト単位で指定する定数。

 ・USBD_CUSTOMHID_OUTREPORT_BUF_SIZE    
  カスタムHIDデバイスのOUTレポートのバッファサイズ。単位:バイト

 

・Mass Storage Class

 

 ・MSC_MEDIA_PACKET(Media I/O buffe)

   マスストレージクラスで、メディアデータの送受信を行うバッファーサイズの設定

  512~32kbyteで設定。

 

 USBに関する設定参考資料:

 ・UM1734:STM32Cube USB device library

 

3.関連記事

関連記事一覧:
 
組み込みC言語
 
STM32のデータシートなど:

 

STM32マイコン36(USBのCDC使用ついて)

STM32マイコン36(USBのCDC使用)

1.本日の内容

 (1) STM32のUSB機能の一つである、CDC機能を使用する方法について記載する。

 (2) CDCにより、mbedをUSBで接続し、Vertual Com Port(仮想COM)として認識ようにする。

 

  使用マイコン

 

・目次

 

2.内容

(1) CDCとは

 ・CDC (Communication Device Class) は、USBデバイスのクラスの1つであり、データ通信を行うデバイスを定義するための規格。

 ・PCと通信デバイスとの間で、双方向データ転送を可能にするために使用される。

 ・デバイスとホストコンピュータ間でデータの送受信を簡単に行うことができる。

 ・モデム、シリアル通信ポート、仮想COMポートなどがCDCを使用して実装される。

 

 ・CDCを使用することで、デバイスがドライバソフトウェアなしで標準的なコンピュータと通信できる。

 ・これにより、追加のドライバインストールなしでデバイスを接続し、通信できる。

 

(2) CubeIDEの設定

 (a) USB_OTG_FSのModeをDevice_Onlyに変更する。

 

 (b) USB_DEVICEタブのClass For FS IPをCommunication Device Class(VPC)に変更する。

 (c) RCCタブのHigh Speed Clock をCrystal/Ceramic Resonatorに変更する。

  →RCCの設定(外部発振子の使用方法)について:nucleof401RE(外部発振子で使用する) - Project_OKI’s diary

 (d) Clock Configurationに移動すると、

  自動的にClockを設定するか確認されるので、Yesを選択する。

 (e) クロックが自動的に設定される。(今回は、そのまま)

  ※Input frequencyが今回は、8MHzの振動子を使用する為、8のまま。

   別の周波数の振動子を使用する場合は、その振動子の周波数に合わせて、

   数値を変更する。

  ※USBのクロックが48MHzになっていることを確認する。

   →下記の場合は、Main PLLの /3の先が48MHzになっていることを確認。

 

 (f) 歯車マークを押し、プログラムの生成を行う。

 

・mbedのピン配置は、下記サイトを確認。

 →NUCLEO-F401RE | Mbed

 

(3) 回路の確認
 今回は、下記USBコネクタDIP化キットを使用する。

 
USBコネクタ側ピン番号 mbed側ピン番号 機能
1 5V VBAS
2 PA_11 D-
3 PA_12 D+
4 none NC
5 GND GND
※D+側は、10kΩ抵抗で、3.3V又は5Vでプルアップする。
 

 
(4) USBの接続確認
 USBの接続が出来ている場合、デバイスマネージャーを確認すると、
 下記のように、仮想COMポートが確認できる。

※ここにUSBシリアルデバイスが表示しない場合、USBの認識が出来ていないということ。

※ここに不明なUSBデバイスが接続と出る場合、USBの認識はしているが、CDCの設定などができていないか。

通信速度が間違っていて、通信が途中でコケているなどがかんがえられる。

 

 また、テラタームを起動すると、下記のように、COMの選択ができるようになる。
 (今回は、プログラムを何も記載していないので、COMが開くだけ)

 
(5) プログラムの作成
受け取った文字をそのまま送信するプログラム
usbd_cdc_if.cに追記
static int8_t CDC_Receive_FS(uint8_t* Buf, uint32_t *Len)
{
  /* USER CODE BEGIN 6 */
  USBD_CDC_SetRxBuffer(&hUsbDeviceFS, &Buf[0]);
  USBD_CDC_ReceivePacket(&hUsbDeviceFS);

  /// USB送信
  CDC_Transmit_FS(&Buf[0], 1);// 受け取ったBuf[0]をそのまま送信する。

  return (USBD_OK);
  /* USER CODE END 6 */
}
 ・usbd_cdc_if.cファイルは、CubeIDEによって自動生成されるファイル
 ・CDC_Receive_FS関数:USB受信時、自動的に呼び出される。 
 ・CDC_Transmit_FS関数:USB送信関数

 
動作結果
 

 

3.関連記事

関連記事一覧:
 
組み込みC言語
 
STM32のデータシートなど: