使用ST的HAL库进行开发,RGB屏幕是480*272的4.3寸LCD,由于驱动RGB屏幕需要较多的内存,

所以使用了外部SDRAM,内存是32M字节,关于SDRAM的驱动本文不进行讨论。

RGB屏幕常用的像素格式有:ARGB8888、RGB888、RGB565、ARGB1555、ARGB4444等格式,本文讨论RGB565格式的使用。

RGBLCD的信号线如下表:

上表共有24根颜色信号线,RGB565格式只用了其中的16根颜色信号线,分别是:R[3:7],G[2:7],B[3:7],共16位,

这样在表示颜色的时候就可以用16位长度的数据进行表示了,增加了数据的传输速度。

RGBLCD接口的原理图如下:

除了16位数据线之外,还有用到如下几个信号线:

LCD_BL:背光;

LCD_DE:数据使能信号;

LCD_VSYNC:垂直同步信号;

LCD_HSYNC:水平同步信号;

LCD_CLK:时钟信号;

STM32F429有自带的RGBLCD外设接口LTDC,可以用来直接驱动RGBLCD,另外配上专用于图像处理的DMA2D,

使得RGBLCD用起来更加方便快速。

下面开始介绍使用到的单片机引脚对应:

PI9     ------> LTDC_VSYNC
    PI10     ------> LTDC_HSYNC
    PF10     ------> LTDC_DE
    PG7     ------> LTDC_CLK
    PH9     ------> LTDC_R3
    PH10     ------> LTDC_R4
    PH11     ------> LTDC_R5
    PH12     ------> LTDC_R6
    PG6     ------> LTDC_R7
    PH13     ------> LTDC_G2
    PH14     ------> LTDC_G3
    PH15     ------> LTDC_G4
    PI0     ------> LTDC_G5
    PI1     ------> LTDC_G6
    PI2     ------> LTDC_G7
    PG11  ------> LTDC_B3
    PI4     ------> LTDC_B4
    PI5     ------> LTDC_B5
    PI6     ------> LTDC_B6
    PI7     ------> LTDC_B7

通过配置STM32CubeMx直接生成的LTDC部分初始化代码如下:

void MX_LTDC_Init(void)
{LTDC_LayerCfgTypeDef pLayerCfg;hltdc.Instance = LTDC;hltdc.Init.HSPolarity = LTDC_HSPOLARITY_AL;         //水平同步极性:低有效hltdc.Init.VSPolarity = LTDC_VSPOLARITY_AL;         //垂直同步极性:低有效hltdc.Init.DEPolarity = LTDC_DEPOLARITY_AL;         //数据使能极性:低有效hltdc.Init.PCPolarity = LTDC_PCPOLARITY_IPC;        //像素时钟极性:输入像素时钟hltdc.Init.HorizontalSync = 0;                       //水平同步宽度,1个时钟信号hltdc.Init.VerticalSync = 0;                     //垂直同步宽度,1行像素对应的时钟hltdc.Init.AccumulatedHBP = 40;                       //水平后沿宽度:40hltdc.Init.AccumulatedVBP = 8;                       //垂直后沿宽度:8hltdc.Init.AccumulatedActiveW = 520;              //显示有效宽度:520-40=480hltdc.Init.AccumulatedActiveH = 280;                //显示有效高度:280-8=272hltdc.Init.TotalWidth = 525;                     //总宽度:525(包含了5个水平前沿宽度)hltdc.Init.TotalHeigh = 288;                      //总高度:288(包含了8个垂直前沿宽度)hltdc.Init.Backcolor.Blue = 0;                        //屏幕背景层蓝色部分hltdc.Init.Backcolor.Green = 0;                     //屏幕背景层绿色部分hltdc.Init.Backcolor.Red = 0;                       //屏幕背景层红色部分if (HAL_LTDC_Init(&hltdc) != HAL_OK){_Error_Handler(__FILE__, __LINE__);}pLayerCfg.WindowX0 = 0;                                       //窗口起点x坐标pLayerCfg.WindowX1 = 480;                                 //窗口终点x坐标pLayerCfg.WindowY0 = 0;                                       //窗口起点y坐标pLayerCfg.WindowY1 = 272;                                 //窗口终点y坐标pLayerCfg.PixelFormat = LTDC_PIXEL_FORMAT_RGB565;         //像素格式RGB565格式pLayerCfg.Alpha = 255;                                       //恒定alpha值pLayerCfg.Alpha0 = 0;                                        //默认alpha值pLayerCfg.BlendingFactor1 = LTDC_BLENDING_FACTOR1_PAxCA; //混合系数1:像素alpha*恒定alphapLayerCfg.BlendingFactor2 = LTDC_BLENDING_FACTOR2_PAxCA; //混合洗漱2:像素alpha*恒定alphapLayerCfg.FBStartAdress = 0xC0000000;                        //颜色数据所在的内存起始地址pLayerCfg.ImageWidth = 480;                                 //图像宽度pLayerCfg.ImageHeight = 272;                             //图像高度pLayerCfg.Backcolor.Blue = 0;                                //屏幕背景层蓝色部分pLayerCfg.Backcolor.Green = 0;                              //屏幕背景层绿色部分pLayerCfg.Backcolor.Red = 0;                                //屏幕背景层红色部分if (HAL_LTDC_ConfigLayer(&hltdc, &pLayerCfg, 0) != HAL_OK){_Error_Handler(__FILE__, __LINE__);}
}

