ST7789V+初始化代码调

My first blog on CSDN

本文简单写一下本次调屏经过遇到的问题和解决方法,主要是怕以后遇到同样问题的时候又忘记了~

1、屏分辨率是240x320,接口是16bit paralle data bus for 8080 seriescpu,就是16位并口再加WR,RD,CS,RS接口,屏的复位可以采用RC上电复位电路。

2、cpu这边输出的信号是320x240的,这里没写错,输出的数据是横屏显示的,可屏幕看起来是竖屏的,不过不用担心,屏控制器这边是可设置方向的爱怎么显示就怎么显示这就是“cpu屏”的好处。

点这种类型的屏主要的工作就是初始化代码了,一般屏供应商都会提供一份参考的稍微修改一下就可以正常显示了。这次拿到的初始化代码据说是可以正常显示的,实际显示效果如何不得而知,需要怎样格式的数据不得而知,一般情况下是先使用参考的初始化点一下看看效果再做打算。

点出来的效果发现是竖着显示的,并且画面也不对。于是想到先把X,Y交换过来,看了下ST7789V的datasheet有个寄存器需要设置一下,看8.12 Address Control
章节内容需要设置一下36h寄存器的MV=1 MX=0 MY=1这几位

9.1.28 MADCTL (36h): Memory Data Access Control
lcd_send_cmd(0,0x36); 

lcd_send_cmd(1,0xa0);

MV=1;//交换XY

MY=1;//Y镜像

最终出来的效果是画面横着出来了但还是显示不正确,整个显示画面分成了3个区域,这下想到应该是行、列地址范围没设对,默认行是Y=320列是X=240,现在行列已经反过来了X=320,Y=240所以需要设置一下行列的地址范围,查看datasheet得知有几个相关寄存器需要设置分别是

9.1.20 CASET (2Ah): Column Address Set

lcd_send_cmd(0,0x2a); 
lcd_send_cmd(1,0x00); //列起始地址
lcd_send_cmd(1,0x00); 
lcd_send_cmd(1,0x01); //列结束地址
lcd_send_cmd(1,0x3f); //0x13f=319


9.1.21 RASET (2Bh): Row Address Set

lcd_send_cmd(0,0x2b); 
lcd_send_cmd(1,0x00); //行起始地址
lcd_send_cmd(1,0x00); 
lcd_send_cmd(1,0x00); //行结束地址
lcd_send_cmd(1,0xef); //239


设置完以后就可以正常显示了~

20180111:最近又在另一个平台上调这个屏有了新的发现,所谓的行列起始结束地址应该是拿来存放数据到ram的时候用的。驱动IC会把接收到的数据按照行列来存储最终显示出来。

以这里设置为横屏(320x240)为例,cpu的FrameBuffer(FB)给出来的数据就应该以320x240组织的,这样给到屏这边的时候屏才能满屏显示。假如FB给出来的数据是240x320这种组织结构的,屏这边只会收到240x240的数据而且会把240x240的数据按照320x240的方式写到ram中,实际ram中只能收到320x180(240x240)个像素的数据,从而显示上表示出来就是一部分图片。因为fb的x只输出了240列240行。



  • 10
    点赞
  • 45
    收藏
    觉得还不错? 一键收藏
  • 22
    评论
