前言:

阿波罗的教程在RGB屏幕的实验时并没有给出cubemx的配置,但我的目的就是学会如何使用cubemx,所以根据学习实验去自行配置cubemx。我使用的是7寸屏1024*800分辨率的。

我们将会用到的DMA2D是啥呢,看名字能够看出来是DMA+2D,他就是通过DMA将指定存储地址上的一段空间传输给LTDC,也就是说我们把要画的一层1024*600放在SDRAM的0xc0000000上之后,用DMA2D去传输到屏幕上,这样CPU就能空闲出来去干别的事儿了。

cubemx:

1.使能LTDC接口,并使用RGB565模式。使能DMA2D。

2.配置PB5为推挽输出、上拉。这是RGB屏的背光控制,这个不属于LTDC接口服务范围内。高电平为点亮背光

3.配置时钟为33MHZ,我反正是懒得学分频倍频的计算,cube就是这点特别好,你设置好了想要的时钟再回车,他就给你计算了。

4.修改个别管脚。因为LTDC接口打开后,cube会自动把管脚比如LTDC_R[7:3]、LTDC_G[7:2]、LTDC_B[7:3]、LTDC_DE等配置好,但这是默认的,比如LTDC_G4在PB10,但是阿波罗在硬件设计上要考虑全部功能的实现,所以把LTDC_G4移到了PH15。所以对照原理图得再修改一下。下图是修改后的。

5.根据RGB屏的参数,比如垂直同步有效脉宽、垂直前廊等,不同大小、分辨率的RGB屏都不同。我是参照阿波罗代码配置的

6.层颜色、显存位置、和Alpha。实际上是两层,但实际只用到第一层,所以只配置第一层即可。以后再拓展吧

7.DMA2D配置。原子也说了一般都不用库函数操作DMA2D效率很低,一般都用寄存器配置。所以这里不配置也可以,在代码中会用寄存器方法配置一遍。

至此cubemx就配置完了。接下来就是在代码中初始化RGB、移植画点、画字符串、修改背景色等驱动。因为我是为了自己用,没有买MCU屏,所以把需要用的从原子的代码上扒下来,弃掉部分功能:MCU屏幕初始化部分、获取ID、判断什么屏幕。

cubemx生成的代码会自己初始化LTDC,但是怎么使用还是得自己去写。

代码实现:

