为什么STM32的LCD和SRAM共用了FSMC,他们还能不影响的正常工作

         之前使用STM32的FSMC时,还没有注意到LCD和SRAM都共用了STM32的FSMC,那为什么他们还能同时不影响的运行呢?

         今天看到两个网址才有些明白了。

参考网址:1.SRAM的问题  2.FSMC同时驱动LCD与SRAM

 

看原子开发板的原理图:

注意调用FSMC的两个NE位。

这两个NE位是不同的。一个调用的是NE3,一个调用的是NE4。

 

结合原子论坛的另一个理解什么是FSMC的回答:什么是FSMC

 

最早CPU要访问外部RAM需要三条总线:地址总线、数据总线(以16条地址线8位存储器为例)和控制总线
地址总线:A0到A15共计16根地址线
数据总线:D0到D7共计8根数据线
控制总线:至少包括读写控制等控制线
CPU要访问外部RAM就得靠这些线来进行控制,
首先在这16根地址线上呈现地址值,指示要访问的目标地址,使得外部RAM可以定位到存储单元;
接着,要让控制总线上呈现是读还是要写,好让外部RAM做好准备;
最后,如果是读,则外部RAM就把指定地址存储器的值8位呈现在D0到D7上,由CPU取走。
如果是写,则CPU自己把8位值输出呈现在D0到D7上,由外部RAM接收后改写存储器的值。
这整个过程都是由硬件来实现的,完全没有任何一句用户代码来参与的,是CPU设计之初就定义实现好的,这个过程的时间关系就叫做时序。一定要记住一点,总线是硬件实现的,有严格的规定好的时序。
可以看到,这种对引脚要求是比较多的,16条地址线加8条数据线再加控制线必须有25根线以上,所以8051为了省线,8条数据线和地址线的低8位进行了时分复用(称为AD0到AD7),这样就可以省掉8根线,但代价是必须由外部增加锁存器来锁存地址的低8位(现在的外部RAM可以理解为将锁存器做到了芯片中)。但过程仍是上述描述的内容。即使这样,仍需要引脚近20根,如果存储量大,地址线更多,这些线就是STM32的FSMC,FSMC即灵活的静态存储器控制器,就是用来驱动外部总线,做上面所描述的工作的。为什么说是灵活的,我想主要是因为它可以通过事先对一些时间等参数进行设置调整,可以适应不同厂家参数有差异的SRAM或者像LCD、OLED等类似外设。但这些参数设定一次之后,整个控制时序关系就固定了,总线在具体工作的时候就不再需要用户来操心了,这就是硬件实现的优点,速度快且不占用CPU的计算资源。
至于IO,我想就不用解释了,就是CPU的输入输出端口,可以由CPU控制读写的一个个外部引脚,既然可以控制,就有人仿造总线的时序,用多个IO来通过软件控制的方式来模拟外部总线,比如8051没有SPI接口,就可以用至少三个IO口来分别模拟SCLK时钟,MOSI和MISO数据线。事实上,你也可以用二十几个IO来模拟上面所说的三条总线,但每一次的读写你都得按照时间顺序来控制这二十几个IO端口,你可以把它编好后写成函数,但仍然是占用CPU大量资源的,这就是软件实现的弊端,速度慢且占用CPU的计算资源。
STM32向外提供了灵活的总线访问接口即FSMC,无须你用IO来模拟,就如同8051的地址数据总线一样以硬件的方式来自动工作。不仅如此,如果你的系统用不到FSMC接口,STM32还可以把预备FSMC使用的端口让出来,使它可以当成普通IO一样来使用,从而节省宝贵的外部引脚空间。

 

由上面这段话可以知道,FSMC可以进行时分复用。所以能够共享FSMC的接口。

 

看原子的原理图可以知道,STM32的FSMC最多可以有4个器件一起共用。

因为他有4个片选。

猜你喜欢

转载自blog.csdn.net/qq_38376586/article/details/84674228