بِسْمِ اللَّهِ الرَّحْمَنِ الرَّحِيم

Seperti telah dijelaskan di artikel sebelumnya, STM32, terutama STM32 varian terbaru seperti STM32F4/F7/H7, dilengkapi dengan periperal untuk dihubungkan secara langsung dengan LCD yang mempunyai antarmuka RGB paralel 24 bit (MIPI-DPI). Nah, di artikel kali ini, Insya Allah akan dibahas contoh program dan antarmuka dengan LCD tersebut menggunakan board STM32F746 Discovery. Jika anda membutuhkan cotoh program dan cara antarmuka dengan LCD jenis MIPI-DBI (paralel 16 bit), silakan temukan pembahasannya di buku “Bermain-main dengan STM32”, di bab 10.

Board 32F746Discovery

Board ini menggunakan STM32F746NGH6 (BGA216) ARM Cortex-M7 dengan memori flash 1 Mbyte dan RAM 340 Kbyte. STM32F746 bisa bekerja di clock sampai 216 MHz baik melalui osilator internal maupun eksternal. Board Discovery ini hampir mencakup semua periperal/fitur yang dimiliki oleh STM32F746, seperti:

  1. LCD TFT 4.3 Inch 480×272 dengan antarmuka RGB 24 bit dan layar sentuh kapasitif
  2. Ethernet
  3. USB OTG HS (High Speed) dan FS (Full Speed)
  4. Audio Codec dengan antarmuka SAI dengan auido line in, line out dan SPDIF RCA
  5. Mikropon digital
  6. SD RAM 128 Mbit (64 Mbit yang bisa diakses)
  7. Memori flash Quad SPI 128 Mbit
  8. Konektor micro SD
  9. Tombol dan LED
  10. Konektor untuk shield Arduino
  11. Konektor buat ke kamera (DCMI)
  12. ST Link on board yang mendukung mass storage, COM port virtual

Dengan fitur LCD, SD RAM dan QSPI sangat cocok untuk dipakai buat belajar aplikasi GUI.

Board 32F746Discovery

Antarmuka LCD

Board 32F746Discovery LCD TFT RK043FN48H-CT672B dari Rocktech. LCD ini mempunyal resolusi 480×272 piksel dengan ukuran 4.3 Inch dan sudah dilengkapi oleh layar sentuh kapasitif dengan driver FT5336GQQ berantarmuka I2C. Driver ini sudah mendukung multi-touch. LCDnya sendiri mengguakan antarmuka RGB 24 bit (MIPI_DPI). Gambar di bawah ini merupakan skematik yang diambil dari dokumentasi board discovery.

Skematik Antarmuka LCD

Sebuah LCD RGB akan mempunyai konfigurasi antarmuka sebagai berikut:

  • Port data, karena RGB 24 bit maka akan ada 24 pin yang terdiri dari data warna untuk Red, Green dan Blue, masing-masing 8 bit.
  • Clock LCD
  • Sinyal sinkronisasi horisontal (HSYNC) dan vertikal (VSYNC)
  • Pin DE (Data Enable)

Semua sinyal di atas merupakan bagian dari periperal LTDC di STM32, artinya kita tidak bisa memilih sembarang pin GPIO untuk itu. Tetapi harus mengikuti sesuai dengan mapping dari STM32 yang digunakan.

