这个是之前做的寄存器方式,方便LL库参考
[C] 纯文本查看 复制代码 /*
*********************************************************************************************************
* 函 数 名: ST7789_FillRect
* 功能说明: 用一个颜色值填充一个矩形。
* 形 参:
* _usX,_usY: 矩形左上角的坐标
* _usHeight : 矩形的高度
* _usWidth : 矩形的宽度
* _usColor : 颜色代码
* 返 回 值: 无
*********************************************************************************************************
*/
void ST7789_FillRect(uint16_t _usX, uint16_t _usY, uint16_t _usHeight, uint16_t _usWidth, uint16_t _usColor)
{
#if 1
uint16_t i, j;
uint16_t width, height;
width = _usWidth;
height = _usHeight;
if (height > g_LcdHeight)
{
height = g_LcdHeight;
}
if (width > g_LcdWidth)
{
width = g_LcdWidth;
}
for (i = 0; i < width; i++)
{
for (j = 0; j < height; j++)
{
ST7789_PutPixel(_usX + i, _usY + j, _usColor);
}
}
#else
uint32_t i;
uint32_t Color;
uint32_t blkcnt;
Color = (uint32_t)(_usColor<<16) + _usColor;
blkcnt = (_usHeight * _usWidth)>>1;
ST7789_SetDispWin(_usX, _usY, _usHeight, _usWidth);
LCD_RS_1();
LCD_CS_0();
SPI5->CFG1 = SPI_BAUDRATEPRESCALER_2 | 31;
for (i = 0; i < blkcnt; i++)
{
SPI5->CR1 = SPI_CR1_SSI;
SPI5->CR2 = 2;
SPI5->CR1 = SPI_CR1_SPE | SPI_CR1_SSI;
SPI5->CR1 = SPI_CR1_SPE | SPI_CR1_SSI | SPI_CR1_CSTART;
while ((SPI5->SR & SPI_FLAG_TXE) == 0);
*((__IO uint32_t *)&SPI5->TXDR) = Color;
while ((SPI5->SR & SPI_SR_TXC) == 0);
SPI5->IFCR = SPI_IFCR_EOTC | SPI_IFCR_TXTFC;
SPI5->CR1 &= ~(SPI_CR1_SPE);
}
if((_usWidth % 2) == 1)
{
SPI5->CFG1 = SPI_BAUDRATEPRESCALER_2 | 15;
SPI5->CR1 = SPI_CR1_SSI;
SPI5->CR2 = 1;
SPI5->CR1 = SPI_CR1_SPE | SPI_CR1_SSI;
SPI5->CR1 = SPI_CR1_SPE | SPI_CR1_SSI | SPI_CR1_CSTART;
while ((SPI5->SR & SPI_FLAG_TXE) == 0);
*((__IO uint16_t *)&SPI5->TXDR) = _usColor;
while ((SPI5->SR & SPI_SR_TXC) == 0);
SPI5->IFCR = SPI_IFCR_EOTC | SPI_IFCR_TXTFC;
SPI5->CR1 &= ~(SPI_CR1_SPE);
}
LCD_CS_1();
#endif
}
|