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

 

関連記事

過去の記事: