历史上的今天
今天是:2025年02月13日(星期四)
2020年02月13日 | STM32之FSMC驱动LCD屏应用
2020-02-13 来源:elecfans
首先,你得稍微了解一下FSMC的基本原理,就是说它是怎么用的,怎么配置,为什么能这么用。这个东西可以看看STM32F4的参考手册。这里不具体说了。
FSMC其实就是把芯片内部的数据总线和地址总线引出来了,其实51单片机也是有这个总线外接的。没有说把SRAM读到内部内存再读到CPU,SRAM就是内存,直接读到CPU的寄存器,通过内部的AHB总线传输的。
我使用的是野火开发板的屏,因为想用开发板提供的程序直接移植。(小白就只能干这种事)因为买的最小系统板是100脚封装的,所以在使用上有点小问题了。我在网上查了好多关于怎么在100引脚的板子上用FSMC上驱动LCD,没有找到合适的答案,既然自己运气好点,调出来了,那么就分享一下。即使不能帮到看到的人,起码能给遇到和我相同问题的人一点安慰!慢慢调,能调出来的!
FSMC的数据线D0-D15,100封装的也有,直接连上就好。(参考数据手册IO口的定义)电源地什么的也当然也是。背光那个引脚是可以自己定义的,这个看个人喜好了。在LCD初始化的最后把背光开了,我的是低电平有效。复位信号和背光一样。CS信号在FSMC定义是PG12,显然没有,但是CS即片选信号,既然我用的就是这一块屏,没必要控制选哪一个,直接使之永远被选就好。当然自己用个引脚去控制理论上也可以。(我没试过)最关键的是LCD-DC信号,使用方法是接在FSMC的地址线上,100封装的也有几根地址线,根据选定的地址线计算好RAM地址。
STM32的FSMC真是一个万能的总线控制器,不仅可以控制SRAM,NOR FLASH,NAND FLASH,PC Card,还能控制LCD,TFT.
一般越是复杂的东西,理解起来就很困难,但是使用上却很方便,如USB.
不过FSMC也有很诡异的地方。如

为什么呢?那时我还以为软件或硬件还是芯片有BUG,
我就是从上面的不解中开始研究FSMC的…。。
FSMC翻译过来就是灵活的静态存储器控制器,是用来驱动外部总线的。关于外部总线,你可以想象一下51的外部总线,STM32的FSMC实际上跟51的外部总线是一样的,只不过性能更好,速度更快。 至于总线的优势,可以举个51外部总线的例子,51单片机驱动1864或者1602液晶,如果用IO口模拟液晶的时序,需要用指令分别控制RS,WR,EN控制线还有数据线;但是如果用的是外部总线,从汇编指令上来讲,只需要一条MOVX指令就解决问题了。二者的速度一目了然!
在一些TFT液晶的操作用经常用得到,并且非常的好用!(以一个TFT为例)TFT的数据接口为:D0-D15或者D0-D8.
TFT的控制线有:复位信号RST,片选CS,输出使能RD(读信号),写信号WE以及RS信号。
于STM32连线为: RST-》GPIO, CS-》NEx, RD-》NOE, WE-》RW, RS-》A0(或者其他任何一条地址线)
关键的一点就在于这个RS信号(我只说关键的这一点):
一般TFT的地址线只有1个RS. 以控制芯片的TFT为例.RS=0的时候一般是写命令,RS=1的时候是写数据,把TFT作为只有2个地址的存储器对待。
RS接到哪一个地址线都是可以的。假如RS接到A0,而片选为NE4,总线宽度8位。
那么可以定义
#define Bank1_SRAM4_ADDR ((u32)0x6C000000) #define LCD_DATA_ADDR (Bank1_SRAM4_ADDR + 1) #define LCD_CMD_ADDR (Bank1_SRAM4_ADDR + 0) 那么写命令数据就是直接往LCD_CMD_ADDR写数据:(假设cmd,data为16位,而我的TFT数据接口是8位) LCD_WRITE_CMD(unsigned short cmd) //写命令到TFT,16位要写2次
{ *(vu8*)LCD_CMD_ADDR=(cmd》》8);
*(vu8*)LCD_CMD_ADDR=(cmd);
}
写数据就是直接往LCD_DATA_ADDR写数据:
LCD_WRITE_DATA(unsigned short Data) //写数据到TFT
{ *(vu8*)LCD_DATA_ADDR=(Data》》8);
*(vu8*)LCD_DATA_ADDR=(Data); }
至于RD,WE,RS,CS信号都已经是FSMC控制器自动产生的,不用理会,不过当然是FSMC及GPIO初始化要正确。而RST信号还是需要通过操作GPIO来完成的。
这是最基本的2个操作。而那些什么设置X,Y,设置窗口,设置亮度,设置。。。。都是由这2个操作组合完成的。
72M HZ,320*240刷单色屏速度在 32fps左右.
史海拾趣
|
IAB认为,就目前的情况看,简单网络管理协议SNMP变得非常流行,它已经变成了对基于IP网络的管理数据进行报告的工业标准。在这里,我们重点介绍SNMP在数据网络监控中的两个应用:实时监测网络时延、实时绘制ATM/FR电路流量和电路告警。 一、SNMP网 ...… 查看全部问答> |
|
及时的自我总结,从技术上讲,每作完一个项目/电路设计,或者项目时间比较长,就在一段工作时间之后,好好小结一下最近的工作成绩,我觉得这是很有必要的。根据我个人的体会,可以参照下面的几点去总结。 另外我还想说,项目的完成,是公司的获得, ...… 查看全部问答> |
|
请教下关于 WINCE的电源TIMEOUT问题。(重启后不关背光设置无效) 请问为什么我在电源管理那设置了电池和AC 为“从不”在设置完后确实不会关背光,但是一但重启机器后还是一分钟后自动关闭背光,在电源管理上可以看见那两项确实是显示“从不”。我用RegQueryValueEx 对ACUserIdle以及BattUserIdle进行读取,得到的 ...… 查看全部问答> |
|
网盘免费下载:www.hishop.ys168.com 注册机试用版登(DEMO用户)陆密码:fe01ce2a7fbac8fafaed7c982a04e229 试用版,只允许试用一天,一天过后,自动过期! 正式版没有任何限制!支持Hishop5.2.1证书破解,附DLL文件破解!购买请联系:QQ:5243121 ...… 查看全部问答> |
|
使用VC开发时,常常需要在窗口上画一些图表。有时要把一些文字竖着写,有时需要倾斜一定的角度。对于老手们,这当然算不上什么问题,而新手却常常找不到方法。 新手们往往会在CDC的成员函数里四处寻 ...… 查看全部问答> |
|
1.例程序中的U盘程序无法正常工作,在Debugger连接后就出现了一个移动硬盘(疑为STM32的flash)。但运行MassstorageSimpleBuffer程序后在设备管理器里有一个出错的USB Device。2.运行LCD demo正常,理论上说在进入debug后IAR已经将 ...… 查看全部问答> |
|
电路保护在设计里无处不在 很少设计电路,就算在应用中,也很少考虑电路保护,我觉着现在芯片内部基本做的都很全面了,所以外部保护也不需要考虑太多。 我听到最多的保护也就是TVS和熔丝了,这两个用的还算比较多,对于我来说。 以前只听过熔丝 ...… 查看全部问答> |




