欢迎访问 生活随笔!

生活随笔

当前位置: 首页 > 编程资源 > 编程问答 >内容正文

编程问答

stm32驱动rgb屏电路图_stm32h7“点亮RGB屏幕”

发布时间:2024/3/13 编程问答 84 豆豆
生活随笔 收集整理的这篇文章主要介绍了 stm32驱动rgb屏电路图_stm32h7“点亮RGB屏幕” 小编觉得挺不错的,现在分享给大家,帮大家做个参考.

本文是我学习安福莱H7教程后总结。目的是随便拿来一个RGB屏幕和屏幕手册就能点亮它。下面记录我的操作过程。本例7寸RGB屏使用的source driver ic是OTA7001。

1、硬件设计

硬件配置为24bit并口RGB接口,如图1

图1

2、软件设计

int main(void)函数中加上LCDH7_ConfigLTDC()和LCD_SetBackLight(BRIGHT_DEFAULT)即可,如代码1

int main(void)

{

MPU_Config();

CPU_CACHE_Enable();

HAL_Init();

SystemClock_Config();

/* 配置内部LTDC */

LCDH7_ConfigLTDC();

/* 设置背光为缺省亮度 */

LCD_SetBackLight(BRIGHT_DEFAULT);

while (1)

{

}

}

代码1

那么配置好LCDH7_ConfigLTDC()函数即可点亮RGB屏幕。此函数主要进行的工作见如下伪代码1

伪代码LCDH7_ConfigLTDC()

{

1、GPIO配置

2、LTDC配置

}

伪代码1

下面分别介绍GPIO配置和LTDC配置。

2-1、GPIO配置

/* 1、配置LCD相关的GPIO */

{

/* GPIOs Configuration */

/*

+------------------------+-----------------------+----------------------------+

+ LCD pins assignment +

+------------------------+-----------------------+----------------------------+

| LCDH7_TFT R0 PI.15 | LCDH7_TFT G0 PJ.07 | LCDH7_TFT B0 PJ.12 |

| LCDH7_TFT R1 PJ.00 | LCDH7_TFT G1 PJ.08 | LCDH7_TFT B1 PJ.13 |

| LCDH7_TFT R2 PJ.01 | LCDH7_TFT G2 PJ.09 | LCDH7_TFT B2 PJ.14 |

| LCDH7_TFT R3 PJ.02 | LCDH7_TFT G3 PJ.10 | LCDH7_TFT B3 PJ.15 |

| LCDH7_TFT R4 PJ.03 | LCDH7_TFT G4 PJ.11 | LCDH7_TFT B4 PK.03 |

| LCDH7_TFT R5 PJ.04 | LCDH7_TFT G5 PK.00 | LCDH7_TFT B5 PK.04 |

| LCDH7_TFT R6 PJ.05 | LCDH7_TFT G6 PK.01 | LCDH7_TFT B6 PK.05 |

| LCDH7_TFT R7 PJ.06 | LCDH7_TFT G7 PK.02 | LCDH7_TFT B7 PK.06 |

-------------------------------------------------------------------------------

| LCDH7_TFT HSYNC PI.12 | LCDTFT VSYNC PI.13 |

| LCDH7_TFT CLK PI.14 | LCDH7_TFT DE PK.07 |

-----------------------------------------------------

*/

GPIO_InitTypeDef GPIO_Init_Structure;

/*##-Enable peripherals and GPIO Clocks #################################*/

/* 使能LTDC时钟 */

__HAL_RCC_LTDC_CLK_ENABLE();

/* 使能GPIO时钟 */

__HAL_RCC_GPIOI_CLK_ENABLE();

__HAL_RCC_GPIOJ_CLK_ENABLE();

__HAL_RCC_GPIOK_CLK_ENABLE();

/* GPIOI 配置 */

GPIO_Init_Structure.Pin = GPIO_PIN_12 | GPIO_PIN_13 | GPIO_PIN_14 | GPIO_PIN_15;

GPIO_Init_Structure.Mode = GPIO_MODE_AF_PP;

GPIO_Init_Structure.Pull = GPIO_NOPULL;

GPIO_Init_Structure.Speed = GPIO_SPEED_FREQ_HIGH;

GPIO_Init_Structure.Alternate = GPIO_AF14_LTDC;

HAL_GPIO_Init(GPIOI, &GPIO_Init_Structure);

/* GPIOJ 配置 */

GPIO_Init_Structure.Pin = GPIO_PIN_0 | GPIO_PIN_1 | GPIO_PIN_2 | GPIO_PIN_3 | \

GPIO_PIN_4 | GPIO_PIN_5 | GPIO_PIN_6 | GPIO_PIN_7 | \

GPIO_PIN_8 | GPIO_PIN_9 | GPIO_PIN_10 | GPIO_PIN_11 | \

GPIO_PIN_12 | GPIO_PIN_13 | GPIO_PIN_14 | GPIO_PIN_15;

GPIO_Init_Structure.Mode = GPIO_MODE_AF_PP;

GPIO_Init_Structure.Pull = GPIO_NOPULL;

GPIO_Init_Structure.Speed = GPIO_SPEED_FREQ_HIGH;

GPIO_Init_Structure.Alternate = GPIO_AF14_LTDC;

HAL_GPIO_Init(GPIOJ, &GPIO_Init_Structure);

/* GPIOK 配置 */

GPIO_Init_Structure.Pin = GPIO_PIN_0 | GPIO_PIN_1 | GPIO_PIN_2 | GPIO_PIN_3 | \

GPIO_PIN_4 | GPIO_PIN_5 | GPIO_PIN_6 | GPIO_PIN_7;

GPIO_Init_Structure.Mode = GPIO_MODE_AF_PP;

GPIO_Init_Structure.Pull = GPIO_NOPULL;

GPIO_Init_Structure.Speed = GPIO_SPEED_FREQ_HIGH;

GPIO_Init_Structure.Alternate = GPIO_AF14_LTDC;

HAL_GPIO_Init(GPIOK, &GPIO_Init_Structure);

}