函数MX_LTDC_Init()将外设LTDC进行了初始化配置,在配置好ltdc之后,我们只需要改变对应的内存的数据,

ltdc就会自动帮我们改变LCD上对应像素点的颜色。

下面通过初始化LCD的函数,将LCD屏幕清屏为全白:

/*** @brief : LCD清屏,使用DMA2D将颜色数据传输到内存中* @par Full description : 填充范围是坐标(sx,sy),(ex,ey)形成的矩形区域,*                          区域大小像素点个数是:(ex-sx+1)*(ey-sy+1)* @param : *        sx -- x轴起点坐标*       sy -- y轴起点坐标*       ex -- x轴终点坐标*       ey -- y轴终点坐标*       Colour -- 填充的颜色* @retval : 无*/
void LcdClear(uint16_t sx, uint16_t sy, uint16_t ex, uint16_t ey, uint32_t Colour)
{__HAL_RCC_DMA2D_CLK_ENABLE();                               //使能DMA2D时钟DMA2D->CR &= ~(DMA2D_CR_START);                             //先停止DMA2DDMA2D->CR = DMA2D_R2M;                                      //寄存器到存储器模式DMA2D->OPFCCR = LTDC_PIXEL_FORMAT_RGB565;                   //设置颜色格式DMA2D->OOR = 0;                                             //设置行偏移DMA2D->OMAR = uhLtdcFrameBuf;                               //输出存储器地址DMA2D->NLR = (ey - sy + 1) | ((ex - sx + 1) << 16);         //设定行数寄存器DMA2D->OCOLR = Colour;                                      //设定输出颜色寄存器DMA2D->CR |= DMA2D_CR_START;                                //启动DMA2Dwhile((DMA2D->ISR & DMA2D_FLAG_TC) == 0);                   //等待传输完成DMA2D->IFCR |= DMA2D_FLAG_TC;                               //清除传输完成标志
}void LcdInit(void)
{LCD_BIAS_LIGHT_ENALBE;                                      //使能LCD背光LcdClear(0, 0, 479, 271, 0xFFFF);                           //清屏全白,0xFFFF是全白
}

使用DMA2D将大量的数据传输到指定的内存之中,0xFFFF对应的是白色,对应的内存地址是uhLtdcFrameBuf数组的首地址。

至此,我们就完成了将RGBLCD清屏成全白的测试。

