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屏幕”的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: XP系统如何禁止别人在电脑上安装程序
- 下一篇: 中国移动发力5G,月增900万,反超中国