带TFT LCD的STM32F4 FSMC

时间:2016-04-20 15:18:15

标签: lcd stm32f4discovery stm32f4

我试图了解STM32f4-discovery上的灵活静态内存控制器(FSMC)。

我做了很多研究,但我无法理解它是如何工作的。我是一名完全自学成才的程序员,目前正在攻读化学学位,所以对我来说很容易。

我找到了这些网站,我一直用来解决这个问题:

https://electronics.stackexchange.com/questions/165200/stm32f407-fsmc-interface-with-tft-lcd

http://prog3.com/sbdm/blog/u013030441/article/details/48159101

http://www2.st.com/content/ccc/resource/technical/document/application_note/85/ad/ef/0f/a3/a6/49/9a/CD00201397.pdf/files/CD00201397.pdf/jcr:content/translations/en.CD00201397.pdf

我还找到了ST自己的示例代码库。

好的,现在是误会:

当我查看两个TFT驱动程序的上述代码时,我发现可以使用结构或定义来访问LCD,例如

#define LCD_REG      (*((volatile unsigned short *) 0x60000000)) 
#define LCD_RAM      (*((volatile unsigned short *) 0x60020000)) 
LCD_RAM = data;
LCD_REG = command;

我的问题是为什么他们必须访问FSMC SRAM库的两个区域而不是一个区域。基本上为什么我只能通过写入LCD_REG(存储区的开头)将数据发送到LCD?

我缺少一些关于FSMC的东西。我已经多次阅读了数据表,我知道银行从0x6000 0000开始,但我无法理解为什么他们会在0x6002 0000的另一部分访问银行。

非常感谢任何理解方面的帮助。如果您知道我可以用来学习FSMC的书籍或网站,我将非常感激。

感谢每个人的时间!

1 个答案:

答案 0 :(得分:2)

请查看您已连接的应用说明中的图7。它们连接了16条数据线,但只有一条地址线连接到RS引脚。然后,LCD控制器成为具有两个寄存器的存储器映射外设。如果地址中的特定位为0,则命令寄存器被寻址,如果它是1,则为数据寄存器。其余的地址线没有连接,所以它们的状态是无关紧要的,例如,访问0x60FFFFFF处的数据寄存器。请注意,所有三个示例都使用不同的地址线,因此数据寄存器的地址不同。

要使用LCD,您将命令代码写入命令寄存器,可选后跟数据寄存器中的一些参数,然后执行下一个命令,依此类推。有命令设置显示区域,颜色映射,亮度,一些特殊效果,如滚动等。每个命令采用固定数量的参数,除了有一个称为写RAM,其中参数是实际的像素数据。像素数据按顺序存储在显示存储器中,您可以使用Write RAM命令设置任意数量的数据,您也可以永远保持此模式,并一个接一个地发送显示更新。