STM32F429-LTDC モジュールの色混合

1. はじめに
STM32F429 MCU は、RGB スクリーン コントローラを統合しています. このコントローラは、STM32F103 シリーズの FSMC の SRAM タイミング コントロールを使用する 8080 インターフェイス LCD とは異なります. この RGB タイミング スクリーンは、4.3 インチなどの比較的大きなサイズで作成できます。 5 インチ、7 インチなど、8080 インターフェイスの LCD は通常 4 インチ未満です。2 つの画面の最大の違いはビデオメモリの格納場所であり、RGB インターフェース画面のビデオメモリはシングルチップマイコンに格納されるため、シングルチップマイコンにはビデオメモリとして十分なメモリ容量が必要です。 8080 インターフェイス画面のビデオ メモリは画面内のコントローラに統合されていますが、シングルチップ マイクロコンピュータが 8080 バス インターフェイスを介して画面内のビデオ メモリを操作するため、シングルチップ マイクロコンピュータは必要ありません。ビデオメモリを提供するにはマイコンが必要ですが、これによってビデオメモリのサイズも制限され、あまり大きくすることはできません。私が使用したい 7 インチ以上の LCD スクリーンの解像度は 800 480 以上です。そのような大きなメモリ空間を統合する 8080 インターフェイスを備えた制御チップはありません (少なくともそのようなスクリーンを製造しているメーカーはありません)。 STM32103 シリーズの FSMC インターフェイスを使用して画面を直接制御します。そこで、シングルチップ マイコン STM32F429 を選びました。気に入っているのは、RGB ディスプレイに直接接続できる LTDC コントローラですが、内蔵 SRAM が 256KB しかないため、ビデオ メモリとして SDRAM を接続する必要があります。解像度 800 480 の 24 ビット カラー ディスプレイには、ビデオ メモリが 800 480 3 ≈ 1.1MB 必要です。

STM32F429 および従来シリーズの強みは LTDC 機能の追加であり、マニュアルによると STM32F429 の LTDC を使用して解像度 1024x768 の LCD 画面を駆動できるとのことです。
LTDCとはTFT LCDコントローラの意味で、arm9/arm11/cortex-AシリーズCPUの中でも必須のペリフェラルですが、小型マイコンではこの機能を搭載しているものは多くありません。LCD コントローラの機能は、LCD ピクセル クロックを生成し、GRAM 内のデータを LCD 画面に転送して表示することです。一般に、一般的に使用される ili9320/ili9325 やその他のモデルなどの小型 LCD モジュールには LCD コントローラが統合されており、これらの LCD モジュールには表示用に数百 KB の RAM も統合されています。このソリューションは単一のチップを占有する必要はありません。 LCD を安定して駆動して画像を表示します。通常、MCU は最初に 8080 インターフェイスまたは SPI を介してコントローラにコマンドを送信し、LCD パラメータを設定してから、内蔵 RAM にデータを書き込んで表示します。これは、低コストのソリューションとして推奨されます。プロジェクト。STM32F429 に付属する LTDC も LCD コントローラです。ili9320 と比較して、より高い解像度とより多くの機能をサポートしていますが、LTDC は LCD に必要なタイミングの生成のみを担当し、RAM は統合されていません。たとえば、640x480x16bpp の画面には、 600KB RAM、シングルチップマイコンの 600KB のメモリはすでに天文学的なものであるため、GRAM として機能させるには SDRAM を拡張する必要があります。LTDC を使用する場合は、まず LCD のタイミングを設定し、次に GRAM のアドレスを設定し (ここで、GRAM のアドレスは外部拡張 SDRAM のアドレスです)、最後に LTDC をオンにする必要があります。 LCD_CLK ピンの安定した周波数出力を測定すると、ほぼ同じになるはずです。LTDC を設定した後、ハードウェアは GRAM の内容を LCD 画面に自動的に転送し、GRAM のデータが保存されている限り、表示内容を変更できます。かわった。もう一つ言うべきことは、この LTDC は 2 つのレイヤーと 1 つの背景レイヤーをサポートしており、通常は 1 つのレイヤーを使用して表示するだけで十分ですが、この 2 つのレイヤーは表示領域と GRAM アドレスを別々に設定でき、同時にオンにすることができます。ハードウェアは、2 つのレイヤーの表示内容を自動的に混合します。混合順序は、レイヤー 2 -> レイヤー 1 -> 背景色であり、レイヤー 2 が一番上になります。この 2 つのレイヤーを使用して特別な機能を実現する方法については、 , 仁者は仁を見、賢者は知恵を見る。

DMA2D は GRAM の世界に存在するポーターであり、指定したメモリ アドレスに四角形を作成したり、ソース RAM から宛先 RAM に四角形のデータをコピーしたりするもので、完全にハードウェアによって実装されます。