基于STM32F429的RGB屏使用相关推荐

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

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

  2. 手机屏和大屏LCD显示面板接口(和处理器连接的接口类似12864等单片机处理器和屏接口的8086,SPI等并口串口屏以及RGB屏接口)LVDS接口常见于液晶电视中。eDP,LVDS,MIPI,HDMI

    mipi是手机液晶屏最常见的接口了 现在普遍的16:9或者16:10的宽屏,LCD接口大部分都是LVDS,也有RSDS接口,不过比较少.接口一般都是30PIN,不过由于尺寸不同,分辨率的不同,所用到的 ...

  3. 全志D1/D1s芯片:芒果派麻雀点RGB屏填坑

    前言 最近全志推出了D1处理器,搭载平头哥玄铁906 RISC-V的应用处理器.于是准备入手玩一下,买了芒果派做了基于D1s的麻雀板,D1s是D1内封64M DDR的版本,去掉了hdmi输出,号称点屏 ...

  4. ML之SSIM:基于输入图片RGB的三维向量利用SSIM(结构相似性度量)算法进行判别

    ML之SSIM:基于输入图片RGB的三维向量利用SSIM(结构相似性度量)算法进行判别 目录 输出结果 代码实现 相关文章 ML之相似度计算:图像数据.字符串数据等计算相似度常用的十种方法简介.代码实 ...

  5. ML之Cosin:基于输入图片RGB均值化转为单向vector利用Cosin(余弦相似度)算法进行判别

    ML之Cosin:基于输入图片RGB均值化转为单向vector利用Cosin(余弦相似度)算法进行判别 目录 输出结果 代码实现 相关文章 ML之相似度计算:图像数据.字符串数据等计算相似度常用的十种 ...

  6. ML之Hog_HammingDistance:基于Hog特征提取“RGB”图像的768个值的单向vector利用汉明距离算法进行判别

    ML之Hog_HammingDistance:基于Hog特征提取"RGB"图像的768个值的单向vector利用汉明距离算法进行判别 目录 输出结果 代码实现 相关文章 ML之相似 ...

  7. 关于RGB屏调试的一些知识(转)

    关于RGB屏调试的一些知识 转载于:https://www.cnblogs.com/LittleTiger/p/10983212.html

  8. Codrops 优秀教程:基于 CSS3 的全屏网页过渡特效

    向大家分享一个来自 Codrops 的基于 CSS3 实现的全屏网页过渡特效.页面初始布局是四个盒子,点击其中一个会扩张到全屏,其它的会淡出隐藏:关闭当前视图的时候又恢复到初始状态. 您可能感兴趣的相 ...

  9. 基于Android的rgb七彩环颜色采集器

    代码地址如下: http://www.demodashi.com/demo/11892.html 一.前言. 在大学期间,看到这个rgb灯,蛮好奇的,这么漂亮的颜色采集,并且可以同步到设备rbg灯颜色 ...

最新文章

  1. C,C++开源项目中的100个Bugs
  2. BZOJ.4160.[NEERC2009]Exclusive Access 2(状压DP Dilworth定理)
  3. ITK:从二进制图像中提取最大的连接组件
  4. win8, VS2013 .NET 4.5在哪找svcutil.exe?
  5. MySQL 无法连接
  6. python二进制创建写模式_30 个Python代码实现的常用功能,精心整理版
  7. Netty的EventLoop
  8. 全民上云时代,如何降低成本?
  9. linux info文件夹,详解Linux系统中查询文档的man和info命令
  10. leetcode题目及答案python_leetcode Python算法题(20)-----多题
  11. 计算机域名DNS设置,电脑的IP地址和DNS域名服务器如何设置
  12. DataTable判断列是否为空!(实用)
  13. c语言开发kafka环境,c++(11)使用librdkafka库实现kafka的消费实例
  14. 16进制颜色与UIColor互转
  15. 分享| 电脑设置双屏或多屏显示2种简单方法,你能学会几种?
  16. 矩阵分析:Kronecker积,Hadamard积
  17. 苹果Mac实用技巧:忘记密码如何恢复?
  18. 【Android面试(1),阿里巴巴安卓面试题答案
  19. Carla+SUMO联合仿真多交叉路口信号灯配时协同优化策略
  20. 【注意力机制集锦】Channel Attention通道注意力网络结构、源码解读系列一

热门文章

  1. 阿里面试:分析为什么B+树更适合作为索引的结构以及索引原理
  2. Python Flask Web教程020: flask模板
  3. Bugku web(1—35)
  4. 什么降风噪最好的蓝牙耳机?2021主动降噪耳机推荐
  5. 计算 TCP/IP Socket 连接上下行额外流量的两个办法
  6. C++:GCC编译:GCC编译C++程序分步流程
  7. MACD抓妖神器 通达信指标公式 副图 源码 无加密 无未来
  8. mysql mma 原理_Android中m、mm、mmm、mma、mmma的区别
  9. SpringBoot:认认真真梳理一遍自动装配原理
  10. freebsd jail nginx php-fpm mysql weberp安装