Skip to main content
Visitor II
October 31, 2022
Solved

Unable to display anything on ST7789 screen via NUCLEO STM32F070RB

  • October 31, 2022
  • 3 replies
  • 5915 views

This question does not show any research effort; it is unclear or not useful

I am pretty a newbie in display control and I am struggling with my simple application. I need to calculate some numbers on my nucleo and then display them on a screen. Since this is the first time I use a display, I tried first to setup everything correctly and then working on my purpose but I am struggling with the first step.

Basically, the screen does not show anything but it should show some test animations. I do not understand where the error is. Thank you so much in advance!!!

Here the hardware details:

  • Board: NUCLEO-F070RB
  • Display: AFL240240A0-1.3INTM-ANO Orient Display (TFT display, 240x240, ST7789V controller)

Here the connections via jumper wires (diplay -> Board):

  • GND -> GND
  • VCC -> 3.3V
  • SCL -> PA5 (SCK)
  • SDA -> PA7 (MOSI)
  • RST -> PC7
  • DC -> PA9
  • CS -> PB6
  • BLK -> PA8

I adapted the codes from: LINK(github.com/Floyd-Fish/ST7789-STM32)

Here the main codes (main.c, st7789.h, st7789.c):

#include "main.h"
#include "st7789.h"
 
SPI_HandleTypeDef hspi1;
 
void SystemClock_Config(void);
static void MX_GPIO_Init(void);
static void MX_SPI1_Init(void);
 
int main(void)
{
 HAL_Init();
 SystemClock_Config();
 MX_GPIO_Init();
 MX_SPI1_Init();
 
 ST7789_Init();
 ST7789_Test();
 
 while (1)
 {
 }
 
}
 
 
void SystemClock_Config(void)
{
 RCC_OscInitTypeDef RCC_OscInitStruct = {0};
 RCC_ClkInitTypeDef RCC_ClkInitStruct = {0};
 
 /** Initializes the RCC Oscillators according to the specified parameters
 * in the RCC_OscInitTypeDef structure.
 */
 RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSE;
 RCC_OscInitStruct.HSEState = RCC_HSE_ON;
 RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON;
 RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_HSE;
 RCC_OscInitStruct.PLL.PLLMUL = RCC_PLL_MUL6;
 RCC_OscInitStruct.PLL.PREDIV = RCC_PREDIV_DIV1;
 if (HAL_RCC_OscConfig(&RCC_OscInitStruct) != HAL_OK)
 {
 Error_Handler();
 }
 
 /** Initializes the CPU, AHB and APB buses clocks
 */
 RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_HCLK|RCC_CLOCKTYPE_SYSCLK
 |RCC_CLOCKTYPE_PCLK1;
 RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_PLLCLK;
 RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1;
 RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV1;
 
 if (HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_1) != HAL_OK)
 {
 Error_Handler();
 }
 
 /** Enables the Clock Security System
 */
 HAL_RCC_EnableCSS();
}
 
static void MX_SPI1_Init(void)
{
 /* SPI1 parameter configuration*/
 hspi1.Instance = SPI1;
 hspi1.Init.Mode = SPI_MODE_MASTER;
 hspi1.Init.Direction = SPI_DIRECTION_1LINE;
 hspi1.Init.DataSize = SPI_DATASIZE_8BIT;
 hspi1.Init.CLKPolarity = SPI_POLARITY_HIGH;
 hspi1.Init.CLKPhase = SPI_PHASE_1EDGE;
 hspi1.Init.NSS = SPI_NSS_SOFT;
 hspi1.Init.BaudRatePrescaler = SPI_BAUDRATEPRESCALER_4;
 hspi1.Init.FirstBit = SPI_FIRSTBIT_MSB;
 hspi1.Init.TIMode = SPI_TIMODE_DISABLE;
 hspi1.Init.CRCCalculation = SPI_CRCCALCULATION_DISABLE;
 hspi1.Init.CRCPolynomial = 7;
 hspi1.Init.CRCLength = SPI_CRC_LENGTH_DATASIZE;
 hspi1.Init.NSSPMode = SPI_NSS_PULSE_ENABLE;
 if (HAL_SPI_Init(&hspi1) != HAL_OK)
 {
 Error_Handler();
 }
}
 
