本文是我学习安福莱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屏幕”相关推荐

  1. STM32驱动串口屏,STM32F103C8T6串口发送指令控制HMI串口屏

    STM32驱动串口屏,STM32F103C8T6串口发送指令控制HMI串口屏 串口屏 基础指令集 硬件和接线 接线 实验前准备 STM32程序 串口程序 主函数 实验现象 总结 串口屏 串口屏是一个集 ...

  2. stm32驱动rgb屏电路图_RGB屏驱动流程

    RGB屏驱动 这里讲下大致的流程,不作具体详细代码示例. TFT LCD的屏幕驱动方式有很多种,以12864来说,一般是直接由SPI来操作屏的驱动IC,再来IC来负责驱动屏幕,还有一个驱动接口如808 ...

  3. stm32驱动rgb屏电路图_基于STM32F767驱动 LTDC LCD(RGB屏)

    [实例简介] 基于STM32F767驱动 LTDC LCD(RGB屏) 可以作为参考资料 [实例截图] [核心代码] 基于STM32F767驱动LTDCLCD(RGB屏) └── 基于STM32F76 ...

  4. android 自动亮屏解锁,android 点亮手机屏幕与屏幕解锁方法

    android 点亮手机屏幕与屏幕解锁方法 点亮手机屏幕 1.记得加权限 [html] PowerManager pm = (PowerManager)getSystemService(POWER_S ...

  5. stm32驱动rgb屏电路图_STM32直接驱动RGB接口的TFT数字彩屏设计

    STM32 直接驱动 RGB 接口的 TFT 数字彩屏设计 本文提出了一种由 STM32 的 FSMC 总线直接挂载 RGB 接口屏的方案,直接由一片 CPU(STM32F103VC) 来完成 TFT ...

  6. STM32,点亮RGB灯,指南者,新手

    STM32,点亮RGB灯,指南者 新手 stm32,用指南者固件库点亮RGB灯 一.GPIO是什么? 目录 新手 一.GPIO是什么? 二.GPIO功能框图 51单片机:点亮LED stm32:用固件 ...

  7. 常用的40引脚的RGB屏介绍

    文章目录 软排线位置介绍 概述 RGB屏必须的--背光电路 电阻 裸屏 电阻屏 电容屏 标准电容触摸屏CTP接口 软排线位置介绍 电阻屏信号线四根预留在软排上面,所以采用电阻屏方案的需要在主板上有对应 ...

  8. STM32驱动4寸ST7796S LCD-TFT屏

    STM32驱动4寸ST7796S LCD-TFT屏 简介 屏幕与STM32F103RCT6开发板接线 屏幕原理图 STM32驱动程序 屏幕显示效果 简介 屏幕驱动芯片ST7796S最大支持320*48 ...

  9. STM32驱动WS2812B-2020 RGB彩灯(一)

    STM32驱动WS2812B-2020RGB彩灯(一) 最近搞飞控,看到有些飞控上都使用的RGB彩灯,够酷炫,所以尝试着自己搞一个. 手上的硬件有一块自制的STM32F103最小系统板,一个同事焊好的 ...

最新文章

  1. Xamarin XAML语言教程使用方法设置进度条进度
  2. 美团点评稳定价格措施及稳定价格期结束 超额配股权失效
  3. java word 在线编辑图片_java开发实现word在线编辑及流转
  4. Docker从入门到实践笔记(一)
  5. 家庭接入: dsl 电缆ftth 拨号和卫星_家庭宽带的路由器升级之路
  6. mac json格式化工具_简洁好用的工具都是相似的
  7. ccf_201712-2
  8. Linux里sra文件是什么,prefetch命令下载SRA文件
  9. linux 清空进程recv q,Linux中ss命令Recv-Q和Send-Q详解
  10. 下列选项不属于有机物的是_初级会计实务:属于工业企业营业收入的有哪些?...
  11. 用JavaScript编写COM组件的实例
  12. Ansible详解(六)——Ansible palybook基础
  13. 【转】c语言静态变量和静态函数
  14. java内部编译器错误,可能的Java编译器错误!程序不能与某些编译器一起编译
  15. 黑月教主工具脱水印_PS三种去水印方法简单粗暴!看完你就学会!
  16. 基于gmapping的激光slam导航
  17. 用ZeroTier搭建属于自己的虚拟局域网(VLAN)
  18. 3600000毫秒等于多少小时,一小时等于多少毫秒
  19. (C语言)图书管理系统(程序设计)
  20. 阿里云物联网平台测试知识点梳理

热门文章

  1. 翟山鹰“生态宇宙”重磅首发 缔造超级共赢生态
  2. 2020.4.08 C组模拟赛题解
  3. java--快速输出sql语句
  4. 一种更优雅的蓝牙配对技术 - Cross-transport key derivation (CTKD)
  5. 使用微带线设计一个低通滤波器
  6. 云端体验鸿蒙,AI加持的另类彩电之华为智慧屏带你体验鸿蒙
  7. python excel 饼图 简书_Python实现绘画多个饼图
  8. 跟着示例学Ubuntu UFW防火墙设置
  9. 如今,我们为什么很难看到高质量的文章?
  10. 《Effective C++》读书笔记 条款40:明智而审慎地使用多重继承