TouchGFXを使おう7~ハードウェアボタン編~の続きです。
今回はTouchGFXでADCを使ってみましょう。
TouchGFX覚書
@airpocketさんのまとめが参考になります。
画面の作成
新規プロジェクト を作成し画面上に textArea を追加します。
Transtation を ADC Value とし + を クリック します。
wildcardの設定
Wildcard1 を クリック します。
+ を クリック します。
Initial Value を 00000 とします。
0000 だと、桁が見切れてしまうので要注意です。
Use wildcard buffer のチェックを入れます。
Buffer size は airpocketさん を参考に 16 にします。
左の Texts を クリック し、文字設定を行います。
Typographies を選択し、Defalult の Wildcard Ranges を 0-9 にします。
これをしないと0以外の文字は?と表示されます。
コード生成 します。
pin設定
コード生成後、STM32CubeIDE で プロジェクト を開きます。
ADCとしてアナログ入力を行うためのピンを決めます。
PC0,PH2,PA0,PA1,PC2_C,PC3_C が使えるようです。
今回は、PC0 を 使用 します。
PC0 を クリック して ADC1_INP10 を クリック します。
ADC1 を クリック し、 IN10 をプルダウンから IN10 Single-ended を 選択 します。
Parameter Settings の Resolution を今回は、10bit にします。
NVIC Interrupt Table の チェック を入れて コード生成 します。
クロック等でエラーが多発しますが、このまま Yes で進めることができます。
クロック修正をする
クロックの修正をする場合は PLL2PをPLL3R等にして回避します。
コード生成してYesで進みます。
プログラム
Screen1View.cpp
Screen1View.cppに使用するプログラムを追加します。
最初にシミュレータエラーを吐かない為のコード
#ifndef SIMULATOR
#include "main.h"
を追加します。
adcValueを宣言し、cntr20回毎にreadADCを行います。
TouchGFX\gui\src\screen1_screen\Screen1View.cpp
#ifndef SIMULATOR
#include "stm32h7xx_hal.h"
#include "main.h"
#endif
Screen1View::Screen1View()
{
adcValue = 0;
}
void Screen1View::handleTickEvent()
{
cntr++;
if(cntr >= 20)
{
readADC();
cntr = 0;
}
}
void Screen1View::readADC()
{
#ifndef SIMULATOR
HAL_ADC_Start(&hadc1);
HAL_ADC_PollForConversion(&hadc1, 100);
HAL_ADC_Stop(&hadc1);
adcValue=HAL_ADC_GetValue(&hadc1);
#endif
Unicode::snprintf(textArea1Buffer, TEXTAREA1_SIZE, "%5d", adcValue);
textArea1.invalidate();
}
Screen1View.hpp
Screen1View.hppに関数の宣言と初期値を設定します。
TouchGFX\gui\src\screen1_screen\Screen1View.hpp
public:
Screen1View();
virtual ~Screen1View() {}
virtual void setupScreen();
virtual void tearDownScreen();
virtual void handleTickEvent();
void readADC();
protected:
uint16_t cntr = 0;
uint16_t adcValue;
main.h
main.hにextern文を追記します。
/* USER CODE BEGIN Includes */
extern ADC_HandleTypeDef hadc1;
/* USER CODE END Includes */