2
2

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 > LCDを白色発光させる (LCD駆動の初歩) > HAL + BSPの使用

Last updated at Posted at 2019-07-15
Ubuntu 18.04 LTS
STM32CubeMX v5.2.1
STM32CubeIDE v1.0.1
基板: STM32F769 Discovery Kit

STM32F769 Discovery Kit

概要

  • STM32F769 Discovery搭載のLCD(WVGA)を駆動して、白色発光させる
  • BSP (Board Support Package)を使う
  • ローレベルの駆動にはHALを使用

備考(ご注意)

Note: この記事は学習途中での記事としているため、いくつかの「勘違い」が含まれるでしょう。
この記事の通りに実施した結果、基板破損などを生じるかもしれません。
ご注意ください。

前準備

  • STM32CubeIDEの環境を構築
  • STM32CubeF7のBSPを取得
    • ここから取得しておく (登録が必要)
      • v1.15.0を取得した
    • ~/STM32Cube/Repository以下に取得したstm32cube_fw_f7_v1150.zipを解凍しておく
      • STM32Cube_FW_F7_V1.15.0ディレクトリが生成される

手順

  • `1. STM32 Projectプロジェクトを作る
    • Part Number Searchにて「769NI」
    • Reference: STM32F769NIHxを選択
    • プロジェクト名(任意): F769NI_LCD_BSP_190714_2018
  • `2. LTDCを設定する
    • Display Type: RGB565(16bits) - DSI mode
    • Parameter Settingsを設定する (図2-1)
    • Layer Settingsを設定する (図2-2)

図2-1 LTDC > Parameter Settings
Screenshot from 2019-07-15 08-03-18.png

図2-2 LTDC > Layer Settings
Screenshot from 2019-07-15 08-03-30.png

  • `3. DMA2DをActivatedにする
    • 設定はそのまま (図3-1)

図 3-1 DMA2D > Parameter Settings
Screenshot from 2019-07-15 08-07-06.png

  • `4. FMCにてSDRAM1の設定をする
    • Clock and chip enable: SDCKE0+SDNE0
    • Internal bank number: 4 banks
    • Address: 12bits
    • Data: 16bits
    • Byte enable: 16-bit byte enable
    • Configurationは図4-1の通りにした
      • デフォルトから変更してない?

図4-1 FMC > SDRAM1設定
Screenshot from 2019-07-15 08-09-41.png

  • `5. RCCにてHSE(High Speed Clock)を有効にする
    • HSEを使わないとLCDとの通信がおそすぎてLCD駆動を失敗する
    • High Speed Clock (HSE): BYPASS Clock Source (図5-1)
    • ここで「DSIHOST」が選択できるようになる (後で使用)

図5-1 RCC > HSE設定
Screenshot from 2019-07-15 08-11-59.png

  • `6. Clock Configurationにてクロックの設定をする (図6-1)
    • 注意: この設定についてはまだ理解が浅い。あくまで「動いた」だけのもの

図6-1 Clock Configuration
Screenshot from 2019-07-15 08-20-17.png

  • `7. DSIHOSTにてVideo Modeにする
    • 設定は図7-1 (デフォルト)

Screenshot from 2019-07-15 10-18-40.png

  • `8. 保存してコードを生成する
    • Do you want generate Code?

    • [Yes]
  • `9. BSPのコードのUtilitiesをプロジェクトに追加する
    • 「前準備」で解凍しておいたディレクトリと関連付ける
    • 対象: ~/STM32Cube/Repository/STM32Cube_FW_F7_V1.15.0/Utilities
      • プロジェクトのツリーにて右クリック
      • Import...
      • File System
      • From directoryにて上記のUtilitiesを指定
      • 左側でUtilitiesフォルダを選択
      • Into folderはプロジェクトフォルダ/Utilities
        • F769NI_LCD_BSP_190714_2018/Utilities
      • Finish (結果は図9-1)

図9-1 BSPのコードのUtilitiesをプロジェクトに追加後
Screenshot from 2019-07-15 09-06-22.png

  • `10. BSPのコードのComponentsとSTM32F769I-Discoveryをプロジェクトに追加する
    • 対象: ~/STM32Cube/Repository/STM32Cube_FW_F7_V1.15.0/Drivers/BSP/Components
      • 手順は9と同じ
        • Into folderはプロジェクトフォルダ/Drivers/BSP/Components
          • F769NI_LCD_BSP_190714_2018/Drivers/BSP/Components

