1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

STM32F769 Discovery Kit > Touch動作を検知する > HAL + BSPの使用

Last updated at Posted at 2019-07-19
動作環境
Ubuntu 18.04 LTS
STM32CubeMX v5.2.1
STM32CubeIDE v1.0.1
基板: STM32F769 Discovery Kit

STM32F769 Discovery Kit

概要

  • STM32F769 Disocvery Kitに搭載のLCDにてTouch動作を検知する

関連情報

情報感謝です。

前準備

上記の実装を済ませておく。
プロジェクト名は「F769NI_TouchLCD_190716_1958」とする (任意)。

クロックの設定はこちらを使うとする。

手順

FAQ: Enable touch screen on the STM32F746G-Discovery
に記載の手順に基づいている。

ただし、リンク先はSTemWinを使用するようになっているが、こちらの環境ではSTemWinを使わない。
対応する手順は変更した。

STM32CubeMX

  • `1. I2Cを有効にする (図1-1)

図1-1. I2C有効化後
Screenshot from 2019-07-18 21-32-52.png

  • `2. TIM3を有効にして250msecごとに割込みが出る設定にする (図2-1)
    • クロック設定ではAPBは 100MHZとしている (Clock Configurationにて)
    • Prescaler = (50000-1)のため2000Hz
    • Counter Period = (500-1)のため1/4秒=250msecにタイマー割込が起きる

図2-1. TIM3の設定
Screenshot from 2019-07-18 21-34-48.png

  • `3. TIM3のglobal interruptを有効にしておく (図3-1)

図3-1. TIM3のglobal interrupt設定 (Enabled後)

Screenshot from 2019-07-18 21-39-04.png

ソースコード側の操作

  • `1. Drivers/BSP/Components/ft5336関連を取込む
    • 前準備で実施しているため、この手順は不要
  • `2. Drivers/BSP/Components/Commmon/ft.hを取込む
    • 前準備で実施しているため、この手順は不要
  • `3. Drivers/BSP/STM32769I-Discoveryにあるts関連を取込む
    • stm32f769i_discovery_ts.c/.h : 取り込む
    • stm32f769i_discovery.c/.h : 前準備で取込み済

図3-1. 手順3までのDrivers配下の状況 (Drivers/BSP/Components/Common: ts.hがある)
Screenshot from 2019-07-18 21-22-20.png

図3-2. 手順3までのDrivers配下の状況 (Drivers/BSP/Components/ft5336がある)
Screenshot from 2019-07-18 21-22-44.png

図3-3. 手順3までのDrivers配下の状況 (Drivers/BSP/STM32F769I-Discovery: stm32f769i_discovery_ts.c/.hがある)
Screenshot from 2019-07-18 21-22-54.png

  • `4. インクルードパスを追加する
    • Drivers/BSP/Components/Common
    • Drivers/BSP/Components/ft5336
    • Drivers/BSP/STM32769I-Discovery
    • 追加方法 (Commonの場合)
      • C/C++Projectsペインにてプロジェク上で右クリック
      • Properties
      • C/C++ General
      • Paths and Symbols
      • [Add]
      • [Workspace]
      • /F769NI_LCD_BSP_190714_2018/Drivers/BSP/Common

ソースコードの追加 (main.c)

  • 1. 関数プロトタイプvoid TouchTimer_Init(void);`を追加する。
/* USER CODE BEGIN PFP */
void TouchTimer_Init(void);
/* USER CODE END PFP */
  • 2. int main(void)の /* USER CODE END 2*/`の前にTouchTimer_Init()を記載する
  BSP_LCD_Clear(LCD_COLOR_WHITE);

  TouchTimer_Init();
  /* USER CODE END 2 */

  /* Infinite loop */
  /* USER CODE BEGIN WHILE */
  while (1)
  {
  • 3. USER CODE BEGIN 4`以降に下記を実装する。
void TouchTimer_Init()
{
	BSP_TS_Init(800, 480);

	if (HAL_TIM_Base_Init(&htim3) != HAL_OK) {while(1);}
	if (HAL_TIM_Base_Start_IT(&htim3) != HAL_OK) {while(1);}
}
void PollTouchScreen(void)
{
	//GUI_PID_STATE TS_State; // for STemWin
	static TS_StateTypeDef prev_state;
	TS_StateTypeDef ts;
	BSP_TS_GetState(&ts);
	//TS_State.Pressed = ts.touchDetected; // for STemWin
	static int mode = 0;

	if (prev_state.touchDetected != ts.touchDetected)
	{
		prev_state.touchDetected = ts.touchDetected;
		if (ts.touchX[0] != 0 && ts.touchY[0] != 0) {
			prev_state.touchX[0] = ts.touchX[0];
			prev_state.touchY[0] = ts.touchY[0];
		}
		//TS_State.Layer = 0; // for STemWin
		//TS_State.x = prev_state.touchX[0]; // for STemWin
		//TS_State.y = prev_steat.touchY[0]; // for STemWin

		if (ts.touchDetected) {
			if (mode == 0) {
				mode = 1;
				BSP_LCD_Clear(LCD_COLOR_WHITE);
			} else {
				mode = 0;
				BSP_LCD_Clear(LCD_COLOR_RED);
			}
		}
	}

}
void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)
{
	if (htim->Instance == TIM6) {
		HAL_IncTick();
	}
	if (htim->Instance == TIM3) {
		PollTouchScreen();
	}
}

実行例

タッチの度に色が「赤ー>白」「白ー>赤」と変化する。

一回目のタッチ(白−>赤)
IMG_0931.JPG

二回目のタッチ(赤ー>白)
IMG_0930.JPG

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?