请问什么是fsmc?

来源:百度知道 编辑:UC知道 时间:2024/06/22 00:28:36

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=(