add P4 & P5
This commit is contained in:
109
P5_SETR2/Components/st7789h2/Release_Notes.html
Normal file
109
P5_SETR2/Components/st7789h2/Release_Notes.html
Normal file
@@ -0,0 +1,109 @@
|
||||
<!DOCTYPE html>
|
||||
<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en">
|
||||
<head>
|
||||
<meta charset="utf-8" />
|
||||
<meta name="generator" content="pandoc" />
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=yes" />
|
||||
<title>Release Notes for ST7789H2 Component Drivers</title>
|
||||
<style type="text/css">
|
||||
code{white-space: pre-wrap;}
|
||||
span.smallcaps{font-variant: small-caps;}
|
||||
span.underline{text-decoration: underline;}
|
||||
div.column{display: inline-block; vertical-align: top; width: 50%;}
|
||||
</style>
|
||||
<link rel="stylesheet" href="../../../../_htmresc/mini-st.css" />
|
||||
<!--[if lt IE 9]>
|
||||
<script src="//cdnjs.cloudflare.com/ajax/libs/html5shiv/3.7.3/html5shiv-printshiv.min.js"></script>
|
||||
<![endif]-->
|
||||
</head>
|
||||
<body>
|
||||
<div class="row">
|
||||
<div class="col-sm-12 col-lg-4">
|
||||
<div class="card fluid">
|
||||
<div class="sectione dark">
|
||||
<center>
|
||||
<h1 id="release-notes-for-st7789h2-component-drivers"><small>Release Notes for</small> <mark>ST7789H2 Component Drivers</mark></h1>
|
||||
<p>Copyright © 2016 STMicroelectronics<br />
|
||||
</p>
|
||||
<a href="https://www.st.com" class="logo"><img src="../../../../_htmresc/st_logo.png" alt="ST logo" /></a>
|
||||
</center>
|
||||
</div>
|
||||
</div>
|
||||
<h1 id="license">License</h1>
|
||||
<p>Licensed by ST under BSD 3-Clause license (the "License"). You may not use this package except in compliance with the License. You may obtain a copy of the License at:</p>
|
||||
<p><a href="https://opensource.org/licenses/BSD-3-Clause">https://opensource.org/licenses/BSD-3-Clause</a></p>
|
||||
<h1 id="purpose">Purpose</h1>
|
||||
<p>This directory contains the ST7789H2 component drivers.</p>
|
||||
</div>
|
||||
<div class="col-sm-12 col-lg-8">
|
||||
<h1 id="update-history">Update History</h1>
|
||||
<div class="collapse">
|
||||
<input type="checkbox" id="collapse-section22" checked aria-hidden="true"> <label for="collapse-section22" aria-hidden="true">V1.1.3 / 03-April-2019</label>
|
||||
<div>
|
||||
<h2 id="main-changes">Main Changes</h2>
|
||||
<ul>
|
||||
<li>Update release notes format</li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
<div class="collapse">
|
||||
<input type="checkbox" id="collapse-section20" aria-hidden="true"> <label for="collapse-section20" aria-hidden="true">V1.1.2 / 31-August-2018</label>
|
||||
<div>
|
||||
<h2 id="main-changes-1">Main Changes</h2>
|
||||
<ul>
|
||||
<li>Reformat the BSD 3-Clause license declaration in the files header (replace license terms by a web reference to OSI website where those terms lie)</li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
<div class="collapse">
|
||||
<input type="checkbox" id="collapse-section19" aria-hidden="true"> <label for="collapse-section19" aria-hidden="true">V1.1.1 / 29-December-2016</label>
|
||||
<div>
|
||||
<h2 id="main-changes-2">Main Changes</h2>
|
||||
<ul>
|
||||
<li>st7789h2.c/.h:
|
||||
<ul>
|
||||
<li>Change “\” by “/” in the include path to fix compilation issue under linux</li>
|
||||
</ul></li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
<div class="collapse">
|
||||
<input type="checkbox" id="collapse-section185" aria-hidden="true"> <label for="collapse-section185" aria-hidden="true">V1.1.0 / 22-December-2016</label>
|
||||
<div>
|
||||
<h2 id="main-changes-3">Main Changes</h2>
|
||||
<ul>
|
||||
<li>st7789h2.c/.h:
|
||||
<ul>
|
||||
<li>Add 180° orientation support</li>
|
||||
</ul></li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
<div class="collapse">
|
||||
<input type="checkbox" id="collapse-section18" aria-hidden="true"> <label for="collapse-section18" aria-hidden="true">V1.0.1 / 04-July-2016</label>
|
||||
<div>
|
||||
<h2 id="main-changes-4">Main Changes</h2>
|
||||
<ul>
|
||||
<li>st7789h2.c:
|
||||
<ul>
|
||||
<li>Update ST7789H2_DisplayOn()</li>
|
||||
</ul></li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
<div class="collapse">
|
||||
<input type="checkbox" id="collapse-section17" aria-hidden="true"> <label for="collapse-section17" aria-hidden="true">V1.0.0 / 04-May-2016</label>
|
||||
<div>
|
||||
<h2 id="main-changes-5">Main Changes</h2>
|
||||
<ul>
|
||||
<li>First official release</li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<footer class="sticky">
|
||||
For complete documentation on <mark>STM32 Microcontrollers</mark> , visit: <a href="http://www.st.com/STM32">http://www.st.com/STM32</a>
|
||||
</footer>
|
||||
</body>
|
||||
</html>
|
||||
707
P5_SETR2/Components/st7789h2/st7789h2.c
Normal file
707
P5_SETR2/Components/st7789h2/st7789h2.c
Normal file
@@ -0,0 +1,707 @@
|
||||
/**
|
||||
******************************************************************************
|
||||
* @file st7789h2.c
|
||||
* @author MCD Application Team
|
||||
* @brief This file includes the LCD driver for st7789h2 LCD.
|
||||
******************************************************************************
|
||||
* @attention
|
||||
*
|
||||
* <h2><center>© Copyright (c) 2016 STMicroelectronics.
|
||||
* All rights reserved.</center></h2>
|
||||
*
|
||||
* This software component is licensed by ST under BSD 3-Clause license,
|
||||
* the "License"; You may not use this file except in compliance with the
|
||||
* License. You may obtain a copy of the License at:
|
||||
* opensource.org/licenses/BSD-3-Clause
|
||||
*
|
||||
******************************************************************************
|
||||
*/
|
||||
|
||||
/* Includes ------------------------------------------------------------------*/
|
||||
#include "st7789h2.h"
|
||||
|
||||
/** @addtogroup BSP
|
||||
* @{
|
||||
*/
|
||||
|
||||
/** @addtogroup Components
|
||||
* @{
|
||||
*/
|
||||
|
||||
/** @defgroup ST7789H2
|
||||
* @brief This file provides a set of functions needed to drive the
|
||||
* FRIDA FRD154BP2901 LCD.
|
||||
* @{
|
||||
*/
|
||||
|
||||
/** @defgroup ST7789H2_Private_TypesDefinitions ST7789H2 Private TypesDefinitions
|
||||
* @{
|
||||
*/
|
||||
typedef struct {
|
||||
uint8_t red;
|
||||
uint8_t green;
|
||||
uint8_t blue;
|
||||
} ST7789H2_Rgb888;
|
||||
|
||||
/**
|
||||
* @}
|
||||
*/
|
||||
|
||||
/** @defgroup ST7789H2_Private_Defines ST7789H2 Private Defines
|
||||
* @{
|
||||
*/
|
||||
|
||||
/**
|
||||
* @}
|
||||
*/
|
||||
|
||||
/** @defgroup ST7789H2_Private_Macros ST7789H2 Private Macros
|
||||
* @{
|
||||
*/
|
||||
|
||||
/**
|
||||
* @}
|
||||
*/
|
||||
|
||||
/** @defgroup ST7789H2_Private_Variables ST7789H2 Private Variables
|
||||
* @{
|
||||
*/
|
||||
LCD_DrvTypeDef ST7789H2_drv =
|
||||
{
|
||||
ST7789H2_Init,
|
||||
ST7789H2_ReadID,
|
||||
ST7789H2_DisplayOn,
|
||||
ST7789H2_DisplayOff,
|
||||
ST7789H2_SetCursor,
|
||||
ST7789H2_WritePixel,
|
||||
ST7789H2_ReadPixel,
|
||||
ST7789H2_SetDisplayWindow,
|
||||
ST7789H2_DrawHLine,
|
||||
ST7789H2_DrawVLine,
|
||||
ST7789H2_GetLcdPixelWidth,
|
||||
ST7789H2_GetLcdPixelHeight,
|
||||
ST7789H2_DrawBitmap,
|
||||
ST7789H2_DrawRGBImage,
|
||||
};
|
||||
|
||||
static uint16_t WindowsXstart = 0;
|
||||
static uint16_t WindowsYstart = 0;
|
||||
static uint16_t WindowsXend = ST7789H2_LCD_PIXEL_WIDTH-1;
|
||||
static uint16_t WindowsYend = ST7789H2_LCD_PIXEL_HEIGHT-1;
|
||||
/**
|
||||
* @}
|
||||
*/
|
||||
|
||||
/** @defgroup ST7789H2_Private_FunctionPrototypes ST7789H2 Private FunctionPrototypes
|
||||
* @{
|
||||
*/
|
||||
static ST7789H2_Rgb888 ST7789H2_ReadPixel_rgb888(uint16_t Xpos, uint16_t Ypos);
|
||||
static void ST7789H2_DrawRGBHLine(uint16_t Xpos, uint16_t Ypos, uint16_t Xsize, uint8_t *pdata);
|
||||
|
||||
/**
|
||||
* @}
|
||||
*/
|
||||
|
||||
/** @defgroup ST7789H2_Private_Functions ST7789H2 Private Functions
|
||||
* @{
|
||||
*/
|
||||
|
||||
/**
|
||||
* @brief Initialize the st7789h2 LCD Component.
|
||||
* @param None
|
||||
* @retval None
|
||||
*/
|
||||
void ST7789H2_Init(void)
|
||||
{
|
||||
uint8_t parameter[14];
|
||||
|
||||
/* Initialize st7789h2 low level bus layer ----------------------------------*/
|
||||
LCD_IO_Init();
|
||||
/* Sleep In Command */
|
||||
ST7789H2_WriteReg(ST7789H2_SLEEP_IN, (uint8_t*)NULL, 0);
|
||||
/* Wait for 10ms */
|
||||
LCD_IO_Delay(10);
|
||||
|
||||
/* SW Reset Command */
|
||||
ST7789H2_WriteReg(0x01, (uint8_t*)NULL, 0);
|
||||
/* Wait for 200ms */
|
||||
LCD_IO_Delay(200);
|
||||
|
||||
/* Sleep Out Command */
|
||||
ST7789H2_WriteReg(ST7789H2_SLEEP_OUT, (uint8_t*)NULL, 0);
|
||||
/* Wait for 120ms */
|
||||
LCD_IO_Delay(120);
|
||||
|
||||
/* Normal display for Driver Down side */
|
||||
parameter[0] = 0x00;
|
||||
ST7789H2_WriteReg(ST7789H2_NORMAL_DISPLAY, parameter, 1);
|
||||
|
||||
/* Color mode 16bits/pixel */
|
||||
parameter[0] = 0x05;
|
||||
ST7789H2_WriteReg(ST7789H2_COLOR_MODE, parameter, 1);
|
||||
|
||||
/* Display inversion On */
|
||||
ST7789H2_WriteReg(ST7789H2_DISPLAY_INVERSION, (uint8_t*)NULL, 0);
|
||||
|
||||
/* Set Column address CASET */
|
||||
parameter[0] = 0x00;
|
||||
parameter[1] = 0x00;
|
||||
parameter[2] = 0x00;
|
||||
parameter[3] = 0xEF;
|
||||
ST7789H2_WriteReg(ST7789H2_CASET, parameter, 4);
|
||||
/* Set Row address RASET */
|
||||
parameter[0] = 0x00;
|
||||
parameter[1] = 0x00;
|
||||
parameter[2] = 0x00;
|
||||
parameter[3] = 0xEF;
|
||||
ST7789H2_WriteReg(ST7789H2_RASET, parameter, 4);
|
||||
|
||||
/*--------------- ST7789H2 Frame rate setting -------------------------------*/
|
||||
/* PORCH control setting */
|
||||
parameter[0] = 0x0C;
|
||||
parameter[1] = 0x0C;
|
||||
parameter[2] = 0x00;
|
||||
parameter[3] = 0x33;
|
||||
parameter[4] = 0x33;
|
||||
ST7789H2_WriteReg(ST7789H2_PORCH_CTRL, parameter, 5);
|
||||
|
||||
/* GATE control setting */
|
||||
parameter[0] = 0x35;
|
||||
ST7789H2_WriteReg(ST7789H2_GATE_CTRL, parameter, 1);
|
||||
|
||||
/*--------------- ST7789H2 Power setting ------------------------------------*/
|
||||
/* VCOM setting */
|
||||
parameter[0] = 0x1F;
|
||||
ST7789H2_WriteReg(ST7789H2_VCOM_SET, parameter, 1);
|
||||
|
||||
/* LCM Control setting */
|
||||
parameter[0] = 0x2C;
|
||||
ST7789H2_WriteReg(ST7789H2_LCM_CTRL, parameter, 1);
|
||||
|
||||
/* VDV and VRH Command Enable */
|
||||
parameter[0] = 0x01;
|
||||
parameter[1] = 0xC3;
|
||||
ST7789H2_WriteReg(ST7789H2_VDV_VRH_EN, parameter, 2);
|
||||
|
||||
/* VDV Set */
|
||||
parameter[0] = 0x20;
|
||||
ST7789H2_WriteReg(ST7789H2_VDV_SET, parameter, 1);
|
||||
|
||||
/* Frame Rate Control in normal mode */
|
||||
parameter[0] = 0x0F;
|
||||
ST7789H2_WriteReg(ST7789H2_FR_CTRL, parameter, 1);
|
||||
|
||||
/* Power Control */
|
||||
parameter[0] = 0xA4;
|
||||
parameter[1] = 0xA1;
|
||||
ST7789H2_WriteReg(ST7789H2_POWER_CTRL, parameter, 2);
|
||||
|
||||
/*--------------- ST7789H2 Gamma setting ------------------------------------*/
|
||||
/* Positive Voltage Gamma Control */
|
||||
parameter[0] = 0xD0;
|
||||
parameter[1] = 0x08;
|
||||
parameter[2] = 0x11;
|
||||
parameter[3] = 0x08;
|
||||
parameter[4] = 0x0C;
|
||||
parameter[5] = 0x15;
|
||||
parameter[6] = 0x39;
|
||||
parameter[7] = 0x33;
|
||||
parameter[8] = 0x50;
|
||||
parameter[9] = 0x36;
|
||||
parameter[10] = 0x13;
|
||||
parameter[11] = 0x14;
|
||||
parameter[12] = 0x29;
|
||||
parameter[13] = 0x2D;
|
||||
ST7789H2_WriteReg(ST7789H2_PV_GAMMA_CTRL, parameter, 14);
|
||||
|
||||
/* Negative Voltage Gamma Control */
|
||||
parameter[0] = 0xD0;
|
||||
parameter[1] = 0x08;
|
||||
parameter[2] = 0x10;
|
||||
parameter[3] = 0x08;
|
||||
parameter[4] = 0x06;
|
||||
parameter[5] = 0x06;
|
||||
parameter[6] = 0x39;
|
||||
parameter[7] = 0x44;
|
||||
parameter[8] = 0x51;
|
||||
parameter[9] = 0x0B;
|
||||
parameter[10] = 0x16;
|
||||
parameter[11] = 0x14;
|
||||
parameter[12] = 0x2F;
|
||||
parameter[13] = 0x31;
|
||||
ST7789H2_WriteReg(ST7789H2_NV_GAMMA_CTRL, parameter, 14);
|
||||
|
||||
/* Display ON command */
|
||||
ST7789H2_DisplayOn();
|
||||
|
||||
/* Tearing Effect Line On: Option (00h:VSYNC Interface OFF, 01h:VSYNC Interface ON) */
|
||||
parameter[0] = 0x00;
|
||||
ST7789H2_WriteReg(ST7789H2_TEARING_EFFECT, parameter, 1);
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Set the Display Orientation.
|
||||
* @param orientation: ST7789H2_ORIENTATION_PORTRAIT, ST7789H2_ORIENTATION_LANDSCAPE
|
||||
* or ST7789H2_ORIENTATION_LANDSCAPE_ROT180
|
||||
* @retval None
|
||||
*/
|
||||
void ST7789H2_SetOrientation(uint32_t orientation)
|
||||
{
|
||||
uint8_t parameter[6];
|
||||
|
||||
if(orientation == ST7789H2_ORIENTATION_LANDSCAPE)
|
||||
{
|
||||
parameter[0] = 0x00;
|
||||
}
|
||||
else if(orientation == ST7789H2_ORIENTATION_LANDSCAPE_ROT180)
|
||||
{
|
||||
/* Vertical Scrolling Definition */
|
||||
/* TFA describes the Top Fixed Area */
|
||||
parameter[0] = 0x00;
|
||||
parameter[1] = 0x00;
|
||||
/* VSA describes the height of the Vertical Scrolling Area */
|
||||
parameter[2] = 0x01;
|
||||
parameter[3] = 0xF0;
|
||||
/* BFA describes the Bottom Fixed Area */
|
||||
parameter[4] = 0x00;
|
||||
parameter[5] = 0x00;
|
||||
ST7789H2_WriteReg(ST7789H2_VSCRDEF, parameter, 6);
|
||||
|
||||
/* Vertical Scroll Start Address of RAM */
|
||||
/* GRAM row nbr (320) - Display row nbr (240) = 80 = 0x50 */
|
||||
parameter[0] = 0x00;
|
||||
parameter[1] = 0x50;
|
||||
ST7789H2_WriteReg(ST7789H2_VSCSAD, parameter, 2);
|
||||
|
||||
parameter[0] = 0xC0;
|
||||
}
|
||||
else
|
||||
{
|
||||
parameter[0] = 0x60;
|
||||
}
|
||||
ST7789H2_WriteReg(ST7789H2_NORMAL_DISPLAY, parameter, 1);
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Enables the Display.
|
||||
* @param None
|
||||
* @retval None
|
||||
*/
|
||||
void ST7789H2_DisplayOn(void)
|
||||
{
|
||||
/* Display ON command */
|
||||
ST7789H2_WriteReg(ST7789H2_DISPLAY_ON, (uint8_t*)NULL, 0);
|
||||
|
||||
/* Sleep Out command */
|
||||
ST7789H2_WriteReg(ST7789H2_SLEEP_OUT, (uint8_t*)NULL, 0);
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Disables the Display.
|
||||
* @param None
|
||||
* @retval None
|
||||
*/
|
||||
void ST7789H2_DisplayOff(void)
|
||||
{
|
||||
uint8_t parameter[1];
|
||||
parameter[0] = 0xFE;
|
||||
/* Display OFF command */
|
||||
ST7789H2_WriteReg(ST7789H2_DISPLAY_OFF, parameter, 1);
|
||||
/* Sleep In Command */
|
||||
ST7789H2_WriteReg(ST7789H2_SLEEP_IN, (uint8_t*)NULL, 0);
|
||||
/* Wait for 10ms */
|
||||
LCD_IO_Delay(10);
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Get the LCD pixel Width.
|
||||
* @param None
|
||||
* @retval The Lcd Pixel Width
|
||||
*/
|
||||
uint16_t ST7789H2_GetLcdPixelWidth(void)
|
||||
{
|
||||
return (uint16_t)ST7789H2_LCD_PIXEL_WIDTH;
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Get the LCD pixel Height.
|
||||
* @param None
|
||||
* @retval The Lcd Pixel Height
|
||||
*/
|
||||
uint16_t ST7789H2_GetLcdPixelHeight(void)
|
||||
{
|
||||
return (uint16_t)ST7789H2_LCD_PIXEL_HEIGHT;
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Get the st7789h2 ID.
|
||||
* @param None
|
||||
* @retval The st7789h2 ID
|
||||
*/
|
||||
uint16_t ST7789H2_ReadID(void)
|
||||
{
|
||||
LCD_IO_Init();
|
||||
|
||||
return ST7789H2_ReadReg(ST7789H2_LCD_ID);
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Set Cursor position.
|
||||
* @param Xpos: specifies the X position.
|
||||
* @param Ypos: specifies the Y position.
|
||||
* @retval None
|
||||
*/
|
||||
void ST7789H2_SetCursor(uint16_t Xpos, uint16_t Ypos)
|
||||
{
|
||||
uint8_t parameter[4];
|
||||
/* CASET: Comumn Addrses Set */
|
||||
parameter[0] = 0x00;
|
||||
parameter[1] = 0x00 + Xpos;
|
||||
parameter[2] = 0x00;
|
||||
parameter[3] = 0xEF + Xpos;
|
||||
ST7789H2_WriteReg(ST7789H2_CASET, parameter, 4);
|
||||
/* RASET: Row Addrses Set */
|
||||
parameter[0] = 0x00;
|
||||
parameter[1] = 0x00 + Ypos;
|
||||
parameter[2] = 0x00;
|
||||
parameter[3] = 0xEF + Ypos;
|
||||
ST7789H2_WriteReg(ST7789H2_RASET, parameter, 4);
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Write pixel.
|
||||
* @param Xpos: specifies the X position.
|
||||
* @param Ypos: specifies the Y position.
|
||||
* @param RGBCode: the RGB pixel color in RGB565 format
|
||||
* @retval None
|
||||
*/
|
||||
void ST7789H2_WritePixel(uint16_t Xpos, uint16_t Ypos, uint16_t RGBCode)
|
||||
{
|
||||
/* Set Cursor */
|
||||
ST7789H2_SetCursor(Xpos, Ypos);
|
||||
|
||||
/* Prepare to write to LCD RAM */
|
||||
ST7789H2_WriteReg(ST7789H2_WRITE_RAM, (uint8_t*)NULL, 0); /* RAM write data command */
|
||||
|
||||
/* Write RAM data */
|
||||
LCD_IO_WriteData(RGBCode);
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Read pixel.
|
||||
* @param Xpos: specifies the X position.
|
||||
* @param Ypos: specifies the Y position.
|
||||
* @retval The RGB pixel color in RGB565 format
|
||||
*/
|
||||
uint16_t ST7789H2_ReadPixel(uint16_t Xpos, uint16_t Ypos)
|
||||
{
|
||||
ST7789H2_Rgb888 rgb888;
|
||||
uint8_t r, g, b;
|
||||
uint16_t rgb565;
|
||||
|
||||
/* Set Cursor */
|
||||
ST7789H2_SetCursor(Xpos, Ypos);
|
||||
|
||||
/* Read RGB888 data from LCD RAM */
|
||||
rgb888 = ST7789H2_ReadPixel_rgb888(Xpos, Ypos);
|
||||
|
||||
/* Convert RGB888 to RGB565 */
|
||||
r = ((rgb888.red & 0xF8) >> 3); /* Extract the red component 5 most significant bits */
|
||||
g = ((rgb888.green & 0xFC) >> 2); /* Extract the green component 6 most significant bits */
|
||||
b = ((rgb888.blue & 0xF8) >> 3); /* Extract the blue component 5 most significant bits */
|
||||
|
||||
rgb565 = ((uint16_t)(r) << 11) + ((uint16_t)(g) << 5) + ((uint16_t)(b) << 0);
|
||||
|
||||
return (rgb565);
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Writes to the selected LCD register.
|
||||
* @param Command: command value (or register address as named in st7789h2 doc).
|
||||
* @param Parameters: pointer on parameters value (if command uses one or several parameters).
|
||||
* @param NbParameters: number of command parameters (0 if no parameter)
|
||||
* @retval None
|
||||
*/
|
||||
void ST7789H2_WriteReg(uint8_t Command, uint8_t *Parameters, uint8_t NbParameters)
|
||||
{
|
||||
uint8_t i;
|
||||
|
||||
/* Send command */
|
||||
LCD_IO_WriteReg(Command);
|
||||
|
||||
/* Send command's parameters if any */
|
||||
for (i=0; i<NbParameters; i++)
|
||||
{
|
||||
LCD_IO_WriteData(Parameters[i]);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Reads the selected LCD Register.
|
||||
* @param Command: command value (or register address as named in st7789h2 doc).
|
||||
* @retval Register Value.
|
||||
*/
|
||||
uint8_t ST7789H2_ReadReg(uint8_t Command)
|
||||
{
|
||||
/* Send command */
|
||||
LCD_IO_WriteReg(Command);
|
||||
|
||||
/* Read dummy data */
|
||||
LCD_IO_ReadData();
|
||||
|
||||
/* Read register value */
|
||||
return (LCD_IO_ReadData());
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Sets a display window
|
||||
* @param Xpos: specifies the X bottom left position.
|
||||
* @param Ypos: specifies the Y bottom left position.
|
||||
* @param Height: display window height.
|
||||
* @param Width: display window width.
|
||||
* @retval None
|
||||
*/
|
||||
void ST7789H2_SetDisplayWindow(uint16_t Xpos, uint16_t Ypos, uint16_t Width, uint16_t Height)
|
||||
{
|
||||
if (Xpos < ST7789H2_LCD_PIXEL_WIDTH)
|
||||
{
|
||||
WindowsXstart = Xpos;
|
||||
}
|
||||
else
|
||||
{
|
||||
WindowsXstart = 0;
|
||||
}
|
||||
|
||||
if (Ypos < ST7789H2_LCD_PIXEL_HEIGHT)
|
||||
{
|
||||
WindowsYstart = Ypos;
|
||||
}
|
||||
else
|
||||
{
|
||||
WindowsYstart = 0;
|
||||
}
|
||||
|
||||
if (Width + Xpos <= ST7789H2_LCD_PIXEL_WIDTH)
|
||||
{
|
||||
WindowsXend = Width + Xpos - 1;
|
||||
}
|
||||
else
|
||||
{
|
||||
WindowsXend = ST7789H2_LCD_PIXEL_WIDTH - 1;
|
||||
}
|
||||
|
||||
if (Height + Ypos <= ST7789H2_LCD_PIXEL_HEIGHT)
|
||||
{
|
||||
WindowsYend = Height + Ypos - 1;
|
||||
}
|
||||
else
|
||||
{
|
||||
WindowsYend = ST7789H2_LCD_PIXEL_HEIGHT-1;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Draw vertical line.
|
||||
* @param RGBCode: Specifies the RGB color in RGB565 format
|
||||
* @param Xpos: specifies the X position.
|
||||
* @param Ypos: specifies the Y position.
|
||||
* @param Length: specifies the Line length.
|
||||
* @retval None
|
||||
*/
|
||||
void ST7789H2_DrawHLine(uint16_t RGBCode, uint16_t Xpos, uint16_t Ypos, uint16_t Length)
|
||||
{
|
||||
uint16_t counter = 0;
|
||||
|
||||
/* Set Cursor */
|
||||
ST7789H2_SetCursor(Xpos, Ypos);
|
||||
|
||||
/* Prepare to write to LCD RAM */
|
||||
ST7789H2_WriteReg(ST7789H2_WRITE_RAM, (uint8_t*)NULL, 0); /* RAM write data command */
|
||||
|
||||
/* Sent a complete line */
|
||||
for(counter = 0; counter < Length; counter++)
|
||||
{
|
||||
LCD_IO_WriteData(RGBCode);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Draw vertical line.
|
||||
* @param RGBCode: Specifies the RGB color
|
||||
* @param Xpos: specifies the X position.
|
||||
* @param Ypos: specifies the Y position.
|
||||
* @param Length: specifies the Line length.
|
||||
* @retval None
|
||||
*/
|
||||
void ST7789H2_DrawVLine(uint16_t RGBCode, uint16_t Xpos, uint16_t Ypos, uint16_t Length)
|
||||
{
|
||||
uint16_t counter = 0;
|
||||
|
||||
/* Set Cursor */
|
||||
ST7789H2_SetCursor(Xpos, Ypos);
|
||||
|
||||
/* Prepare to write to LCD RAM */
|
||||
ST7789H2_WriteReg(ST7789H2_WRITE_RAM, (uint8_t*)NULL, 0); /* RAM write data command */
|
||||
|
||||
/* Fill a complete vertical line */
|
||||
for(counter = 0; counter < Length; counter++)
|
||||
{
|
||||
ST7789H2_WritePixel(Xpos, Ypos + counter, RGBCode);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Displays a bitmap picture.
|
||||
* @param BmpAddress: Bmp picture address.
|
||||
* @param Xpos: Bmp X position in the LCD
|
||||
* @param Ypos: Bmp Y position in the LCD
|
||||
* @retval None
|
||||
*/
|
||||
void ST7789H2_DrawBitmap(uint16_t Xpos, uint16_t Ypos, uint8_t *pbmp)
|
||||
{
|
||||
uint32_t index = 0, size = 0;
|
||||
uint32_t posY;
|
||||
uint32_t nb_line = 0;
|
||||
uint16_t Xsize = WindowsXend - WindowsXstart + 1;
|
||||
uint16_t Ysize = WindowsYend - WindowsYstart + 1;
|
||||
|
||||
/* Read bitmap size */
|
||||
size = *(volatile uint16_t *) (pbmp + 2);
|
||||
size |= (*(volatile uint16_t *) (pbmp + 4)) << 16;
|
||||
/* Get bitmap data address offset */
|
||||
index = *(volatile uint16_t *) (pbmp + 10);
|
||||
index |= (*(volatile uint16_t *) (pbmp + 12)) << 16;
|
||||
size = (size - index)/2;
|
||||
pbmp += index;
|
||||
|
||||
for (posY = (Ypos + Ysize); posY > Ypos; posY--) /* In BMP files the line order is inverted */
|
||||
{
|
||||
/* Set Cursor */
|
||||
ST7789H2_SetCursor(Xpos, posY - 1);
|
||||
|
||||
/* Draw one line of the picture */
|
||||
ST7789H2_DrawRGBHLine(Xpos, posY - 1, Xsize, (pbmp + (nb_line * Xsize * 2)));
|
||||
nb_line++;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Displays picture.
|
||||
* @param pdata: picture address.
|
||||
* @param Xpos: Image X position in the LCD
|
||||
* @param Ypos: Image Y position in the LCD
|
||||
* @param Xsize: Image X size in the LCD
|
||||
* @param Ysize: Image Y size in the LCD
|
||||
* @retval None
|
||||
*/
|
||||
void ST7789H2_DrawRGBImage(uint16_t Xpos, uint16_t Ypos, uint16_t Xsize, uint16_t Ysize, uint8_t *pdata)
|
||||
{
|
||||
uint32_t posY;
|
||||
uint32_t nb_line = 0;
|
||||
|
||||
for (posY = Ypos; posY < (Ypos + Ysize); posY ++)
|
||||
{
|
||||
/* Set Cursor */
|
||||
ST7789H2_SetCursor(Xpos, posY);
|
||||
|
||||
/* Draw one line of the picture */
|
||||
ST7789H2_DrawRGBHLine(Xpos, posY, Xsize, (pdata + (nb_line * Xsize * 2)));
|
||||
nb_line++;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/******************************************************************************
|
||||
Static Functions
|
||||
*******************************************************************************/
|
||||
|
||||
/**
|
||||
* @brief Read pixel from LCD RAM in RGB888 format
|
||||
* @param Xpos: specifies the X position.
|
||||
* @param Ypos: specifies the Y position.
|
||||
* @retval Each RGB pixel color components in a structure
|
||||
*/
|
||||
static ST7789H2_Rgb888 ST7789H2_ReadPixel_rgb888(uint16_t Xpos, uint16_t Ypos)
|
||||
{
|
||||
ST7789H2_Rgb888 rgb888;
|
||||
uint16_t rgb888_part1, rgb888_part2;
|
||||
|
||||
/* In LCD RAM, pixels are 24 bits packed and read with 16 bits access
|
||||
* Here is the pixels components arrangement in memory :
|
||||
* bits: 15 14 13 12 11 10 09 08 | 07 06 05 04 03 02 01 00
|
||||
* address 0 : red pixel 0 X X | green pixel 0 X X
|
||||
* address 1 : blue pixel 0 X X | red pixel 1 X X
|
||||
* address 2 : green pixel 1 X X | blue pixel 1 X X
|
||||
*/
|
||||
|
||||
/* Set Cursor */
|
||||
ST7789H2_SetCursor(Xpos, Ypos);
|
||||
/* Prepare to read LCD RAM */
|
||||
ST7789H2_WriteReg(ST7789H2_READ_RAM, (uint8_t*)NULL, 0); /* RAM read data command */
|
||||
/* Dummy read */
|
||||
LCD_IO_ReadData();
|
||||
/* Read first part of the RGB888 data */
|
||||
rgb888_part1 = LCD_IO_ReadData();
|
||||
/* Read first part of the RGB888 data */
|
||||
rgb888_part2 = LCD_IO_ReadData();
|
||||
|
||||
/* red component */
|
||||
rgb888.red = (rgb888_part1 & 0xFC00) >> 8;
|
||||
/* green component */
|
||||
rgb888.green = (rgb888_part1 & 0x00FC) >> 0;
|
||||
/* blue component */
|
||||
rgb888.blue = (rgb888_part2 & 0xFC00) >> 8;
|
||||
|
||||
return rgb888;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* @brief Displays a single picture line.
|
||||
* @param pdata: picture address.
|
||||
* @param Xpos: Image X position in the LCD
|
||||
* @param Ypos: Image Y position in the LCD
|
||||
* @param Xsize: Image X size in the LCD
|
||||
* @retval None
|
||||
*/
|
||||
static void ST7789H2_DrawRGBHLine(uint16_t Xpos, uint16_t Ypos, uint16_t Xsize, uint8_t *pdata)
|
||||
{
|
||||
uint32_t i = 0;
|
||||
uint32_t posX;
|
||||
uint16_t *rgb565 = (uint16_t*)pdata;
|
||||
|
||||
/* Prepare to write to LCD RAM */
|
||||
ST7789H2_WriteReg(ST7789H2_WRITE_RAM, (uint8_t*)NULL, 0); /* RAM write data command */
|
||||
|
||||
for (posX = Xpos; posX < (Xsize + Xpos); posX++)
|
||||
{
|
||||
if ((posX >= WindowsXstart) && (Ypos >= WindowsYstart) && /* Check we are in the defined window */
|
||||
(posX <= WindowsXend) && (Ypos <= WindowsYend))
|
||||
{
|
||||
if (posX != (Xsize + Xpos)) /* When writing last pixel when size is odd, the third part is not written */
|
||||
{
|
||||
LCD_IO_WriteData(rgb565[i]);
|
||||
}
|
||||
i++;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* @}
|
||||
*/
|
||||
|
||||
/**
|
||||
* @}
|
||||
*/
|
||||
|
||||
/**
|
||||
* @}
|
||||
*/
|
||||
|
||||
/**
|
||||
* @}
|
||||
*/
|
||||
|
||||
/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
|
||||
172
P5_SETR2/Components/st7789h2/st7789h2.h
Normal file
172
P5_SETR2/Components/st7789h2/st7789h2.h
Normal file
@@ -0,0 +1,172 @@
|
||||
/**
|
||||
******************************************************************************
|
||||
* @file st7789h2.h
|
||||
* @author MCD Application Team
|
||||
* @brief This file contains all the functions prototypes for the st7789h2.c
|
||||
* driver.
|
||||
******************************************************************************
|
||||
* @attention
|
||||
*
|
||||
* <h2><center>© Copyright (c) 2016 STMicroelectronics.
|
||||
* All rights reserved.</center></h2>
|
||||
*
|
||||
* This software component is licensed by ST under BSD 3-Clause license,
|
||||
* the "License"; You may not use this file except in compliance with the
|
||||
* License. You may obtain a copy of the License at:
|
||||
* opensource.org/licenses/BSD-3-Clause
|
||||
*
|
||||
******************************************************************************
|
||||
*/
|
||||
|
||||
/* Define to prevent recursive inclusion -------------------------------------*/
|
||||
#ifndef __ST7789H2_H
|
||||
#define __ST7789H2_H
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
/* Includes ------------------------------------------------------------------*/
|
||||
#include <stdio.h>
|
||||
#include "../Common/lcd.h"
|
||||
|
||||
/** @addtogroup BSP
|
||||
* @{
|
||||
*/
|
||||
|
||||
/** @addtogroup Components
|
||||
* @{
|
||||
*/
|
||||
|
||||
/** @addtogroup ST7789H2
|
||||
* @{
|
||||
*/
|
||||
|
||||
/** @defgroup ST7789H2_Exported_Types ST7789H2 Exported Types
|
||||
* @{
|
||||
*/
|
||||
/**
|
||||
* @}
|
||||
*/
|
||||
|
||||
/** @defgroup ST7789H2_Exported_Constants ST7789H2 Exported Constants
|
||||
* @{
|
||||
*/
|
||||
/**
|
||||
* @brief ST7789H2 ID
|
||||
*/
|
||||
#define ST7789H2_ID 0x85
|
||||
|
||||
/**
|
||||
* @brief ST7789H2 Size
|
||||
*/
|
||||
#define ST7789H2_LCD_PIXEL_WIDTH ((uint16_t)240)
|
||||
#define ST7789H2_LCD_PIXEL_HEIGHT ((uint16_t)240)
|
||||
|
||||
/**
|
||||
* @brief LCD_OrientationTypeDef
|
||||
* Possible values of Display Orientation
|
||||
*/
|
||||
#define ST7789H2_ORIENTATION_PORTRAIT ((uint32_t)0x00) /* Portrait orientation choice of LCD screen */
|
||||
#define ST7789H2_ORIENTATION_LANDSCAPE ((uint32_t)0x01) /* Landscape orientation choice of LCD screen */
|
||||
#define ST7789H2_ORIENTATION_LANDSCAPE_ROT180 ((uint32_t)0x02) /* Landscape rotated 180<38> orientation choice of LCD screen */
|
||||
|
||||
/**
|
||||
* @brief ST7789H2 Registers
|
||||
*/
|
||||
#define ST7789H2_LCD_ID 0x04
|
||||
#define ST7789H2_SLEEP_IN 0x10
|
||||
#define ST7789H2_SLEEP_OUT 0x11
|
||||
#define ST7789H2_PARTIAL_DISPLAY 0x12
|
||||
#define ST7789H2_DISPLAY_INVERSION 0x21
|
||||
#define ST7789H2_DISPLAY_ON 0x29
|
||||
#define ST7789H2_WRITE_RAM 0x2C
|
||||
#define ST7789H2_READ_RAM 0x2E
|
||||
#define ST7789H2_CASET 0x2A
|
||||
#define ST7789H2_RASET 0x2B
|
||||
#define ST7789H2_VSCRDEF 0x33 /* Vertical Scroll Definition */
|
||||
#define ST7789H2_VSCSAD 0x37 /* Vertical Scroll Start Address of RAM */
|
||||
#define ST7789H2_TEARING_EFFECT 0x35
|
||||
#define ST7789H2_NORMAL_DISPLAY 0x36
|
||||
#define ST7789H2_IDLE_MODE_OFF 0x38
|
||||
#define ST7789H2_IDLE_MODE_ON 0x39
|
||||
#define ST7789H2_COLOR_MODE 0x3A
|
||||
#define ST7789H2_WRCABCMB 0x5E /* Write Content Adaptive Brightness Control */
|
||||
#define ST7789H2_RDCABCMB 0x5F /* Read Content Adaptive Brightness Control */
|
||||
#define ST7789H2_PORCH_CTRL 0xB2
|
||||
#define ST7789H2_GATE_CTRL 0xB7
|
||||
#define ST7789H2_VCOM_SET 0xBB
|
||||
#define ST7789H2_DISPLAY_OFF 0xBD
|
||||
#define ST7789H2_LCM_CTRL 0xC0
|
||||
#define ST7789H2_VDV_VRH_EN 0xC2
|
||||
#define ST7789H2_VDV_SET 0xC4
|
||||
#define ST7789H2_VCOMH_OFFSET_SET 0xC5
|
||||
#define ST7789H2_FR_CTRL 0xC6
|
||||
#define ST7789H2_POWER_CTRL 0xD0
|
||||
#define ST7789H2_PV_GAMMA_CTRL 0xE0
|
||||
#define ST7789H2_NV_GAMMA_CTRL 0xE1
|
||||
|
||||
/**
|
||||
* @}
|
||||
*/
|
||||
|
||||
/** @defgroup ST7789H2_Exported_Functions ST7789H2 Exported Functions
|
||||
* @{
|
||||
*/
|
||||
void ST7789H2_Init(void);
|
||||
void ST7789H2_SetOrientation(uint32_t orientation);
|
||||
uint16_t ST7789H2_ReadID(void);
|
||||
void ST7789H2_WriteReg(uint8_t Command, uint8_t *Parameters, uint8_t NbParameters);
|
||||
uint8_t ST7789H2_ReadReg(uint8_t Command);
|
||||
|
||||
void ST7789H2_DisplayOn(void);
|
||||
void ST7789H2_DisplayOff(void);
|
||||
void ST7789H2_SetCursor(uint16_t Xpos, uint16_t Ypos);
|
||||
void ST7789H2_WritePixel(uint16_t Xpos, uint16_t Ypos, uint16_t RGBCode);
|
||||
uint16_t ST7789H2_ReadPixel(uint16_t Xpos, uint16_t Ypos);
|
||||
|
||||
void ST7789H2_DrawHLine(uint16_t RGBCode, uint16_t Xpos, uint16_t Ypos, uint16_t Length);
|
||||
void ST7789H2_DrawVLine(uint16_t RGBCode, uint16_t Xpos, uint16_t Ypos, uint16_t Length);
|
||||
void ST7789H2_DrawBitmap(uint16_t Xpos, uint16_t Ypos, uint8_t *pbmp);
|
||||
void ST7789H2_DrawRGBImage(uint16_t Xpos, uint16_t Ypos, uint16_t Xsize, uint16_t Ysize, uint8_t *pdata);
|
||||
|
||||
void ST7789H2_SetDisplayWindow(uint16_t Xpos, uint16_t Ypos, uint16_t Width, uint16_t Height);
|
||||
|
||||
|
||||
uint16_t ST7789H2_GetLcdPixelWidth(void);
|
||||
uint16_t ST7789H2_GetLcdPixelHeight(void);
|
||||
|
||||
/* LCD driver structure */
|
||||
extern LCD_DrvTypeDef ST7789H2_drv;
|
||||
|
||||
/* LCD IO functions */
|
||||
extern void LCD_IO_Init(void);
|
||||
extern void LCD_IO_WriteMultipleData(uint16_t *pData, uint32_t Size);
|
||||
extern void LCD_IO_WriteReg(uint8_t Reg);
|
||||
extern void LCD_IO_WriteData(uint16_t RegValue);
|
||||
extern uint16_t LCD_IO_ReadData(void);
|
||||
extern void LCD_IO_Delay(uint32_t delay);
|
||||
|
||||
/**
|
||||
* @}
|
||||
*/
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif /* __ST7789H2_H */
|
||||
|
||||
/**
|
||||
* @}
|
||||
*/
|
||||
|
||||
/**
|
||||
* @}
|
||||
*/
|
||||
|
||||
/**
|
||||
* @}
|
||||
*/
|
||||
|
||||
/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
|
||||
Reference in New Issue
Block a user