2. ピクセルの透明度:
透明度の概念はデジタル画像のピクセルを指しますが、画面のピクセル自体には透明度の概念がありません。RGB565、RGB888、ARGB1555、ARGB8888 などの多くの形式の画像ピクセルがあり、最初の 2 つは、は透明ピクセルではありません。後の 2 つは透明です。ARGB8888 を例にとります。ARGB はそれぞれアルファ、赤、緑、青を表します。アルファは透明度のコンポーネントです。値は 0 ~ 255 です。0 はピクセルが完全に透明であることを意味します。透明、255 は、このピクセルが完全に不透明であることを意味します。完全な不透明と完全な透明の 2 つの概念を説明するには、ピクセルの背後の色である背景色が必要です。背景色が Cb であるとします。完全に不透明とは、背景色がまったく表示されない、つまり、このピクセルの色 (前景色、Cf で表されます) のみが表示されることを意味します。完全に透明とは、背景色のみが表示され、前景色は表示されないことを意味します。完全に不透明と完全に透明の間とは、前景色の一部と背景色の一部を表示する、つまり前景色と背景色を混ぜて表示することを意味します。たとえば、前景色のピクセルの透明度が 127、背景色の赤成分が 100、前景色の赤成分が 50 の場合、混合後に得られる混合色の赤成分は次のようになります。 =Cb*(1- 127 / 255) + Cf*(127 / 255)=50+25=75、これは混合された赤成分の値です。

3. LTDC カラーミキシング
STM32f429 の LTDC コントローラには 2 つのレイヤが含まれており、両方のレイヤがオンになっている場合、重ね合わせたときに 2 つのレイヤの色と背景色を混合するために透明度を使用する必要があります。LTDCを初期化する際には、LCDの一番下の色である背景色(ここでは背景色を青とする)を与える必要があります。

/* 默认背景颜色,该颜色在定义的层窗口外或在层禁止时使用。 */          
LTDC_Layer_InitStruct.LTDC_DefaultColorBlue = 0xFF;        
LTDC_Layer_InitStruct.LTDC_DefaultColorGreen = 0xFF;       
LTDC_Layer_InitStruct.LTDC_DefaultColorRed = 0xFF;         
LTDC_Layer_InitStruct.LTDC_DefaultColorAlpha = 0;

次にレイヤーを初期化します。各レイヤーにも背景色があり、この背景色には透明度コンポーネントが含まれます。LTDC の背景色は一番下の背景色であり、透明度を持つことができないため、透明度はありません。同時に、各レイヤーには固定アルファ値 LTDC_ConstantAlpha (0 ~ 255) があります。

各レイヤーには BlendingFactor_1 と BlendingFactor_2 という 2 つのブレンディング係数がありますが、ST がなぜこのように設計したのか全く理解できず、面倒で味気ないように感じます。これら 2 つのブレンド係数は、BF1 および BF2 と略すことができます。BF1 は、LTDC_BlendingFactor1_CA および LTDC_BlendingFactor1_PAxCA の値を取得でき、BF2 は、LTDC_BlendingFactor2_CA および LTDC_BlendingFactor2_PAxCA の値を取得できます。これら 2 つは、前景色と前景色の混合比の構成を表します。それぞれ背景色。
LTDC_BlendingFactorx_CA は、ブレンド係数がレイヤーの固定アルファ値を使用することを示します。つまり、各前景色ピクセルの透明度が無効であり、ブレンド操作を実行するときにレイヤーの固定アルファ値のみがブレンド率 α1 の計算に使用されます。 。混合比 α1 は、Alpha / 255 として計算され、(1 - α1) は (1 - Alpha / 255) となります。
LTDC_BlendingFactorx_PAxCA は、ブレンド係数が Layer の固定アルファ値 (A1) とピクセル アルファ値 (A2) のブレンド値を使用してブレンド率 α2 を計算することを示します。混合比α2は(A1/255) (A2/255)で計算され、(1-α2)は(1-(A1/255) (A2/255))となります。
ここでは、BF1 と BF2 の両方に LTDC_BlendingFactorx_PAxCA を使用し、レイヤーの背景色のアルファ コンポーネントを 0 に設定して、レイヤーの背景色をバイパスし、下部の背景色を直接透明にします。同時に、レイヤーの固定アルファ値 LTDC_ConstantAlpha を 255 に設定すると、上式の α2 の値は A2 / 255、(1 - α2) の値は (1 - A2 / 255) となります。 、混合操作はレイヤーのみです。前景色とその下にある背景色は、ピクセルのアルファ値に従ってブレンドされます。

LTDC は全部で 2 つのレイヤーがあり、Layer1 の上に Layer2 があり、その 3 つの色の模式図は次のようになります: したがって、最
ここに画像の説明を挿入
上層の Layer2 の色を計算するとき、透明度を考慮すると、背景色は混合された色になります。 Layer1 と LCD の背景色。便宜上、Layer1 のピクセル カラーのアルファ チャネルを 255、つまり完全に不透明に設定すると、Layer2 の色の計算は Layer1 のピクセル カラーと混合するだけで済み、LCD が表示されます。背景色は関係ありません。

このとき、GUI システムを設計する場合、Layer1 に背景の絵や背景色を描画し、Layer2 に GUI コンテンツ (テキスト ボックスやボタンなど) を描画することができます。

おすすめ

転載: blog.csdn.net/qizhi321123/article/details/124592336