Selain itu ada juga sinyal-sinyal pendukung, seperti

  • Catudaya (VDD dan GND), ini harus dihubungkan dengan catu daya yang sesuai, misal di LCD di board Discovery ini adalah 3.3V. Di LCD yang lain, catu daya untuk LCD dengan driver touch panel mungkin dipisah.
  • RESET, ini sesuai namanya untuk mereset LCD (atau driver touch panel?). Bisa dihubungkan dengan pin GPIO apa saja.
  • DISP, sinyal untuk memilih mode standby atau normal, bisa dihubungkan juga dengan pin GPIO apa saja.
  • Pin-pin untuk touch panel, biasanya pin interupsi, yang aktif (LOW) saat ada sentuhan di layar dan jalur komunikasinya (biasanya I2C atau SPI). Ada juga LCD yang tidak menyediakan driver untuk touch panelnya. Hanya menyediakan sinyal touch panel di konektornya (biasanya XR(X+), XL(X-), YD(Y-) dan YU(Y+), kita harus menyediakan sendiri driver touch panelnya.
  • Terakhir adalah pin untuk lampu backlight, biasanya LED yang disusun kombinasi seri dan paralel. Sehingga teganganya biasanya lebih tinggi dari catu daya LCD (8 – 10V), sehingga di board discovery ini menggunakan IC LED driver (step up) yang bisa menyediakan tegangan yang cukup buat LED dari tegangan yang tersedia (3.3V). IC LED driver ini dikendalikan dengan sinyal LCD_BL_CTRL, yang bisa dihubungkan dengan GPIO apa saja, kalau menginginkan untuk mengatur kecerangan LED backlight, bisa dihubungkan dengan pin PWM.

Konfigurasi GPIO di STM32CubeMX

Jika menggunakan board evaluasi buatan ST Micro, maka pembuatan proyek di STM32 di STM32CubeIDE maupun di STM32CubeMX bisa dengan cara memilih type MCU atau pun board. Cara pembuatan proyek di STM32CubeIDE bisa melalui artikel ini atau dari buku Bermain-main dengan STM32 bab 6. Namun di artikel ini, kita akan membuat proyek dengan memilih tipe MCU agar langkah ini bisa diterapkan jika kita membuat PCB sendiri dengan LCD yang berbeda.

LTDC bisa diaktifkan melalui kategori multimedia. Berdasarkan skematik di atas, LCD yang dipakai merupakan LCD 24 bit (RGB888). Ketika LTDC diaktifkan, susunan GPIOnya tidak sesuai dengan skematik board discovery. Sehingga harus disesuaikan. Di GPIO Settings, maximum output speed harus di-set ke very high (default STM32CubeMX mungkin di-low).

Periperal LTDC

Selanjutnya menyediakan GPIO untuk kendali LCD yang bukan bagian sinyal LTDC (LCD_DISP, LCD_BL_CTRL, dan LCD_RST). Di board discovery LCD_RST dihubungkan dengan pin reset MCU, sedangkan pin LCD_DISP dihubungkan dengan pin PI12 dan kendali backlight dihubungkan dengan pin PK3. Untuk sementara kita tidak akan menggunakan fungsi layar sentuh. Secara default, kedua pin ini di-set HIGH.

Parameter LCD

Tahap selanjutnya adalah menentukan parameter-parameter LCD, yaitu clock, pewaktuan (timing) dan penentuan ukuran frame buffer. Semuanya harus mengacu ke datasheet LCD. Untuk LCD yang dipakai di board F746 Discovery bisa dilihat di sini.

Periperal LTDC di STM32 sendiri mendukung sampai resolusi 4096×2048 tentu saja akan tergantung dengan clock LCD yang tidak boleh melebihi clock maksimum STM32. Pewaktuan di LCD meliputi sinkronisasi vertikal dan horisontal seperti ditunjukan oleh gambar di bawah.

Pewaktuan di LCD TFT
Tabel Pewaktuan LCD

Clock LCD

Dari tabel di atas terlihat, clock untuk LCD adalah 5 – 12 MHz, dengan frekuensi rekomendasi 9 MHz. Jika clock LCD terlalu kecil, proses LCD scanning akan terlihat, biasanya akan terlihat garis bergerak dari atas ke bawah (flicker), sedangkan jika clock terlalu besar (>12 MHz), gambar yang dikirim ke LCD tidak akan tertampil sama sekali. Clock LCD ini bisa diatur melalui tab Clock Configuration. Tentunya clock LCD tergantung pada clock sistem (SYSCLK/HCLK). Untuk LCD ini clock diatur di 9.6 MHz. Clock LCD juga tidak boleh melebihi clock maksimal STM32.

Pengaturan Clock LCD

Clock LCD terutama akan menentukan refresh rate. Clock yang diperlukan untuk mendapatkan refresh rate ditentukan dengan rumus berikut

Clock LCD = TotalWidth x TotalHeight x refresh rate

TotalWidth sendiri adalah TotalW = HSYNC Width + HBP + Active Width + HFP -1

Sedangkan TotalHeight adalah TotalH = VSYNC Height + BVBP + Active Height + VFP-1

Dari tabel datasheet di atas diperoleh TotalW = 531 dan TotalH = 297. Sehingga jika diinginkan refresh rate 60 Hz maka LCD clock

LCD CLock = 531x297x60 = 9.5 MHz.

Parameter Pewaktuan LCD

Parameter pewaktuan meliputi sinkronisasi horisontal dan vertikal, parameter ini juga diambil dari tabel di atas.

Pewaktuan Horisontal
Pewaktuan Vertikal

Datasheet biasanya memberikan nilai minimal dan maksimal dari setiap parameter, jadi nilainya disesuaikan saja, biasanya diambil nilai typical.

Pengaturan Frame Buffer

Seperti telah dijelaskan di artikel sebelumnya, aplikasi dengan LCD (GUI) membutuhkan memori untuk menyimpan apa yang akan ditampilkan ke LCD, memori ini dinamakan dengan frame buffer. LCD dengan interface RGB, seperti yang dipakai oleh board F46 Discovery ini, biasanya tidak menyediakan RAM sebagai frame buffer, sehingga kita harus menyediakan sendiri, bisa menggunakan RAM internal dari mikrokontroler atau menambahkan memori eksternal. Besarnya frame buffer ditentukan oleh resolusi LCD dan kedalaman warna (8, 16 atau 24 bit per pixel). Dengan resolusi 480 x 272 piksel, maka kebutuhan frame buffer bisa dihitung sebagai berikut:

  • Warna 24 bit, frame buffer (Kbyte) = 480x272x3/1024 = 382.5
  • Warna 16 bit, frame buffer (Kbyte) = 480 x 272 x 2 /1024 = 255
  • Warna 8 bit, frame buffer (Kbyte) = 480×272/1024 = 128

STM32F746NGH mempunyai RAM internal sebesar 320 KB, sehingga untuk kedalaman warna 8 dan 16 bit masih memungkinkan untuk menggunakan RAM internal sebagai frame buffer, untuk warna 24 bit HARUS menggunakan RAM eksternal.

Pengaturan Layer

Pengaturan frame buffer ini dilakukan melalui tab Layer Setting. STM32 mendukung sampai dengan 2 layer, tentu saja setiap layer membutuhkan frame buffer masing-masing, dengan RAM internal yang dimiliki, untuk 2 layer tentunya membutuhkan tambahan RAM eksternal.

Untuk kedalaman warna diatur melalui Pixel Format, untuk 24 bit bisa menggunakan RGB888, sedangkan untuk 16 bit bisa menggunakan RGB565, dan untuk 8 bit bisa menggunakan format L8.

Alamat untuk frame buffer diatur melalui Buffer Start Address, jika frame buffer di RAM internal maka alamat menggunakan alamat RAM internal (0x20000000 – 320 KB), sedangkan jika menggunakan RAM eksternal maka digunakan alamat yang disesuaikan dengan konfigurasi alamat RAM eksternal, di board F746Discovery berada di 0xC0000000.

Pengaturan DMA2D

Seperti telah dijelaskan LTDC di STM32 dilengkapi dengan DMA yang dinamakan dengan DMA2D. Dengan DMA2D ini memungkinkan mengendalikan LCD dengan sedikit melibatkan kerja CPU.

Pengaturan DMA2D

Di artikel selanjutnya, Insya Allah kita akan membahas contoh program menampilkan ke LCD. Semoga bermanfaat.

Leave a Reply

Your email address will not be published.