//LCD初始化函数
void LTDC_Init(void)
{lcdltdc.pwidth=1024;          //面板宽度,单位:像素lcdltdc.pheight=600;           //面板高度,单位:像素lcdltdc.hsw=20;                    //水平同步宽度lcdltdc.vsw=3;                 //垂直同步宽度lcdltdc.hbp=140;               //水平后廊lcdltdc.vbp=20;                  //垂直后廊lcdltdc.hfp=160;             //水平前廊lcdltdc.vfp=12;                  //垂直前廊lcdltdc.pixsize=2;               //每个像素占2个字节ltdc_framebuf[0] = (uint32_t *)&ltdc_lcd_framebuf;      //把SDRAM的首地址赋给第一层的地址指针,作为RGBLCD的显存LTDC_Display_Dir(1);           //默认竖屏LTDC_Select_Layer(0);             //选择第1层HAL_GPIO_WritePin(LCD_BL_GPIO_Port,LCD_BL_Pin,GPIO_PIN_SET); //点亮背光LTDC_Clear(0XFFFFFFFF);           //清屏}

然后再编写测试用例

void LTDC_Test(void)
{static uint32_t i = 0;switch(i){case 0:LTDC_Clear(WHITE);break;case 1:LTDC_Clear(BLACK);break;case 2:LTDC_Clear(BLUE);break;case 3:LTDC_Clear(RED);break;case 4:LTDC_Clear(MAGENTA);break;case 5:LTDC_Clear(GREEN);break;case 6:LTDC_Clear(CYAN);break; case 7:LTDC_Clear(YELLOW);break;case 8:LTDC_Clear(BRRED);break;case 9:LTDC_Clear(GRAY);break;case 10:LTDC_Clear(LGRAY);break;case 11:LTDC_Clear(BROWN);break;}i++;if(i == 12)i=0; POINT_COLOR=RED;    LTDC_ShowString(10,40,260,32,32,  (uint8_t*)"Apollo STM32F4/F7");   LTDC_ShowString(10,80,240,24,24,    (uint8_t*)"LTDC TEST");LTDC_ShowString(10,110,240,16,16,  (uint8_t*)"ATOM@ALIENTEK");LTDC_ShowString(10,130,240,16,16, (uint8_t*)"1024*800");        //显示LCD ID                           LTDC_ShowString(10,150,240,12,12,  (uint8_t*)"2016/1/6");
}

然后我用摁键的触发调用这个测试函数,

效果下图

总结:

RGB屏幕是LTDC接口实现的,F429和F750都支持RGB888,但是我们实际使用的是RGB565,因为人眼的色域并区分不太出来,所以用RGB565就可以了。

RGB屏幕实现只是开头的一小步,后面还需要实现触摸屏,以及emwin的移植。

还是要自己动手操作,知识才是自己的,信心都是一步一步建立起来的,如果只是“看”懂,心里还是没底。只有自己创建工程,调试底层,出来效果,才算是自己掌握了。

从零实现 RGB屏幕相关推荐

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

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

  2. [ESP][驱动]ST7701S RGB屏幕驱动

    ST7701SForESP ST7701S ESP系列驱动,基于ESP-IDF5.0,ESP32S3编写. 本库只负责SPI的配置,SPI设置屏幕信息两方面.由于RGB库和图形库的配置无法解耦,具体使 ...

  3. 零编程无屏幕,这款电子拼图机器人降低了STEM教育的学习门槛

    转自:https://baijiahao.baidu.com/s?id=1628510022589879378&wfr=spider&for=pc 儿童积木发展到今天,有一种品类已经跟 ...

  4. python实现GUI自动化(控制鼠标)|屏幕快照图像识别基础

    1.GUI自动化 ●GUI自动化就是写程序直接控制键盘和鼠标.这些程序可以控制其他应用,向它们发送虚拟的击键和鼠标点击,就像你自己坐在计算机前与应用交互-样.这种技术被称为"图形用户界面自动 ...

  5. MCU驱动和RGB驱动的液晶屏的区别

    概况来讲,RGB驱动需要的硬件条件高,比如用STM32F429的LTDC+DMA2D模块,外加SDRAM作为显存.而MCU接口,STM32F407系列的控制器就整合了这个模块,包含6800和8080两 ...

  6. 基于STM32F429的RGB屏使用

    使用ST的HAL库进行开发,RGB屏幕是480*272的4.3寸LCD,由于驱动RGB屏幕需要较多的内存, 所以使用了外部SDRAM,内存是32M字节,关于SDRAM的驱动本文不进行讨论. RGB屏幕 ...

  7. 终端改变字体颜色和背景,控制光标,设置屏幕,更改样式与ANSI Esc(\033,\x1B,\e)转义序列用法

    简介 ANSI 转义序列( Esc , \033 , \x1B , \e )是个特殊转义字符,它可以在终端控制光标,改变字体颜色和背景,设置屏幕或者使用私有模式来改变终端样式,使终端样式更美观,功能更 ...

  8. 荣耀X10 Max发布在即 屏幕优势显著

    前一阵就听说了荣耀X10 Max将在7月2日发布的消息,不知不觉中已经只剩不到一周的时间了,作为今年唯一的5G大屏手机,人们关注的无非是它的屏幕,以及各项配置.刚刚荣耀X10 Max又有了更多的爆料信 ...

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

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

最新文章

  1. 繁琐又危险的任务(varchar--nvarchar)
  2. 59. Leetcode 81. 搜索旋转排序数组 II(二分查找-局部有序)
  3. MRI炎症和结构损伤指标对TNF拮抗剂治疗AS患者获持续缓解的预测价值
  4. 广东高中生多少人_“广东人参”五指毛桃根的功效与作用,有多少人真的清楚...
  5. java实现rsa欧几里得算法求d_RSA 加密算法的 java 实现
  6. python概念英文版_python重要概念
  7. php protobuf 二进制,PHP环境中使用ProtoBuf数据格式
  8. spring data jpa封装specification实现简单风格的动态查询
  9. Eclipse调整tomcat内存大小
  10. 深入理解HTTPS及在iOS系统中适配HTTPS类型网络请求(上)
  11. 健康窈窕美女第一课 减肥vs早餐四个关键问题。
  12. html论坛页面怎么做_用php怎么做一个简单的留言页面?
  13. mysql定时备份脚本
  14. 安装教程 | 在谷歌安装印象笔记插件(实用,在谷歌浏览器添加印象笔记插件,整理遇到bug,收藏解决bug的文章)
  15. WSO2 ESB 5.0.0 集群配置
  16. python机械臂写字_SCARA机器人 机械手臂 写字机 DIY 视觉识别
  17. QuartusII软件异常:Error: Top-level design entity is undefined
  18. 非淡泊无以明志,非宁静无以致远
  19. 十、【Vue-Router】两个新生命周期钩子 activated/deactivated
  20. 数位板使用技巧_保护您的眼睛技巧,以帮助防止数位眼疲劳

热门文章

  1. 火绒剑(专业人员使用的系统进程分析工具)
  2. 【车牌识别和动态称重系统】(四)基于stc51HX711的动态称重系统
  3. 评测:最好最有效的PDF在线无损转换免费工具Smallpdf
  4. 单相桥式整流电容滤波及稳态时的波形分析
  5. 大白话理解:BRDF,皮肤渲染
  6. [net][samba]samba用户的查看与删除
  7. vue 实战培训课程-张秋方-专题视频课程
  8. 【metrics】将dropwizard metrics收集到 prometheus
  9. Bosun —— Go 开发的监控和告警系统
  10. UE4常用快捷键汇总