首要,你得略微了解一下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左右.