基于STM32标准库的ST7789屏幕驱动

1.什么是ST7789

ST7789是一种LCD驱动芯片,广泛应用于各种小型的TFT-LCD屏幕中。ST7789驱动的屏幕可以通过4线SPI接口进行通信,与STM32配合使用。

2.工程介绍 

本工程使用keil5开发,主控使用STM32F103VET6,屏幕使用1.3寸7线240*240像素IPS显示屏,将操作屏幕的底层代码封装成LCD.c和LCD.h,可通过简单的指令完成在指定位置画点,在指定区域内画线,在指定位置画矩形,在指定位置画一个指定大小的圆,在指定区域内填充颜色,在指定位置显示数字,在指定位置显示字符(串),控制背光开关,使能和禁用屏幕等操作,简单易用。

3.代码说明 

代码主体为LCD.c和LCD.h,使用时需配合font.h,delay.c,delay.h,stm32f10x_it.c,stm32f10x_it.h,stm32f10x_conf.h,main.c。

以下是一些常用指令

LCD_Init();  //初始化LCD

LCD_BLK_Clr();  //关闭背光
LCD_BLK_Set();  //打开背光
LCD_CS_Clr();  //关闭片选
LCD_CS_Set();  //打开片选

BACK_COLOR=BLUE;  //设置背景色(文字背景色)(本行示例代码设置背景色为蓝色)
POINT_COLOR=WHITE;  //设置画笔色(文字和图形的颜色)(本行示例代码设置画笔色为白色)

LCD_Clear(color);  //清屏
LCD_DrawPoint(x,y);  //在指定位置画点
LCD_DrawLine(x1,y1,x2,y2);  //在指定区域内画线
LCD_DrawRectangle(x1,y1,x2,y2);  //在指定位置画矩形
LCD_DrawCircle(x,y,r);  //在指定位置画一个指定大小的圆
LCD_Fill(x1,y1,x2,y2);  //在指定区域内填充指定颜色
LCD_ShowNum(x,y,len,num);  //在指定位置显示数字
LCD_ShowChar(x,y,c);  //在指定位置显示字符
LCD_ShowString(x,y,"Test");  //在指定位置显示字符串(本行示例代码显示字符串"Test")

4.接线 

        stm32        屏幕
        PA0           SCL
        PA1           SDA
        PA2           RES
        PA3           DC
        PA4           BLK
        PA5           CS(屏幕没有CS可不接或把屏幕VCC当CS)

5.工程分享

链接:【免费】基于STM32标准库的ST7789屏幕驱动资源-CSDN文库

以下是一段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 } ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值