static void MX_GPIO_Init(void)
{
 GPIO_InitTypeDef GPIO_InitStruct = {0};
 
 /* GPIO Ports Clock Enable */
 __HAL_RCC_GPIOF_CLK_ENABLE();
 __HAL_RCC_GPIOA_CLK_ENABLE();
 __HAL_RCC_GPIOC_CLK_ENABLE();
 __HAL_RCC_GPIOB_CLK_ENABLE();
 
 /*Configure GPIO pin Output Level - BLK and DC*/
 HAL_GPIO_WritePin(GPIOA, GPIO_PIN_8|GPIO_PIN_9, GPIO_PIN_RESET);
 
 /*Configure GPIO pin Output Level - RST */
 HAL_GPIO_WritePin(GPIOC, GPIO_PIN_7, GPIO_PIN_RESET);
 
 /*Configure GPIO pin Output Level - CS */
 HAL_GPIO_WritePin(GPIOB, GPIO_PIN_6, GPIO_PIN_RESET);
 
 /*Configure GPIO pins : LD2_Pin ST7789_BLK_Pin ST7789_DC_Pin */
 GPIO_InitStruct.Pin = GPIO_PIN_8|GPIO_PIN_9;
 GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
 GPIO_InitStruct.Pull = GPIO_NOPULL;
 GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
 HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
 
 /*Configure GPIO pin : ST7789_RST_Pin */
 GPIO_InitStruct.Pin = GPIO_PIN_7;
 GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
 GPIO_InitStruct.Pull = GPIO_NOPULL;
 GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
 HAL_GPIO_Init(GPIOC, &GPIO_InitStruct);
 
 /*Configure GPIO pin : ST7789_CS_Pin */
 GPIO_InitStruct.Pin = GPIO_PIN_6;
 GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
 GPIO_InitStruct.Pull = GPIO_NOPULL;
 GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
 HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);
 
}
 
void Error_Handler(void)
{
 __disable_irq();
 while (1)
 {
 }
 
}
 
