UM3236 LCD ディスプレイ用 LVGL ライブラリ
ユーザーマニュアル
導入
現代の自動車産業では、小型の LCD ディスプレイであっても、ますます複雑な GUI を開発することが一般的になっています。 このニーズを満たすために、新しいコンポーネント AEK-LCD-LVGL が作成され、AutoDevKit エコシステムに追加されました。
この新しいコンポーネントは LVGL グラフィックス ライブラリをインポートし、AEK-LCD-DT028V1 コンポーネントとともに使用して、複雑な GUI をより迅速に開発します。
LVGL (軽量で多用途のグラフィック ライブラリ) は、C 言語で書かれた無料のオープンソース グラフィック ライブラリで、使いやすいグラフィック、優れた視覚効果、低メモリ占有率を備えた GUI を作成するツールを提供します。
LVGL には、ボタン、チャート、リスト、スライダー、画像などの事前定義された要素が含まれているため、非常に強力です。 LVGL を使用すると、アニメーション、アンチエイリアス、不透明度、スムーズ スクロールを備えたグラフィックスの作成が簡素化されます。 このライブラリは、タッチパッド、マウス、キーボード、エンコーダなどのさまざまなタイプの入力デバイスと互換性があります。 このユーザー マニュアルの目的は、AutoDevKit を使用して LCD GUI を簡単に作成する方法を示すことです。
注記: LVGL の詳細については、公式ドキュメントを参照してください。 ソース コードは GitHub からダウンロードできます。
AEK-LVGL アーキテクチャ
上の画像は、AutoDevKit に統合された LVGL ソフトウェア アーキテクチャを示しています。
ソフトウェア アーキテクチャの特徴は次のとおりです。
- LVGL ライブラリ: AEK-LCD-DT028V1 基本グラフィック ライブラリに基づいて高度なグラフィック機能を実装します。
– aek_ili9341_drawPixel: AEK-LCD-DT028V1 LCD にピクセルを印刷します。
– aek_lcd_get_touchFeedback: AEK-LCD-DT028V1 LCD タッチ スクリーン上のタッチを検出します。
– aek_lcd_read_touchPos: タッチされた点の座標を取得します。
– aek_lcd_set_touch フィードバック: タッチ操作が完了したことを示すフラグを立てます。 - 基本的なグラフィック ライブラリ: 基本的なグラフィック関数を実装し、低レベルのドライバー プリミティブを呼び出します。
- 低レベルのドライバー: MCU ペリフェラルを実装します。 この場合、SPI プロトコルが使用されます。
- AEK-LCD-DT028V1: LCD 評価ボード。
LVGLの基本
以下の図に示すように、LVGL ライブラリは、Disprove および IndevDriver という 028 つのドライバーを通じて AEK-LCD-DT1VXNUMX コンポーネントと対話します。
Disprove は、バッファー画像を準備し、それを下位層に渡して LCD に表示する役割を果たします。 次の lv_disp_drv_t 型付き構造体を使用します。
- draw_buf: LVGL が描画するメモリ バッファ構造を指します。
- 採用者: ディスプレイの水平解像度 (ピクセル単位)。
- Verres: ディスプレイの垂直解像度 (ピクセル単位)。
- flash_cb: メモリ バッファを LCD ディスプレイに出力するために使用される関数を指します。
- monitor_cb: データの表示に必要なピクセル数と時間を監視します。
一方、IndevDriver は、下位層からの LCD タッチ情報を取得します。 次の lv_indev_drv_t 型付き構造体を使用します。
type: このフィールドには入力デバイスのタイプが含まれます。 事前定義された使用可能なマクロには次のものがあります。
– LV_INDEV_TYPE_POINTER (この例で使用)
– LV_INDEV_TYPE_KEYPAD
– LV_INDEV_TYPE_ENCODER
– LV_INDEV_TYPE_BUTTON
redact: タッチ情報を取得するために使用される関数を指します。
flash_cb と redact: は、それぞれユーザー定義の画面リフレッシュ周期とタッチ リフレッシュ入力に基づいて定期的に呼び出されます。 LVGL ライブラリは、内部クロックを通じてリフレッシュ時間を管理します。 時間管理には XNUMX つの基本的な LVGL 関数が使用されます。 - lv_tick_inc(uint32_t x): この関数の目的は、LVGL 時間を MCU の物理時間と同期させることです。 ティック更新は、LVGL 仕様に従って 1 ~ 10 ミリ秒に設定する必要があります。 で
今回の場合は、5 ミリ秒に設定しました。 - lv_timer_handler (void): 経過時間に基づいて内部 LVGL オブジェクトを更新します。 物理時間は、MCU のプログラマブル割り込みタイマー (PIT) ペリフェラルを通じて監視されます。
LVGL と AEK-LCD-DT028V1 コンポーネント間のインターフェイス
AEK-LCD-LVGL と AEK-LCD-DT028V1 コンポーネント間のインターフェイスは、 file 「aek_lcd_lvgl_component_rla」フォルダーの下にある lcd_lvgl.c という名前のファイルです。 これ file 次の機能が含まれています。
- LVGLライブラリを初期化します。
- LVGL内部タイマーを管理し、
- LVGL ライブラリを、AEK-LCD-DT028V1 コンポーネントによって実装された基本グラフィック ライブラリとインターフェイスします。
XNUMX つの主要な機能については、次の段落で説明します。
3.1 表示の初期化
aek_lcd_lvgl_display_init 関数は、Disprove と IndevDriver の XNUMX つの LVGL キー構造を初期化します。
3.1.1 反証する
Disprove 構造の主な目的は、LVGL の描画バッファを保持することです。 Disprovedraw_buf フィールドは、最大 XNUMX つの異なるメモリ バッファを含めることができるメモリ バッファ構造を指します。 draw_buf フィールドは、lv_disp_draw_buf_init() 関数で初期化されます。
上記のコードでは、DISP_HOR_RES パラメーターと DISP_VER_RES パラメーターは LCD の寸法を表します。
注記:
バッファ サイズは、システムの利用可能なメモリに応じてカスタマイズする必要があります。 公式 LVGL ガイドでは、画面サイズの少なくとも 1/10 の描画バッファのサイズを選択することを推奨しています。 XNUMX 番目のオプションのバッファーが使用される場合、LVGL は XNUMX つのバッファーを利用し、もう XNUMX つのバッファーのデータがバックグラウンドで表示されるように送信されます。
構造体のその他のパラメーターは、画面の寸法、XNUMX つの関数、flush とmonitor_cb です。これについては後で分析します。 入力したら、専用の lv_disp_drv_register() 関数を使用して構造体を登録し、アクティブ ディスプレイを設定する必要があります。
3.1.2 IndevDriver
IndevDriver は次のように初期化されます。
主要な定義フィールドは、使用されるデバイスのタイプとそれを管理する機能です。 この場合も、デバイスをアクティブにするために、初期化された構造を登録する必要があります。
3.2 フラッシュ
フラッシュ機能は、AEK-LCD-DT028V1 コンポーネントの基本グラフィック ライブラリを使用して、前の段落に従って初期化されたメモリ バッファに存在するイメージを LCD 上に描画します。
フラッシュ関数のスケルトンは LVGL 関数によって提供され、使用中の LCD スクリーン ドライバー (つまり、aek_ili9341_drawPixel – ピクセル描画) 用にカスタマイズされています。 入力パラメータは次のとおりです。
- dry: Disprove へのポインタ
- area: 更新する必要がある特定の領域を含むバッファ
- color: 印刷する色を含むバッファ。
3.3 モニター_cb
monitor_cb 関数は公式 LVGL ガイドで定義されており、カスタマイズは必要ありません。
3.4 my_input_read
my_input_read 関数は、LCD 画面からの入力を高レベルで管理します。
関数スケルトンは LVGL ライブラリによって定義されます。 入力パラメータは次のとおりです。
- drv: 初期化された入力ドライバーへのポインター
- データ: タッチされたポイントのピクセル変換された X、Y 座標が含まれます。 以下の画像は、my_input_read 関数の実装を示しています。
3.5 画面を更新する
aek_lcd_lvgl_refresh_screen 関数は、LVGL 内部タイマーを更新します。
注記: LVGL の時間制約を満たすには、この関数をアプリケーション コードに正しく配置する必要があります。
AutoDevKit エコシステム
AEK-LCD-LVGLを使用したアプリケーション開発には十分な時間がかかりますtageの AutoDevKit エコシステムの基本コンポーネントは次のとおりです。
- AutoDevKit Studio IDE からインストール可能 www.st.com/autodevkitsw
- Windows 用 SPC5-UDESTK デバッグ ソフトウェアまたはオープン デバッガ
- AEK-LCD-LVGL ドライブ
4.1AutoDevKit スタジオ
AutoDevKit スタジオ (STSW-AUTODEVKIT) は、SPC5 Power Architecture 32 ビット マイクロコントローラーに基づく組み込みアプリケーションの開発を支援するように設計された Eclipse ベースの統合開発環境 (IDE) です。
このパッケージには、最終的なアプリケーション ソース コードを生成するために必要なすべての関連コンポーネントと主要な要素を含むプロジェクトを開始するためのアプリケーション ウィザードが含まれています。 AutoDevKit Studio には次の機能もあります。
- 標準の Eclipse マーケットプレイスから他のソフトウェア製品を統合する可能性
- 無料ライセンス GCC GNU C コンパイラ コンポーネント
- 業界標準のコンパイラのサポート
- マルチコアマイクロコントローラーのサポート
- MCU ピン設定を容易にする PinMap エディタ
- 統合されたハードウェアおよびソフトウェア コンポーネント、コンポーネントの互換性チェック、MCU および周辺機器の構成ツール
- 互換性のある機能ボードを追加または削除することで、既存のシステム ソリューションから新しいシステム ソリューションを作成する可能性
- 互換性のある MCU に対して新しいコードをすぐに生成できます。
- AEK-LCDLVGL コンポーネントを含む各機能コンポーネントを制御する高レベルのアプリケーション API。
詳細についてはqを参照してください。 UM2623 (特にセクション 6 とセクション 7) またはビデオチュートリアルをご覧ください。
4.2 AEK_LCD_LVGL コンポーネント
AEK-LVGL ドライバーは、プログラミング段階を容易にするために、STSW-AUTODEVKIT (バージョン 2.0.0 以降) のインストールとともに提供されます。
AutoDevKit インストールを更新して最新バージョンを入手します。 適切にインストールされたら、AEK_LVGL Component RLA という名前のコンポーネントを選択します。
4.2.1 AEK_LCD_LVGL コンポーネントの構成
コンポーネントを設定するには、次の手順に従います。
ステップ 1. Refr_Period 時間を設定します。 これは画面の更新周期です (推奨値は 30)。
ステップ 2. Read_Period 時間を設定します。 これは、次の 30 つのタッチ検出間の最小時間です (推奨値は XNUMX)。
ステップ 3. 「複雑な描画」ボックスにチェックを入れて、影、グラデーション、丸い角、円、円弧、斜線、画像変換などの高度なウィジェットを有効にします。
ステップ 4. 使用するフォントを選択します。 各フォントには、生成されたアプリケーション コード用に追加のフラッシュ メモリが必要であることを考慮してください。
SPC58EC に基づく AEK-LCD-LVGL コンポーネントを使用して AutoDevKit プロジェクトを作成する方法
手順は次のとおりです。
ステップ 1. SPC58EC シリーズ マイクロコントローラ用の新しい AutoDevKit Studio アプリケーションを作成し、次のコンポーネントを追加します。
– SPC58ECxx 初期パッケージ コンポーネント RLA
– SPC58ECxx 低レベル ドライバ コンポーネント RLA
注記:
これらのコンポーネントを最初に追加しないと、残りのコンポーネントが表示されません。
ステップ 2. 次の追加コンポーネントを追加します。
ステップ2a。 AutoDevKit Init パッケージコンポーネント
ステップ2b。 SPC58ECxx プラットフォーム コンポーネント RLA
ステップ2c。 AEK-LCD-DT028V1 コンポーネント RLA (「 UM2939 構成用)
ステップ2d。 AEK-LCD-LVGL コンポーネント RLA
ステップ 3. AEK-LCD-LVGL 設定ウィンドウの [割り当て] ボタンをクリックします。 この操作により、AEK-LCD-LVGL 構成が AutoDevKit に委任されます。
ステップ 4. 割り当てにより、PIT タイマー ペリフェラルが有効になりました。 これは、低レベル ドライバー コンポーネントで確認できます。
ステップ 5. AutoDevKit Studio の適切なアイコンを使用してアプリケーションを生成およびビルドします。 その後、プロジェクト フォルダーに新しいファイルが追加されます。 files (main.c を含む) コンポーネント フォルダーには AEKLCD-DT028V1 が読み込まれ、
AEK-LCD-LVGL ドライバー。
ステップ6.マニックを開く file AEK-LCD-DT028V1.h と AEK_LCD_LVGL.h が含まれます files.
ステップ7. 躁状態で file、 irqIsrEnable() 関数の後に、次の必須関数を挿入します。
ステップ 8. main.c で、ex をコピーして貼り付けます。amp公式ガイドから取得した LVGL ライブラリから le を取得し、main() に挿入します。
ステップ 9. アプリケーションを保存、生成、コンパイルします。
ステップ 10. ボードを開く view AutoDevKit によって提供されるエディター これは、ボードの配線方法に関するグラフィカルなポイントツーポイント ガイドを提供します。
ステップ 11. mini-USB - USB ケーブルを使用して、AEK-LCD-DT028V1 を PC の USB ポートに接続します。
ステップ 12. SPC5-UDESTK-SW を起動し、デバッグ ファイルを開きます。 file AEK-LCD-LVGL – アプリケーション /UDE フォルダー内。
ステップ 13. コードを実行してデバッグします。
AEK-LVGL の利用可能なデモ
AEK-LCD-LVGL コンポーネントにはいくつかのデモが提供されています。
- SPC582Bxx_RLA AEK_LCD_LVGL テスト アプリケーション
- SPC58ECxx_RLA AEK-LCD_LVGL テスト アプリケーション
- デュアル スクリーン AVAS デモ – SPC58ECxx_RLA_MainEcuForIntegratAVASControl – テスト アプリケーション
注記: 新しい AutoDevKit リリースでは、さらに多くのデモが利用可能になる可能性があります。
高度なアプリケーションexample – デュアル スクリーン AVAS デモ
LVGL を使用して高度なアプリケーションが実装されています。 このアプリケーションは、エンジン回転数の車のゲージをディスプレイに描画し、関連するゲージのアニメーションを管理します。
実装された AVAS アプリケーションは AEK-AUD-C1D9031 ボードに基づいており、低速での自動車のエンジン音をシミュレートして、電気自動車の接近を歩行者に警告します。
デモでは、AEK-LCD-DT028V1 の LCD 画面に実装されたコントロール パネルを通じて、車のエンジンの加速と減速 (つまり、rpm の増減) とその音量をシミュレートします。
028 番目の AEK-LCD-DT1VXNUMX LCD を追加し、LVGL ライブラリを使用してエンジンの回転数値を測定するスピードメーターを作成することで、デモを拡張しました。
7.1 使用される LVGL ウィジェット
デュアル スクリーン AVAS デモを開発するために、次の LVGL ウィジェットを使用しました。
- タコメーターの背景として使用される画像
- タコメーターインジケーターとして使用される円弧
- エンジン回転数に応じてアーク値を更新するアニメーション
7.1.1 LVGL画像ウィジェット
LVGL ライブラリでイメージを使用するには、無料のオンライン ツールを使用してイメージを C 配列に変換します。 コンバータ。
注記:
画像を変換するときは、ビッグエンディアン形式のボックスにチェックを入れることを忘れないでください。
デュアル スクリーン AVAS デモでは、タコメーター画像を表す C 配列は Gauge という名前が付けられています。 画像ウィジェットは次のようにカスタマイズされました 以下の通りです:
どこ:
- lv_img_declare: Gauge というイメージを宣言するために使用されます。
- lv_img_create: 画像オブジェクトを作成し、現在の画面に添付するために使用されます。
- lv_img_set_src: これは、前に示した LVGL コンバータから取得した画像です (jpg 形式を使用することをお勧めします)。
- lv_obj_align: 指定されたオフセットで画像を中心に位置合わせするために使用されます。
- lv_obj_set_size: 画像サイズを設定するために使用されます。
注記:
LVGL ライブラリを使用してイメージを管理する方法の詳細については、公式ドキュメントを参照してください。
7.1.2 LVGL アーク ウィジェット
エンジンの瞬間的な回転数を示すために、色とりどりの円弧が作成されています。 多色の円弧は、それぞれ赤と青の XNUMX つの連続した色で構成されます。
次のコードは、 アーク:
どこ:
- lv_arc_create: 円弧オブジェクトを作成します。
- lv_arc_set_rotation: 円弧の回転を設定します。
- lv_arc_set_bg_angles: 円弧の最大値と最小値を度単位で設定します。
- lv_arc_set_value: 円弧の初期値をゼロに設定します。
- lv_obj_set_size: 円弧の寸法を設定します。
- lv_obj_remove_style: 円弧の最終ポインタを削除します。
- lv_obj_clear_flag: 円弧をクリックできないように設定します。
- lv_obj_align: 指定されたオフセットで円弧を中心に揃えます。
7.1.3 ウィジェットに関連付けられたアニメーション
特定の円弧アニメーション関数が作成され、LVGL エンジンに渡されて、rpm の変化が表示されます。 ファンクションコードは、 続く:
どこ:
- arc: 現在の円弧ウィジェットへのポインタです
- 遅延: アニメーションが開始されるまでの遅延時間です。
- start: 円弧の初期位置です
- end: 最終的な円弧の位置です
- 速度: 単位/秒単位のアニメーション速度です。
注記: 使用されるアニメーション関数の詳細については、LVGL のドキュメントを参照してください。 完全なアークが XNUMX つの連続するアーチで構成されていることを考慮すると、アニメーション機能を適切に管理する必要がありました。 この目的のために、XNUMX つの異なるシナリオを分析してみましょう。
- ケース: アニメーションに XNUMX つのアークが含まれる この単純なケースでは、XNUMX つのアニメーションをアークに割り当てます。

