STM显示屏SPI移植ST7789 ILI9341

根据这位博主的文章https://blog.csdn.net/qq_59953808/article/details/126476096#comments_25431403
移植到STM32G431上,也更改了分辨率

img

但是屏幕显示一直有点问题

img


有没有朋友解答一下疑问

你把源码文件发给我吧

根据代码,这位博主更改了LCD的分辨率为240x320,并定义了LCD尺寸为28。然而,屏幕显示仍然存在问题,需要进一步排查可能的原因。可能的原因包括硬件接口连接不正确、驱动程序设置不正确等等。建议检查硬件接口和驱动程序,并与厂家或其他资源进行讨论和解决方案。

链接:https://pan.baidu.com/s/1f34xqh5IKyTmluGrLuZRfA
提取码:8888
这是我移植后的文件 用的是stm32g431rbt6核心板,各位可以下载看看哪边出了问题

以下答案由GPT-3.5大模型与博主波罗歌共同编写:
关于STM32移植ST7789 ILI9341显示屏时出现的问题,可能有多种原因,需要结合具体情况进行排查。

以下提供一些可能的解决方案和参考代码,供参考:

  1. 颜色深度设置不正确。

在移植过程中,需要正确设置屏幕的颜色深度,比如16位色或者18位色。如果设置不正确,会导致显示异常或者颜色偏差。可以检查一下代码中相关的配置项是否正确。

  1. 模拟SPI时序不准确。

如果使用软件模拟SPI通信时序不准确,也会导致显示异常。可以检查一下代码中的SPI时序是否正确,并且注意SPI时钟频率的设置,与屏幕的最大频率相匹配。

参考代码:

/* 定义SPI通信接口 */
#define   LCD_SPI_CS_LOW()  HAL_GPIO_WritePin(GPIOB, GPIO_PIN_6, GPIO_PIN_RESET) 
#define   LCD_SPI_CS_HIGH()  HAL_GPIO_WritePin(GPIOB, GPIO_PIN_6, GPIO_PIN_SET) 
#define   LCD_RST_LOW()    HAL_GPIO_WritePin(GPIOB, GPIO_PIN_3, GPIO_PIN_RESET) 
#define   LCD_RST_HIGH()    HAL_GPIO_WritePin(GPIOB, GPIO_PIN_3, GPIO_PIN_SET)
#define   LCD_DC_LOW()    HAL_GPIO_WritePin(GPIOB, GPIO_PIN_4, GPIO_PIN_RESET)
#define   LCD_DC_HIGH()    HAL_GPIO_WritePin(GPIOB, GPIO_PIN_4, GPIO_PIN_SET)
#define   LCD_BL_ON()      HAL_GPIO_WritePin(GPIOB, GPIO_PIN_5, GPIO_PIN_SET)
#define   LCD_BL_OFF()    HAL_GPIO_WritePin(GPIOB, GPIO_PIN_5, GPIO_PIN_RESET)

/* 定义SPI时钟频率 */
#define     SPI_MAX_BAUDRATE         8000000

/* SPI写数据 */
void LCD_WriteData(uint8_t data) 
{ 
  LCD_DC_HIGH(); 
  LCD_SPI_CS_LOW();  
  HAL_SPI_Transmit(&hspi1, &data, 1, 1000); 
  LCD_SPI_CS_HIGH(); 
} 

/* SPI写命令 */
void LCD_WriteCommand(uint8_t cmd) 
{ 
  LCD_DC_LOW(); 
  LCD_SPI_CS_LOW(); 
  HAL_SPI_Transmit(&hspi1, &cmd, 1, 1000); 
  LCD_SPI_CS_HIGH(); 
} 

/* 屏幕初始化 */
void LCD_Init(void) 
{ 
    uint8_t data = 0; 

    /* 复位 */
    LCD_RST_LOW(); 
    HAL_Delay(50); 
    LCD_RST_HIGH(); 
    HAL_Delay(50); 

    /* 配置命令 */
    LCD_WriteCommand(0x11);/*Sleep exit*/
    HAL_Delay(120);
 
    LCD_WriteCommand(0x3A); 
    data=0x55; 
    LCD_WriteData(data);
 
    LCD_WriteCommand(0xC2); 
    data=0x44; 
    LCD_WriteData(data);
    
    /*....*/ 

    /* 打开显示 */
    LCD_WriteCommand(0x29);/*Display on*/

    /* 打开背光 */
    LCD_BL_ON(); 
}

以上是一些常见的解决方案和参考代码,如果还有其他问题可以提供具体的代码和错误信息,以便更好地解决问题。
如果我的回答解决了您的问题,请采纳!

应该还是硬件驱动不兼容问题