2

我正在尝试了解 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:内容/翻译/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 的书籍或网站,我将不胜感激。

谢谢大家的时间!

4

1 回答 1

3

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

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

于 2016-04-21T06:10:35.813 回答