図10-1 BSPのコードのComponentsをプロジェクトに追加後
Screenshot from 2019-07-15 08-31-25.png

  • `11. BSPのコードのSDRAMとLCD関連ファイル、共通ファイルをプロジェクトに追加
    • 対象: ~STM32Cube/Repository/STM32Cube_FW_F7_V1.15.0/Drivers/BSP/STM32F769I-Discovery以下の
      • stm32f769i_discovery.c
      • stm32f769i_discovery.h
      • stm32f769i_discovery_lcd.c
      • stm32f769i_discovery_lcd.h
      • stm32f769i_discovery_sdram.c
      • stm32f769i_discovery_sdram.h
    • Into folderはプロジェクトフォルダ/Drivers/BSP
      • F769NI_LCD_BSP_190714_2018/Drivers/BSP
    • ファイルを選択して追加する (図11-1)

図11-1 Driver追加時のファイル選択
Screenshot from 2019-07-15 09-13-13.png

  • `12. インクルードパスを設定する

    • C/C++Projectsペインにてプロジェク上で右クリック
    • Properties
    • C/C++ General
    • Paths and Symbols
    • [Add]
    • [Workspace]
    • /F769NI_LCD_BSP_190714_2018/Drivers/BSP/STM32F769I-Discovery
  • `13. Src/main.cにLCDとSDRAMのヘッダーを追加

/* Includes ------------------------------------------------------------------*/
#include "main.h"

/* Private includes ----------------------------------------------------------*/
/* USER CODE BEGIN Includes */
#include "stm32f769i_discovery_lcd.h"
#include "stm32f769i_discovery_sdram.h"
/* USER CODE END Includes */
  • `14. 未定義のマクロを定義
    • 場所は任意. 今回はint main(void)の上に追加した
/* Private user code ---------------------------------------------------------*/
/* USER CODE BEGIN 0 */
#define LCD_FOREGROUND_LAYER (1)
#define LCD_BACKGROUND_LAYER (0)
#define LCD_FRAME_BUFFER (0xC0000000)
/* USER CODE END 0 */
  • `15. Src/main.cのint main(void)にBSP_LCD関連コードを実装 (下記のBSP_LCD_XXX)
int main(void) {
   ...
  /* Initialize all configured peripherals */
  MX_GPIO_Init();
  MX_DMA2D_Init();
  MX_FMC_Init();
  MX_LTDC_Init();
  /* USER CODE BEGIN 2 */
  BSP_LCD_Init();
  BSP_LCD_LayerDefaultInit(LCD_BACKGROUND_LAYER, LCD_FRAME_BUFFER);
  BSP_LCD_LayerDefaultInit(LCD_FOREGROUND_LAYER, LCD_FRAME_BUFFER);
  BSP_LCD_SelectLayer(LCD_FOREGROUND_LAYER);
  BSP_LCD_DisplayOn();
  BSP_LCD_Clear(LCD_COLOR_WHITE);

  /* USER CODE END 2 */

  /* Infinite loop */
  /* USER CODE BEGIN WHILE */
  while (1)
  {
   ...
  • `16. ビルドして実行するとLCDが白色発光する

    IMG_0917.JPG

参考になった情報

Clock Configuration

System Clock MuxにPLLCLKを設定した例

下記の設定でも表示は正常に実施された

Screenshot from 2019-07-15 10-05-26.png

備考 > Error

(追記: 2019-07-16)

上記の作業を一気にした時にエラーとなった。
DSIをオフにしてビルドした後、再度DSIを有効にしてビルドをするとエラーは出なくなった。

ビルドのタイミングによって失敗するのだろうか。

2
2
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
2
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?