以下是一段ST7789V初始化驱动代码,基于STM32F4xx系列MCU的HAL库编写: ```c #include "stm32f4xx_hal.h" #define ST7789V_WIDTH 240 #define ST7789V_HEIGHT 320 #define ST7789V_RST_PIN GPIO_PIN_0 #define ST7789V_RST_PORT GPIOA #define ST7789V_DC_PIN GPIO_PIN_1 #define ST7789V_DC_PORT GPIOA #define ST7789V_CS_PIN GPIO_PIN_2 #define ST7789V_CS_PORT GPIOA #define ST7789V_CMD 0 #define ST7789V_DATA 1 static SPI_HandleTypeDef hspi; void ST7789V_WriteCommand(uint8_t cmd) { HAL_GPIO_WritePin(ST7789V_DC_PORT, ST7789V_DC_PIN, ST7789V_CMD); HAL_GPIO_WritePin(ST7789V_CS_PORT, ST7789V_CS_PIN, GPIO_PIN_RESET); HAL_SPI_Transmit(&hspi, &cmd, 1, 100); HAL_GPIO_WritePin(ST7789V_CS_PORT, ST7789V_CS_PIN, GPIO_PIN_SET); } void ST7789V_WriteData(uint8_t* data, uint32_t size) { HAL_GPIO_WritePin(ST7789V_DC_PORT, ST7789V_DC_PIN, ST7789V_DATA); HAL_GPIO_WritePin(ST7789V_CS_PORT, ST7789V_CS_PIN, GPIO_PIN_RESET); HAL_SPI_Transmit(&hspi, data, size, 100); HAL_GPIO_WritePin(ST7789V_CS_PORT, ST7789V_CS_PIN, GPIO_PIN_SET); } void ST7789V_Reset(void) { HAL_GPIO_WritePin(ST7789V_RST_PORT, ST7789V_RST_PIN, GPIO_PIN_RESET); HAL_Delay(100); HAL_GPIO_WritePin(ST7789V_RST_PORT, ST7789V_RST_PIN, GPIO_PIN_SET); HAL_Delay(100); } void ST7789V_Init(void) { ST7789V_Reset(); ST7789V_WriteCommand(0x11); // Sleep Out HAL_Delay(120); ST7789V_WriteCommand(0x36); // Memory Data Access Control uint8_t data = 0x00; ST7789V_WriteData(&data, 1); ST7789V_WriteCommand(0x3A); // Interface Pixel Format data = 0x55; ST7789V_WriteData(&data, 1); ST7789V_WriteCommand(0xB2); // Porch Setting uint8_t pdata[4] = {0x0C, 0x0C, 0x00, 0x33}; ST7789V_WriteData(pdata, 4); ST7789V_WriteCommand(0xB7); // Gate Control data = 0x35; ST7789V_WriteData(&data, 1); ST7789V_WriteCommand(0xBB); // VCOM Setting data = 0x19; ST7789V_WriteData(&data, 1); ST7789V_WriteCommand(0xC0); // LCM Control data = 0x2C; ST7789V_WriteData(&data, 1); ST7789V_WriteCommand(0xC2); // VDV and VRH Command Enable pdata[0] = 0x01; pdata[1] = 0xFF; pdata[2] = 0xFF; ST7789V_WriteData(pdata, 3); ST7789V_WriteCommand(0xC3); // VRH Set data = 0x11; ST7789V_WriteData(&data, 1); ST7789V_WriteCommand(0xC4); // VDV Set pdata[0] = 0x20; pdata[1] = 0x00; ST7789V_WriteData(pdata, 2); ST7789V_WriteCommand(0xC6); // Frame Rate Control data = 0x0F; ST7789V_WriteData(&data, 1); ST7789V_WriteCommand(0xD0); // Power Control 1 pdata[0] = 0xA4; pdata[1] = 0xA1; ST7789V_WriteData(pdata, 2); ST7789V_WriteCommand(0xE0); // Positive Gamma Correction pdata[0] = 0xD0; pdata[1] = 0x08; pdata[2] = 0x11; pdata[3] = 0x08; pdata[4] = 0x0C; pdata[5] = 0x15; pdata[6] = 0x39; pdata[7] = 0x33; pdata[8] = 0x50; pdata[9] = 0x36; pdata[10] = 0x13; pdata[11] = 0x14; ST7789V_WriteData(pdata, 12); ST7789V_WriteCommand(0xE1); // Negative Gamma Correction pdata[0] = 0xD0; pdata[1] = 0x08; pdata[2] = 0x10; pdata[3] = 0x08; pdata[4] = 0x06; pdata[5] = 0x06; pdata[6] = 0x39; pdata[7] = 0x44; pdata[8] = 0x51; pdata[9] = 0x0B; pdata[10] = 0x16; pdata[11] = 0x14; ST7789V_WriteData(pdata, 12); ST7789V_WriteCommand(0x29); // Display On } ```
评论 22
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值