============================ ST7796 LCD Controller driver ============================ Overview -------- The `ST7796S `__ is a single-chip controller/driver for 262K-color, graphic type TFT-LCD. It consists of 960 source lines and 480 gate lines driving circuits. The ST7796S is capable of connecting directly to an external microprocessor, and accepts 8-bit/9-bit/16-bit/18-bit parallel interface, SPI, and the ST7796S also provides MIPI interface. Display data can be stored in the on-chip display data RAM of 320x480x18 bits. It can perform display data RAM read-/write-operation with no external clock to minimize power consumption. In addition, because of the integrated power supply circuit necessary to drive liquid crystal; it is possible to make a display system with fewest components. The ST7796 LCD controller `driver `__ is a platform-agnostic driver, based on the `generic MIPI driver `__. It implements display initialization, supports display rotation and implements the display flush callback. The user needs to implement only two platform-specific functions to send a command or pixel data to the controller via SPI or parallel bus. Typically these are implemented by calling the appropriate SDK library functions on the given platform. Prerequisites ------------- There are no prerequisites. Configuring the driver ---------------------- Enable the ST7796 driver support in lv_conf.h, by cmake compiler define or by KConfig .. code:: c #define LV_USE_ST7796 1 Usage ----- You need to implement two platform-dependent functions: .. code:: c /* Send short command to the LCD. This function shall wait until the transaction finishes. */ int32_t my_lcd_send_cmd(lv_display_t *disp, const uint8_t *cmd, size_t cmd_size, const uint8_t *param, size_t param_size) { ... } /* Send large array of pixel data to the LCD. If necessary, this function has to do the byte-swapping. This function can do the transfer in the background. */ int32_t my_lcd_send_color(lv_display_t *disp, const uint8_t *cmd, size_t cmd_size, uint8_t *param, size_t param_size) { ... } To create an ST7796-based display use the function .. code:: c /** * Create an LCD display with ST7796 driver * @param hor_res horizontal resolution * @param ver_res vertical resolution * @param flags default configuration settings (mirror, RGB ordering, etc.) * @param send_cmd platform-dependent function to send a command to the LCD controller (usually uses polling transfer) * @param send_color platform-dependent function to send pixel data to the LCD controller (usually uses DMA transfer: must implement a 'ready' callback) * @return pointer to the created display */ lv_display_t * lv_st7796_create(uint32_t hor_res, uint32_t ver_res, lv_lcd_flag_t flags, lv_st7796_send_cmd_cb_t send_cmd_cb, lv_st7796_send_color_cb_t send_color_cb); For additional details and a working example see the `generic MIPI driver documentation `__. .. note:: You can find a step-by-step guide and the actual implementation of the callbacks on an STM32F746 using STM32CubeIDE and the ST HAL libraries here: :ref:`lcd_stm32_guide`