- ケース: アニメーションに XNUMX つのアーチが含まれる この場合、XNUMX 番目のアークのアニメーションは、最初のアークのアニメーションの終了時に開始されます。

特定の LVGL 関数 (lv_anim_speed_to_time) がアニメーション時間を計算します。 この実行時間は、XNUMX 番目のアーク アニメーションの遅延を計算するために使用されます。
7.2 デュアルコアの実装
デュアル スクリーン AVAS デモでは、表示タスクとオーディオ再生タスクがリアルタイム組み込みシステムで同時に実行されます。 システムの応答性が失われる可能性を克服するために、XNUMX つの異なるコアを使用することにしました。XNUMX つはディスプレイ専用、もう XNUMX つはオーディオ再生専用です。
AEK-MCU-C4MLIT1 ボードは、デュアル コア プロセッサを備えた SPC58EC80E5 マイクロコントローラーをホストしており、上記のケースに最適です。
詳細:
- コア 2: 最初に開始され、ライブラリを初期化してからアプリケーション コードを実行します。
- コア 0: ディスプレイを継続的に更新し、タッチ入力を読み取るために、メイン ループ内で aek_lcd_lvgl_refresh_screen() 関数を呼び出します。
PIT 関数と aek_lcd_lvgl_refresh_screen() は同じコアに配置する必要があります。
改訂履歴
表1. 文書の改訂履歴
| 日付 | リビジョン | 変更点 |
| 4年23月XNUMX日 | 1 | 初回リリース。 |
重要なお知らせ – よくお読みください
STMicroelectronics NV およびその子会社 (「ST」) は、予告なしにいつでも ST 製品および/または本書に変更、修正、拡張、変更、改善を行う権利を留保します。 購入者は注文する前に、ST 製品に関する最新の関連情報を入手する必要があります。 ST 製品は、注文確認時に定められた ST の販売条件に従って販売されます。 ST 製品の選択、選択、および使用については購入者が単独で責任を負い、ST はアプリケーションの支援や購入者の製品の設計については一切の責任を負いません。
ST は、明示的か黙示的かを問わず、いかなる知的財産権のライセンスも付与しません。
ここに記載されている情報と異なる規定を伴う ST 製品を再販した場合、当該製品に対して ST が付与した保証は無効になります。
STおよびSTロゴはSTの商標です。ST商標に関する追加情報については、 www.st.com/商標その他すべての製品名またはサービス名は、それぞれの所有者の財産です。
このドキュメントの情報は、このドキュメントの以前のバージョンで以前に提供された情報に取って代わり、置き換えられます。 © 2023 STマイクロエレクトロニクス – 無断複写・転載を禁じます
UM3236 – Rev 1 – 2023 年 XNUMX 月
詳細については、最寄りの STMicroelectronics 販売店にお問い合わせください。
ドキュメント / リソース
![]() |
STMicroelectronics UM3236 LCD ディスプレイ用 LVGL ライブラリ [pdf] ユーザーマニュアル AEK-LCD-DT028V1, UM3236, UM3236 LCD ディスプレイ用 LVGL ライブラリ, LCD ディスプレイ用 LVGL ライブラリ, LCD ディスプレイ用ライブラリ, LCD ディスプレイ |
