ArmマイコンにTRY4 タイマーを試してみる


写真はNECLEO STM32F446RE評価ボードで、プログラム作成にTRYの様子。

2023.11.30追記
2023.11.05

はじめに
 「ARMマイコンにTRY4」では、TIMERにTRYです。
 SDRトランシーバーでタイマーの用途としてA/DやD/Aのタイミング制御、サンプリング周波数などの構成に使用します。  今回はタイマー機能を使用してLチカにTRYです。

STM32F4のタイマー
 STM32F446は、タイマーが7ch搭載されています。それぞれ機能によって以下の様に分類されています。
高機能タイマー、TIM1/TIM8
汎用タイマー  TIM2/TIM3〜5
基本タイマー  TIM6/TIM7
 今回は最も基本的な動作確認として、TIM7を使ってみます。

プロジェクトの作成、コード生成

-1.「Lチカ」でのプロジェクト作成手順に同じですが、プロジェクト名は適当に「renshyuTIM7」とします。
-2.続いて、ピン配置の設定。PA5をGPIOoutput、デフォルト状態では、それ以外のピンも設定されていますが、reset_stateにします。
-3.続いて、左図Categories欄(クリックで拡大)をクリックTimer >TIM7をクリックでModeがActivated欄にチェック、パラメーター設定として
Prescaler 16000-1. Counter mode UP. Counter periode 100-1. auto-reload Disableに設定
PrescaerとCounter periideはそれぞれ0からカウントするので16000カウントしたい場合は16000-1になるが、もちろん15999と設定してもOK。
-4.次にClock Configurationの設定、TIM7はAPB1のクロックで動作しているのでAPB1を16MHzに設定します。16MHz以外の場合は次のサイクルで ON/OFFすることになります。 (APB1周波数÷16000)x100ms。
-5.次に割り込み設定のNVICのTIM7 globalinterruptを有効(チェック)にします。
-6.次にメニュー欄のコード生成ボタン(歯車マーク)をクリックで、ひな型コードが表示されます。

  ソースコードの記述

 /* User code Begin2 */ 〜 /* User code End2 */ の間にHAL_TIM_Base_Start_IT(&htim7); と記述。/* User code Begin4 */ 〜 /* User code End4 */ の間に左図ひな型ソース(クリックで拡大)を記述します。
内容は、TIM7を割り込み有効でスタート、割り込みcallback関数で、TIM7割り込みならGPIO出力を反転する。割り込みは100ms毎の発生周期でLEDがON/OFFする。
 次に、ビルド(トンカチマークアイコン)をクリックしてエラーがなければ、PCとボードをUSB接続してRunをクリックすればプログラムが書き込まれる。
 

 

LED ON/OFF周期の確認
 LED端子をシンクロで確認すると無事100ms毎にH/Lを繰り返しているのが確認出来ました。

TIM7の設定をソースコードから変えてみる
 ここまでTIM7の設定は、Category欄のTIM7パラメーターを開いて設定を書き換えていましたが、実際に周波数カウンターなどの製作では、ゲート時間をプログラムから 替える必要があります。
TIM7のPeriodeパラメーターをプログラムから変える方法を確認してみます。
方法1、TIM7のPeriodeパラメーターをグローバル変数としてひな型ソースコード /* USER CODE BEGIN 0 */ 〜/* USER CODE END 0*/の間に以下のコードを挿入
uint16_t periode;
/* USER CODE BEGIN 1 */ 〜/* USER CODE END 1*/の間に以下のコードを挿入し、LED点滅時間を変更
periode = 300-1; (注 変数値は例)
  次に/* USER CODE END TIM_7 Init 1 */の下あたりにある、htim7.Init.Preiode = 数値データ―を、preiodeに書き換えることで、mainソースのperiode 値を変更できます。
 この方法では、コード生成ボタン(歯車マーク)をクリックすると、periodeはCategories欄で設定した数値データ―に変ってしまいますので、ちょっと使いづらいです。
 他にも、periodeを引き数として渡す方法等もありますが、別の機会にTRYしてみます。

今後の進め方
 ソースコードの記述は、HAL関数を使うことで、数行で完結します。次回はタイマーサンプリング周期でA/DにTRYの予定

D/Aに戻る
ADにTRYへ
   Top Menu