代码2

2-2、LTDC配置

2-2-1、配置LTDC时钟

2-2-2、配置信号极性

2-2-3、配置时序

2-2-4、配置背景层颜色

2-2-1、配置LTDC时钟

找到该RGB屏幕手册有关时钟配置参数部分。可以看到该RGB屏幕支持的时钟频率的典型值是30MHz,最大值是50MHz,如图2。

图2

我打算把时钟配置为最大频率50MHz,如何配置呢?使用STM32CubeMX软件进行时钟配置,如图3。

图3

通过图3可以看到,为得到50MHz的LTDC时钟,即配置PLL3M = 5,PLL3N = 60,PLL3R = 6,如代码3。

/* 2-1、配置LTDC时钟 */

PeriphClkInitStruct.PeriphClockSelection = RCC_PERIPHCLK_LTDC;

PeriphClkInitStruct.PLL3.PLL3M = 5;

PeriphClkInitStruct.PLL3.PLL3N = 60;

PeriphClkInitStruct.PLL3.PLL3R = 6;

HAL_RCCEx_PeriphCLKConfig(&PeriphClkInitStruct);

代码3

2-2-2、配置信号极性

在此先说明RGB屏幕的DE(data enable)模式和HV(horizontal vertical)模式的区别。

注:这是两种不同的同步方式,现在的大尺寸面板一般使用DE同步模式,小尺寸的面板一般使用HV同步模式。HV模式是早期的驱动模式了,现在的液晶屏面板驱动IC基本都是支持HV和DE两种模式的。很多已经直接去掉了HV模式,仅支持DE模式。DE模式的好处就是使用比较简单方便。对于支持DE模式的液晶屏,H7可以不接行同步和场同步引脚。针对这个问题,还专门进行了测试,直接不初始化行同步和场同步引脚也是不受影响的。但DE模式不全都是方便的,比如ili9488支持的DE模式就麻烦,是需要使用行同步和场同步引脚的。

