本帖最后由 数码小叶 于 2022-8-30 22:33 编辑
STM32H750B-DK探索套件板载了一块4.3寸的电容触摸屏,RGB接口,刚好可以利用H7自带的LTDC接口来驱动。LTDC全称是LCD-TFT display controller,利用LTDC接口,STM32 MCU可以直接驱动高分辨率显示面板,无需任何CPU干预。另外,LTDC可以自动从帧缓冲器(可以是内部存储器,如内部闪存、内部SRAM,或外部存储器,如FMC_SDRAM或Quad-SPI)读取图形数据并将其驱动到显示器。
H7的LTDC接口特性如下:
其中支持色彩查找表,可以大大节约所需的缓冲空间,比如100x100的200色图片,ARGB888需要100x100x32 bits = 40000 bytes,而要是使用L8_ARGB8888的话只需要00x100x8 bits + 200x32 bits = 10800bytes。
之所以可以用LTDC接口来驱动,是因为STM32H750B-DK探索套件板载的屏幕不是常见的FMC或SPI接口屏幕,而是RGB接口屏幕,当然,FMC接口驱动屏幕也是很有优势的。
STM32H750B-DK探索套件采用的是RK043FN48H-CT672B液晶模组,首先查看原理图连接情况
如果熟悉RGB屏幕就可以直接开始驱动了,不熟悉,可以看下手册,当然,实际驱动时,还是离不开手册上的参数
打开cubeMX,选择好芯片型号
再依此配置工程选项、时钟、调试接口、LTDC接口、NVIC中断
STM32H7在时钟方面和其他系统不一样,不能直接跑到最高频率
不像其他系列,直接设置好主频就就可以了,需要先设置好RCC
需要参考H7的手册来配置
配置完成后,H7就可以跑到高主频了。
然后就是配置LTDC,为了使用内部RAM来直接驱动屏幕,选择RGB565格式以节约RAM资源,这样,两个缓冲层就可以存的下了。
层参数比较简单,先只用一层,分辨率480x272
LDTC的参数,完全来自于屏幕模组的数据手册
关于LTDC的IO口,对比原理图可以发现,并不是全部用的默认值,需要手动修改,这应该是为了兼顾整个板卡的外设资源
这里顺便打开LTDC的中断,这样一会可以利用中断,来实现屏幕颜色更新
顺带着打开了用户按键的中断,再顺带着调整了一下优先级,一切配置ok,生成工程。
因为LTDC几乎不需要CPU的干预,因此留下的工作量也很少,定义个一个数组作为一层的完整缓冲区
uint16_t FrameBuffer[480*272];
然后,就是在程序运行的时候,更新这个数组,对于RGB565,可以这样赋值
colour = ((Red>>3)<<11) | ((Green>>2)<<5) | (Blue>>3);
只是为了点亮屏幕,因此,可以设置整个屏幕是同一个颜色,即同一个数值。在网上找一个RGB在线转换工具,完成颜色转换。
这样就完成了全部工作。关于LTDC的数据来源,实际就是上面定义的缓冲数组,这一步实际在配置LTDC的时候已经完成了。编译,烧录到H7中
屏幕顺利点亮了,可以看到,整个过程中,完全不占用CPU的资源,cpu只是给缓冲区数组赋了一个值
[media=x,500,375][/media]
最后看一下,点亮屏幕,在不做任何优化的情况下,需要耗费的资源
这其中,缓冲区占用的资源最大,需要261kb,当然可以优化,这一篇的目的只是点亮屏幕,所以目的已经达到了
|