STM32 Nucleoでデジタル信号処理を試してみた(1)
素人である私がSTM32 Nucleoボードをベースにデジタル信号処理を行ってみる過程をご紹介します。 単に「こう設定したら動いた」という内容で、圧倒的に知識が不足していますが、なにかしらのご参考になれば幸いです。今回はシンプルに、アナログ信号を入力しADC-DACを経てそのまま出力するところまで目指します。
開発環境
以下のソフトウェアをインストールします・STM32CubeIDE
・STM32CubeProgrammer
ソースコードの設定・編集
(1)STM32CubeIDEを起動し、新規プロジェクトを作成(2)クロックの設定(System Core --> RCC)
・Mode --> HSE --> BYPASS Clock Source に設定
・Clock Configuretionタブを選択し、クロック周波数を設定
今回は写真のように最高周波数に設定しておきました
・Mode --> IN1にチェックを入れる(PA1ピンを入力に使用)
・Configurationはデフォルト
(4)DACの設定(Analog --> ADC2)
・Mode --> OUT1 Configurationにチェックを入れる(PA4ピンを入力に使用)
・Configurationはデフォルト
以上で設定は終了、保存(Ctrl+s)するとソースコードが生成され、main.cのタブが開きます
(5)ソースコードの編集
main関数内のユーザーコード記入箇所に以下のコードを追加します。
(5-1) 変数の定義
/* USER CODE BEGIN 1 */
int val;//入力値を格納
int val_out;//出力値を格納
/* USER CODE END 1 */
(5-2) DACのスタート
/* USER CODE BEGIN 2 */
HAL_DAC_Start(&hdac, DAC_CHANNEL_1);
/* USER CODE END 2 */
(5-3) while(1)ループ内を追加
/* USER CODE BEGIN 3 */
HAL_ADC_Start(&hadc1);//ADCスタート
HAL_ADC_PollForConversion(&hadc1, 0);//変換終了まで待つ
val = HAL_ADC_GetValue(&hadc1);//変換値を格納
val_out = val;//入力値をそのまま出力に渡す
HAL_DAC_SetValue(&hdac, DAC_CHANNEL_1, DAC_ALIGN_12B_R, val_out);//出力値をDACに設定
/* USER CODE END 3 */
以上のコードをコンパイルし、エラーなく終了することを確認します。
(6)書き込み
・STM32 NucleoボードをUSB経由で接続し、STM32CubeProgrammerを起動
・Connect --> Download(パスを指定) --> Start Programm.. --> Disconnect
以上でプログラム完了です。