找到该RGB屏幕手册有关信号时序图,如图4

图4

经过测试,DE配置为低电平有效才能正常出现该时序波形,这个问题与时序图中DE相反,很奇怪。配置信号极性,如代码4。

注:LTDC_PCPolarity_IPC和LTDC_PCPolarity_IIPC两种极性,选择不当会有一些问题。比如,选择不当底边会有黑边。

/* 2-2、配置信号极性 */

hltdc_F.Init.HSPolarity = LTDC_HSPOLARITY_AL; /* HSYNC 低电平有效 */

hltdc_F.Init.VSPolarity = LTDC_VSPOLARITY_AL; /* VSYNC 低电平有效 */

hltdc_F.Init.DEPolarity = LTDC_DEPOLARITY_AL; /* DE 低电平有效 */

hltdc_F.Init.PCPolarity = LTDC_PCPOLARITY_IPC;

代码4

2-2-3、配置时序

stm32h7官方参考手册关于LCF-TFT同步时序描述,如图5

图5

那么图5中的HSYNC Width、VSYNC Width、HBP、VBP、Active Width、Active Height 、HFP、VFP这些参数具体数值是多少呢?打开该RGB屏幕手册,找到该部分描述,如图6

图6

通过图6可以知道Width = 800,HSYNC_W = 48,HBP = 88,HFP = 40,Height = 480,VSYNC_W = 3,VBP = 32,VFP = 13。配置时序,如代码5。

/* 2-3、时序配置 */

Width = 800;

HSYNC_W = 48;

HBP = 88;

HFP = 40;

Height = 480;

VSYNC_W = 3;

VBP = 32;

VFP = 13;

hltdc_F.Init.HorizontalSync = (HSYNC_W - 1);

hltdc_F.Init.VerticalSync = (VSYNC_W - 1);

hltdc_F.Init.AccumulatedHBP = (HSYNC_W + HBP - 1);

hltdc_F.Init.AccumulatedVBP = (VSYNC_W + VBP - 1);

hltdc_F.Init.AccumulatedActiveH = (Height + VSYNC_W + VBP - 1);

hltdc_F.Init.AccumulatedActiveW = (Width + HSYNC_W + HBP - 1);

hltdc_F.Init.TotalHeigh = (Height + VSYNC_W + VBP + VFP - 1);

hltdc_F.Init.TotalWidth = (Width + HSYNC_W + HBP + HFP - 1);

代码5

2-2-4、配置背景层颜色

完成以上步骤后,可以测试LCD的背景色显示是否正常,如果正常,说明配置基本没有问题。这里配置的背景颜色是红色,即hltdc_F.Init.Backcolor.Blue = 0; hltdc_F.Init.Backcolor.Green = 0; hltdc_F.Init.Backcolor.Red = 255; 配置背景层颜色代码如下。

/* 2-4、配置背景层颜色 */

hltdc_F.Init.Backcolor.Blue = 0;

hltdc_F.Init.Backcolor.Green = 0;

hltdc_F.Init.Backcolor.Red = 255;

hltdc_F.Instance = LTDC;

/* 初始化LTDC */

if (HAL_LTDC_Init(&hltdc_F) != HAL_OK)

{

/* 初始化错误 */

Error_Handler(__FILE__, __LINE__);

}

通过以上配置,将程序下载进电路板,可以看到屏幕点亮,显示红色,如图7

图7

至此,stm32h7“点亮RGB屏幕”操作完毕!

总结

以上是生活随笔为你收集整理的stm32驱动rgb屏电路图_stm32h7“点亮RGB屏幕”的全部内容,希望文章能够帮你解决所遇到的问题。

如果觉得生活随笔网站内容还不错,欢迎将生活随笔推荐给好友。