TouchGFX Designer +stm32cubeIDEを使ってstm32h743+NHD-3.5-320240MF搭載ボードのプログラムを開発する際の覚書です
TouchGFXの使い方
ある程度日本語に翻訳されたTouchGFXの使い方です。
LTDCだけでなくSPI他のLCDインターフェースを使ったボードに関する内容等、広範囲を対象としているため必要な知識を見つけるのに苦労しますが2021/07時点でもっとも役に立つサイトではないかと思われます。
LTDCの設定とフレームバッファのアドレス
stm32h743でLTDCのフレームバッファとして使えるのはD1領域(0x24000000からの512KB)です
LTDCの設定でFrame Buffer Start Address を RAM_D1領域0x24000000に設定します。
下の設定はなくても構いませんがD1領域に別の変数を置く場合はダミーとして宣言しておけばTouchGFXが使うフレームバッファと干渉を避けることが出来ます。
#define ALIGN_32BYTES_D1(buf) buf __attribute__ ((section(".RAM_D1"))) __attribute__ ((aligned (32))) ALIGN_32BYTES_D1(uint16_t framebuffer[320*240]);
なのでフレームバッファを宣言(↑)してからフレームバッファを指定(↓)します
/* USER CODE BEGIN 2 */ // TouchGFX 3.framebuffer in internal RAM HAL_LTDC_SetAddress(&hltdc, framebuffer, LTDC_LAYER_1);
フレームバッファにプログラムからアクセスするためには絶対アドレスでなく変数宣言した方が都合が良いのですが.iocでは下のように絶対アドレスで指定しなければならないので普通はこの設定アドレスを無視してプログラムの最初でフレームバッファアドレスを再設定すればOKです。
TuchGFXの設定
TouchGFXでは初期化関数が.iocの設定を読み出して使うようになっていてここを0x00000000のままにしておくと生成されたmain.cの最初でプログラムがハングアップするため、ここをRAM-D1アドレスの0x24000000にしておかなければなりません。