
笔者在学习51单片机的时候就玩过彩屏,但是一直都是使用IO模拟的方式驱动的。之后在学习STM32时看见正点原子的战舰开发板的TFT是用FSMC驱动,刷屏速度有了很大的提升,我也模仿着用STM32驱动ILI9481,一直不成功,当时有一点我一直搞不懂,就是为什么在TFT->TFT_REG写就是命令,而在TFT->TFT_RAM写就是数据,我查找了很多资料才发现原因:首先TFT和OLED一样是有一个显示ram区的,只是比后者的大很。而FSMC是通过驱动SRAM的方法来驱动LCD的。(SRAM有地址线,TFT没有地址线)这两者有什么不同呢?让我们往下看:% r4 ~& s$ U" W7 G$ t 首先SRAM是有地址线的,在使用过程中FSMC_A[0:25]会用到,但LCD只是仿SRAM的。它没有地址线。 对于1M的SRAM,内部寻址需要20跟地址线,2^20=1M,当你写内部一个地址时,数据就从数据线传入,读的时候就从数据线传出。(通过数据线传输数据、地址线确定读写的地址) d8 r R" X, i0 o: w5 S3 D$ R & X7 n2 X4 B0 p c- }5 i 而TFT实际上是公用数据线来传送地址和数据的。在看TFT硬件接口时我们可以看到,TFT仅仅有一根接了地址线A24,例程用这根线接RS的,现在不论你写任何地址,都会从数据线发送数据到LCD。但这个数据可能是命令,也可能是真正的数据。这是由RS来控制的,即A24控制的。若A24为0,则输入的是命令,若A24为1,则输入的是数据。我们是用FSMC输入地址来控制输入命令还是数据的,而输入的真正地址,是利用输入的命令决定的。' [7 n* S1 e7 `1 _5 W6 q; B 下面我们介绍0x6000 0000和0x1fffffe怎么来的:# l( Y! ]1 h3 M, M( d& U 0x6000 0000是FSMC bank1 块1的地址起点,0x1fffffe由如下方法得到:如果我们要输入命令,我们得保证A24为0.这样我们的地址线用二进制表示可以为 **** **0* **** **** **** **** 而输入数据时地址线的输入用二进制表示: **** **1* **** **** **** **** 我们可以看到实际上我们可以使用很多地址来代表输入的是命令还是数据,例程利用0x1fffffe和0x2000000的原因很简单: <span style="font-size: large;"><span style="background-color: rgb(204, 255, 204);"><span style="color: rgb(255, 0, 0);"><span style="font-family: 黑体;"><span lang="EN-US">0x1fffffe = 0001 1111 1111 1110b = ((2^24) |
ILI9481_FSMC V0.0.rar
下载166.97 KB, 下载次数: 473
RE:【MCU实战经验】STM32F103ZET6通过FSMC控制ILI9481
回复:【MCU实战经验】STM32F103ZET6通过FSMC控制ILI9481
回复:【MCU实战经验】STM32F103ZET6通过FSMC控制ILI9481
回复:【MCU实战经验】STM32F103ZET6通过FSMC控制ILI9481
RE:【MCU实战经验】STM32F103ZET6通过FSMC控制ILI9481
RE:【MCU实战经验】STM32F103ZET6通过FSMC控制ILI9481
RE:【MCU实战经验】STM32F103ZET6通过FSMC控制ILI9481
RE:【MCU实战经验】STM32F103ZET6通过FSMC控制ILI9481
RE:【MCU实战经验】STM32F103ZET6通过FSMC控制ILI9481
RE:【MCU实战经验】STM32F103ZET6通过FSMC控制ILI9481