st7789 驱动代码
时间: 2023-09-03 20:16:50 浏览: 209
stm32f103c8t6 硬件spi驱动st7789v
以下是一个基于STM32的ST7789驱动代码示例:
```c
#include "stm32f1xx_hal.h"
#include "st7789.h"
// 初始化ST7789
void ST7789_Init(SPI_HandleTypeDef *hspi)
{
// 发送初始化命令序列
ST7789_SendCmd(hspi, 0x36); // Memory data access control
ST7789_SendData(hspi, 0x00); // MY MX MV ML RGB MH 0 0
ST7789_SendCmd(hspi, 0x3A); // Interface pixel format
ST7789_SendData(hspi, 0x55); // 16 bit / pixel
ST7789_SendCmd(hspi, 0xB2); // Porch control
ST7789_SendData(hspi, 0x0C);
ST7789_SendData(hspi, 0x0C);
ST7789_SendData(hspi, 0x00);
ST7789_SendData(hspi, 0x33);
ST7789_SendData(hspi, 0x33);
ST7789_SendCmd(hspi, 0xB7); // Gate control
ST7789_SendData(hspi, 0x35);
ST7789_SendCmd(hspi, 0xBB); // VCOMS Setting
ST7789_SendData(hspi, 0x19);
ST7789_SendCmd(hspi, 0xC0); // LCMCTRL
ST7789_SendData(hspi, 0x2C);
ST7789_SendCmd(hspi, 0xC2); // VDVVRHEN
ST7789_SendData(hspi, 0x01);
ST7789_SendCmd(hspi, 0xC3); // VRHS
ST7789_SendData(hspi, 0x12);
ST7789_SendCmd(hspi, 0xC4); // VDVS
ST7789_SendData(hspi, 0x20);
ST7789_SendCmd(hspi, 0xC6); // FRCTRL2
ST7789_SendData(hspi, 0x0F);
ST7789_SendCmd(hspi, 0xD0); // PWCTRL1
ST7789_SendData(hspi, 0xA4);
ST7789_SendData(hspi, 0xA1);
ST7789_SendCmd(hspi, 0xE0); // PVGAMCTRL
ST7789_SendData(hspi, 0xD0);
ST7789_SendData(hspi, 0x00);
ST7789_SendData(hspi, 0x02);
ST7789_SendData(hspi, 0x07);
ST7789_SendData(hspi, 0x0A);
ST7789_SendData(hspi, 0x28);
ST7789_SendData(hspi, 0x32);
ST7789_SendData(hspi, 0x44);
ST7789_SendData(hspi, 0x42);
ST7789_SendData(hspi, 0x06);
ST7789_SendData(hspi, 0x0E);
ST7789_SendData(hspi, 0x12);
ST7789_SendData(hspi, 0x14);
ST7789_SendCmd(hspi, 0xE1); // NVGAMCTRL
ST7789_SendData(hspi, 0xD0);
ST7789_SendData(hspi, 0x00);
ST7789_SendData(hspi, 0x02);
ST7789_SendData(hspi, 0x07);
ST7789_SendData(hspi, 0x0A);
ST7789_SendData(hspi, 0x28);
ST7789_SendData(hspi, 0x31);
ST7789_SendData(hspi, 0x54);
ST7789_SendData(hspi, 0x47);
ST7789_SendData(hspi, 0x0E);
ST7789_SendData(hspi, 0x1C);
ST7789_SendData(hspi, 0x17);
ST7789_SendData(hspi, 0x1B);
ST7789_SendCmd(hspi, 0x29); // Display On
}
// 设置ST7789的像素区域
void ST7789_SetWindow(SPI_HandleTypeDef *hspi, uint16_t x0, uint16_t y0, uint16_t x1, uint16_t y1)
{
ST7789_SendCmd(hspi, 0x2A); // Column Address Set
ST7789_SendData(hspi, x0 >> 8); // Start Col High
ST7789_SendData(hspi, x0 & 0xFF); // Start Col Low
ST7789_SendData(hspi, x1 >> 8); // End Col High
ST7789_SendData(hspi, x1 & 0xFF); // End Col Low
ST7789_SendCmd(hspi, 0x2B); // Row Address Set
ST7789_SendData(hspi, y0 >> 8); // Start Row High
ST7789_SendData(hspi, y0 & 0xFF); // Start Row Low
ST7789_SendData(hspi, y1 >> 8); // End Row High
ST7789_SendData(hspi, y1 & 0xFF); // End Row Low
ST7789_SendCmd(hspi, 0x2C); // Memory Write
}
// 发送ST7789的命令
void ST7789_SendCmd(SPI_HandleTypeDef *hspi, uint8_t cmd)
{
HAL_GPIO_WritePin(ST7789_DC_GPIO_Port, ST7789_DC_Pin, GPIO_PIN_RESET); // DC Low = Command
HAL_SPI_Transmit(hspi, &cmd, 1, 100); // 发送命令
}
// 发送ST7789的数据
void ST7789_SendData(SPI_HandleTypeDef *hspi, uint8_t *data, uint16_t size)
{
HAL_GPIO_WritePin(ST7789_DC_GPIO_Port, ST7789_DC_Pin, GPIO_PIN_SET); // DC High = Data
HAL_SPI_Transmit(hspi, data, size, 100); // 发送数据
}
```
这段代码包含了ST7789的初始化、设置像素区域和发送命令/数据等基本操作。需要注意的是,这里使用了STM32的SPI驱动来实现与ST7789的通信,因此需要正确配置SPI接口,以及定义ST7789_DC_Pin和ST7789_DC_GPIO_Port等GPIO引脚。在实现中,你需要根据自己的具体情况进行相应的修改和调试。
阅读全文