#ifdef USE_FULL_ASSERT
void assert_failed(uint8_t *file, uint32_t line)
{
}
#endif 

    This topic has been closed for replies.
    Best answer by MM..1

    You waste space here with this, you twicr place header file , and no your test code...

    But primary in header you have

    /* choose whether use DMA or not */
    #define USE_DMA

    and in main no init for DMA...

    3 replies

    mdiroAuthor
    Visitor II
    October 31, 2022

    st7789.h:

    #ifndef __ST7789_H
    #define __ST7789_H
    #include "fonts.h"
    #include "main.h"
     
    /* choose a Hardware SPI port to use. */
    #define ST7789_SPI_PORT hspi1
    extern SPI_HandleTypeDef ST7789_SPI_PORT;
     
    /* choose whether use DMA or not */
    #define USE_DMA
     
    /* If u need CS control, comment below*/
    //#define CFG_NO_CS
     
    /* Pin connection*/
    #define ST7789_RST_PORT GPIOC
    #define ST7789_RST_PIN GPIO_PIN_7
    #define ST7789_DC_PORT GPIOA
    #define ST7789_DC_PIN GPIO_PIN_9
     
    #ifndef CFG_NO_CS
    #define ST7789_CS_PORT GPIOB
    #define ST7789_CS_PIN GPIO_PIN_6
    #endif
     
    /* If u need Backlight control, uncomment below */
    #define BLK_PORT GPIOA
    #define BLK_PIN GPIO_PIN_8
     
    /* Choose a type you are using */
    #define USING_240X240
     
    /* Choose a display rotation you want to use: (0-3) */
    //#define ST7789_ROTATION 0
    //#define ST7789_ROTATION 1
    #define ST7789_ROTATION 2 // use Normally on 240x240
    //#define ST7789_ROTATION 3
     
    #ifdef USING_240X240
     
     #define ST7789_WIDTH 240
     #define ST7789_HEIGHT 240
     
     #if ST7789_ROTATION == 0
     #define X_SHIFT 0
     #define Y_SHIFT 80
     #elif ST7789_ROTATION == 1
     #define X_SHIFT 80
     #define Y_SHIFT 0
     #elif ST7789_ROTATION == 2
     #define X_SHIFT 0
     #define Y_SHIFT 0
     #elif ST7789_ROTATION == 3
     #define X_SHIFT 0
     #define Y_SHIFT 0
     #endif
     
    #endif
     
    #define WHITE 0xFFFF
    #define BLACK 0x0000
    #define BLUE 0x001F
    #define RED 0xF800
    #define MAGENTA 0xF81F
    #define GREEN 0x07E0
    #define CYAN 0x7FFF
    #define YELLOW 0xFFE0
     
    /* Control Registers and constant codes */
    #define ST7789_NOP 0x00
    #define ST7789_SWRESET 0x01
    #define ST7789_RDDID 0x04
    #define ST7789_RDDST 0x09
     
    #define ST7789_SLPIN 0x10
    #define ST7789_SLPOUT 0x11
    #define ST7789_PTLON 0x12
    #define ST7789_NORON 0x13
     
    #define ST7789_INVOFF 0x20
    #define ST7789_INVON 0x21
    #define ST7789_DISPOFF 0x28
    #define ST7789_DISPON 0x29
    #define ST7789_CASET 0x2A
    #define ST7789_RASET 0x2B
    #define ST7789_RAMWR 0x2C
    #define ST7789_RAMRD 0x2E
     
    #define ST7789_PTLAR 0x30
    #define ST7789_COLMOD 0x3A
    #define ST7789_MADCTL 0x36
     
    /**
     * Memory Data Access Control Register (0x36H)
     * MAP: D7 D6 D5 D4 D3 D2 D1 D0
     * param: MY MX MV ML RGB MH - -
     *
     */
     
    /* Page Address Order ('0': Top to Bottom, '1': the opposite) */
    #define ST7789_MADCTL_MY 0x80
    /* Column Address Order ('0': Left to Right, '1': the opposite) */
    #define ST7789_MADCTL_MX 0x40
    /* Page/Column Order ('0' = Normal Mode, '1' = Reverse Mode) */
    #define ST7789_MADCTL_MV 0x20
    /* Line Address Order ('0' = LCD Refresh Top to Bottom, '1' = the opposite) */
    #define ST7789_MADCTL_ML 0x10
    /* RGB/BGR Order ('0' = RGB, '1' = BGR) */
    #define ST7789_MADCTL_RGB 0x00
     
    #define ST7789_RDID1 0xDA
    #define ST7789_RDID2 0xDB
    #define ST7789_RDID3 0xDC
    #define ST7789_RDID4 0xDD
     
    /* Advanced options */
    #define ST7789_COLOR_MODE_16bit 0x55 // RGB565 (16bit)
    #define ST7789_COLOR_MODE_18bit 0x66 // RGB666 (18bit)
     
    /* Basic operations */
    #define ST7789_RST_Clr() HAL_GPIO_WritePin(ST7789_RST_PORT, ST7789_RST_PIN, GPIO_PIN_RESET)
    #define ST7789_RST_Set() HAL_GPIO_WritePin(ST7789_RST_PORT, ST7789_RST_PIN, GPIO_PIN_SET)
     
    #define ST7789_DC_Clr() HAL_GPIO_WritePin(ST7789_DC_PORT, ST7789_DC_PIN, GPIO_PIN_RESET)
    #define ST7789_DC_Set() HAL_GPIO_WritePin(ST7789_DC_PORT, ST7789_DC_PIN, GPIO_PIN_SET)
    #ifndef CFG_NO_CS
    #define ST7789_Select() HAL_GPIO_WritePin(ST7789_CS_PORT, ST7789_CS_PIN, GPIO_PIN_RESET)
    #define ST7789_UnSelect() HAL_GPIO_WritePin(ST7789_CS_PORT, ST7789_CS_PIN, GPIO_PIN_SET)
    #else
    #define ST7789_Select() asm("nop")
    #define ST7789_UnSelect() asm("nop")
    #endif
     
    #define ABS(x) ((x) > 0 ? (x) : -(x))
     
    /* Basic functions. */
    void ST7789_Init(void);
    void ST7789_SetRotation(uint8_t m);
    void ST7789_Fill_Color(uint16_t color);
    void ST7789_DrawPixel(uint16_t x, uint16_t y, uint16_t color);
    void ST7789_Fill(uint16_t xSta, uint16_t ySta, uint16_t xEnd, uint16_t yEnd, uint16_t color);
    void ST7789_DrawPixel_4px(uint16_t x, uint16_t y, uint16_t color);
     
    /* Graphical functions. */
    void ST7789_DrawLine(uint16_t x1, uint16_t y1, uint16_t x2, uint16_t y2, uint16_t color);
    void ST7789_DrawRectangle(uint16_t x1, uint16_t y1, uint16_t x2, uint16_t y2, uint16_t color);
    void ST7789_DrawCircle(uint16_t x0, uint16_t y0, uint8_t r, uint16_t color);
    void ST7789_DrawImage(uint16_t x, uint16_t y, uint16_t w, uint16_t h, const uint16_t *data);
    void ST7789_InvertColors(uint8_t invert);
     
    /* Text functions. */
    void ST7789_WriteChar(uint16_t x, uint16_t y, char ch, FontDef font, uint16_t color, uint16_t bgcolor);
    void ST7789_WriteString(uint16_t x, uint16_t y, const char *str, FontDef font, uint16_t color, uint16_t bgcolor);
     
    /* Extented Graphical functions. */
    void ST7789_DrawFilledRectangle(uint16_t x, uint16_t y, uint16_t w, uint16_t h, uint16_t color);
    void ST7789_DrawTriangle(uint16_t x1, uint16_t y1, uint16_t x2, uint16_t y2, uint16_t x3, uint16_t y3, uint16_t color);
    void ST7789_DrawFilledTriangle(uint16_t x1, uint16_t y1, uint16_t x2, uint16_t y2, uint16_t x3, uint16_t y3, uint16_t color);
    void ST7789_DrawFilledCircle(int16_t x0, int16_t y0, int16_t r, uint16_t color);
     
    /* Command functions */
    void ST7789_TearEffect(uint8_t tear);
     
    /* Simple test function. */
    void ST7789_Test(void);
     
    #ifndef ST7789_ROTATION
     #error You should at least choose a display rotation!
    #endif
     
    #endif

    mdiroAuthor
    Visitor II
    October 31, 2022

    st7789.c:

    #ifndef __ST7789_H
    #define __ST7789_H
    #include "fonts.h"
    #include "main.h"
     
    /* choose a Hardware SPI port to use. */
    #define ST7789_SPI_PORT hspi1
    extern SPI_HandleTypeDef ST7789_SPI_PORT;
     
    /* choose whether use DMA or not */
    #define USE_DMA
     
    /* If u need CS control, comment below*/
    //#define CFG_NO_CS
     
    /* Pin connection*/
    #define ST7789_RST_PORT GPIOC
    #define ST7789_RST_PIN GPIO_PIN_7
    #define ST7789_DC_PORT GPIOA
    #define ST7789_DC_PIN GPIO_PIN_9
     
    #ifndef CFG_NO_CS
    #define ST7789_CS_PORT GPIOB
    #define ST7789_CS_PIN GPIO_PIN_6
    #endif
     
    /* If u need Backlight control, uncomment below */
    #define BLK_PORT GPIOA
    #define BLK_PIN GPIO_PIN_8
     
     
    /*
     * Comment one to use another.
     * 3 parameters can be chose
     * 135x240(0.96 inch) & 240x240(1.3inch) & 170x320(1.9inch)
     * X_SHIFT & Y_SHIFT are used to adapt different display's resolution
     */
     
    /* Choose a type you are using */
    //#define USING_135X240
    #define USING_240X240
    //#define USING_170X320
     
    /* Choose a display rotation you want to use: (0-3) */
    //#define ST7789_ROTATION 0
    //#define ST7789_ROTATION 1
    #define ST7789_ROTATION 2				// use Normally on 240x240
    //#define ST7789_ROTATION 3
     
    #ifdef USING_135X240
     
     #if ST7789_ROTATION == 0
     #define ST7789_WIDTH 135
     #define ST7789_HEIGHT 240
     #define X_SHIFT 53
     #define Y_SHIFT 40
     #endif
     
     #if ST7789_ROTATION == 1
     #define ST7789_WIDTH 240
     #define ST7789_HEIGHT 135
     #define X_SHIFT 40
     #define Y_SHIFT 52
     #endif
     
     #if ST7789_ROTATION == 2
     #define ST7789_WIDTH 135
     #define ST7789_HEIGHT 240
     #define X_SHIFT 52
     #define Y_SHIFT 40
     #endif
     
     #if ST7789_ROTATION == 3
     #define ST7789_WIDTH 240
     #define ST7789_HEIGHT 135
     #define X_SHIFT 40
     #define Y_SHIFT 53
     #endif
     
    #endif
     
    #ifdef USING_240X240
     
     #define ST7789_WIDTH 240
     #define ST7789_HEIGHT 240
     
    		#if ST7789_ROTATION == 0
    			#define X_SHIFT 0
    			#define Y_SHIFT 80
    		#elif ST7789_ROTATION == 1
    			#define X_SHIFT 80
    			#define Y_SHIFT 0
    		#elif ST7789_ROTATION == 2
    			#define X_SHIFT 0
    			#define Y_SHIFT 0
    		#elif ST7789_ROTATION == 3
    			#define X_SHIFT 0
    			#define Y_SHIFT 0
    		#endif
     
    #endif
     
    #ifdef USING_170X320
     
    	#if ST7789_ROTATION == 0
     #define ST7789_WIDTH 170
     #define ST7789_HEIGHT 320
     #define X_SHIFT 35
     #define Y_SHIFT 0
     #endif
     
     #if ST7789_ROTATION == 1
     #define ST7789_WIDTH 320
     #define ST7789_HEIGHT 170
     #define X_SHIFT 0
     #define Y_SHIFT 35
     #endif
     
     #if ST7789_ROTATION == 2
     #define ST7789_WIDTH 170
     #define ST7789_HEIGHT 320
     #define X_SHIFT 35
     #define Y_SHIFT 0
     #endif
     
     #if ST7789_ROTATION == 3
     #define ST7789_WIDTH 320
     #define ST7789_HEIGHT 170
     #define X_SHIFT 0
     #define Y_SHIFT 35
     #endif
     
    #endif
     
    /**
     *Color of pen
     *If you want to use another color, you can choose one in RGB565 format.
     */
     
    #define WHITE 0xFFFF
    #define BLACK 0x0000
    #define BLUE 0x001F
    #define RED 0xF800
    #define MAGENTA 0xF81F
    #define GREEN 0x07E0
    #define CYAN 0x7FFF
    #define YELLOW 0xFFE0
    #define GRAY 0X8430
    #define BRED 0XF81F
    #define GRED 0XFFE0
    #define GBLUE 0X07FF
    #define BROWN 0XBC40
    #define BRRED 0XFC07
    #define DARKBLUE 0X01CF
    #define LIGHTBLUE 0X7D7C
    #define GRAYBLUE 0X5458
     
    #define LIGHTGREEN 0X841F
    #define LGRAY 0XC618
    #define LGRAYBLUE 0XA651
    #define LBBLUE 0X2B12
     
    /* Control Registers and constant codes */
    #define ST7789_NOP 0x00
    #define ST7789_SWRESET 0x01
    #define ST7789_RDDID 0x04
    #define ST7789_RDDST 0x09
     
    #define ST7789_SLPIN 0x10
    #define ST7789_SLPOUT 0x11
    #define ST7789_PTLON 0x12
    #define ST7789_NORON 0x13
     
    #define ST7789_INVOFF 0x20
    #define ST7789_INVON 0x21
    #define ST7789_DISPOFF 0x28
    #define ST7789_DISPON 0x29
    #define ST7789_CASET 0x2A
    #define ST7789_RASET 0x2B
    #define ST7789_RAMWR 0x2C
    #define ST7789_RAMRD 0x2E
     
    #define ST7789_PTLAR 0x30
    #define ST7789_COLMOD 0x3A
    #define ST7789_MADCTL 0x36
     
    /**
     * Memory Data Access Control Register (0x36H)
     * MAP: D7 D6 D5 D4 D3 D2 D1 D0
     * param: MY MX MV ML RGB MH - -
     *
     */
     
    /* Page Address Order ('0': Top to Bottom, '1': the opposite) */
    #define ST7789_MADCTL_MY 0x80
    /* Column Address Order ('0': Left to Right, '1': the opposite) */
    #define ST7789_MADCTL_MX 0x40
    /* Page/Column Order ('0' = Normal Mode, '1' = Reverse Mode) */
    #define ST7789_MADCTL_MV 0x20
    /* Line Address Order ('0' = LCD Refresh Top to Bottom, '1' = the opposite) */
    #define ST7789_MADCTL_ML 0x10
    /* RGB/BGR Order ('0' = RGB, '1' = BGR) */
    #define ST7789_MADCTL_RGB 0x00
     
    #define ST7789_RDID1 0xDA
    #define ST7789_RDID2 0xDB
    #define ST7789_RDID3 0xDC
    #define ST7789_RDID4 0xDD
     
    /* Advanced options */
    #define ST7789_COLOR_MODE_16bit 0x55 // RGB565 (16bit)
    #define ST7789_COLOR_MODE_18bit 0x66 // RGB666 (18bit)
     
    /* Basic operations */
    #define ST7789_RST_Clr() HAL_GPIO_WritePin(ST7789_RST_PORT, ST7789_RST_PIN, GPIO_PIN_RESET)
    #define ST7789_RST_Set() HAL_GPIO_WritePin(ST7789_RST_PORT, ST7789_RST_PIN, GPIO_PIN_SET)
     
    #define ST7789_DC_Clr() HAL_GPIO_WritePin(ST7789_DC_PORT, ST7789_DC_PIN, GPIO_PIN_RESET)
    #define ST7789_DC_Set() HAL_GPIO_WritePin(ST7789_DC_PORT, ST7789_DC_PIN, GPIO_PIN_SET)
    #ifndef CFG_NO_CS
    #define ST7789_Select() HAL_GPIO_WritePin(ST7789_CS_PORT, ST7789_CS_PIN, GPIO_PIN_RESET)
    #define ST7789_UnSelect() HAL_GPIO_WritePin(ST7789_CS_PORT, ST7789_CS_PIN, GPIO_PIN_SET)
    #else
    #define ST7789_Select() asm("nop")
    #define ST7789_UnSelect() asm("nop")
    #endif
     
    #define ABS(x) ((x) > 0 ? (x) : -(x))
     
    /* Basic functions. */
    void ST7789_Init(void);
    void ST7789_SetRotation(uint8_t m);
    void ST7789_Fill_Color(uint16_t color);
    void ST7789_DrawPixel(uint16_t x, uint16_t y, uint16_t color);
    void ST7789_Fill(uint16_t xSta, uint16_t ySta, uint16_t xEnd, uint16_t yEnd, uint16_t color);
    void ST7789_DrawPixel_4px(uint16_t x, uint16_t y, uint16_t color);
     
    /* Graphical functions. */
    void ST7789_DrawLine(uint16_t x1, uint16_t y1, uint16_t x2, uint16_t y2, uint16_t color);
    void ST7789_DrawRectangle(uint16_t x1, uint16_t y1, uint16_t x2, uint16_t y2, uint16_t color);
    void ST7789_DrawCircle(uint16_t x0, uint16_t y0, uint8_t r, uint16_t color);
    void ST7789_DrawImage(uint16_t x, uint16_t y, uint16_t w, uint16_t h, const uint16_t *data);
    void ST7789_InvertColors(uint8_t invert);
     
    /* Text functions. */
    void ST7789_WriteChar(uint16_t x, uint16_t y, char ch, FontDef font, uint16_t color, uint16_t bgcolor);
    void ST7789_WriteString(uint16_t x, uint16_t y, const char *str, FontDef font, uint16_t color, uint16_t bgcolor);
     
    /* Extented Graphical functions. */
    void ST7789_DrawFilledRectangle(uint16_t x, uint16_t y, uint16_t w, uint16_t h, uint16_t color);
    void ST7789_DrawTriangle(uint16_t x1, uint16_t y1, uint16_t x2, uint16_t y2, uint16_t x3, uint16_t y3, uint16_t color);
    void ST7789_DrawFilledTriangle(uint16_t x1, uint16_t y1, uint16_t x2, uint16_t y2, uint16_t x3, uint16_t y3, uint16_t color);
    void ST7789_DrawFilledCircle(int16_t x0, int16_t y0, int16_t r, uint16_t color);
     
    /* Command functions */
    void ST7789_TearEffect(uint8_t tear);
     
    /* Simple test function. */
    void ST7789_Test(void);
     
    #ifndef ST7789_ROTATION
     #error You should at least choose a display rotation!
    #endif
     
    #endif

    MM..1Answer
    Graduate II
    October 31, 2022

    You waste space here with this, you twicr place header file , and no your test code...

    But primary in header you have

    /* choose whether use DMA or not */
    #define USE_DMA

    and in main no init for DMA...

    mdiroAuthor
    Visitor II
    October 31, 2022

    Genius :D. It worked, thank you so much. Such a stupid error.

    Visitor II
    April 11, 2024

    Hello, can you share with me about your solutions? I'm currently having the same issue as you. Thanks in advance!