Stm32FSMC及TFTLED屏笔记
截图的图片出自正点原子的参考手册和 络资料,如有侵权,请联系我删除(因为没怎么写过博客,有注明出处,但对版权的具体细节不清楚)
1.FSMC*(Flexiable Static Memory Controler)*
1)FSMC的应用:
- 从上面的框图也可以看出,因为并口信 线FSMC[15:0]是公用的,所以一次只能同时外接一个SRAM类的存储器。
-
值得注意的是在外部SRAM连接的FSMC_A在存储器位数不同时,地址线的对齐方式不同。
因为在内部AHB的地址里(即HADDR[25:0])是以字节为单位的,即一个地址可以写8位数据;
当外部是以半字(16位)为单位时,这时候每当在外部地址写完一次(16位数据)的过程中,内部AHB对应的地址应该是移动两位的(2*8位);所以为了使用方便,这儿有一个很巧妙(也很常用)的方法就是将HADDR[25:0]左移一位与FSMC_A对齐;
-
举例如下:当在外设FSMC_A的第……0001*(地址为bit0 = 1处的地址,前面的0省略)写数据时,HADDR中对应是第……001 _(地址为bit1 = 1处的地址,下划线表示:因左移一位对齐而失效的HADDR [0] )*; 这样在外设写……0001;这移位时,内部HADDR 实际上走了……0010,和0011两个8位数据
-
所以这样的对齐方式,使FSMC_A的一位会对应HADDR的两位:
FSMC_A(16位单位外设地址) HADDR(实际内部的8位单位地址) 000 00 0 和 00 1(下划线表示因左移而失效的HADDR[0]) 001 01 0 和 01 1 010 10 0 和 10 1
-
-
可以看出刚好是左移一位对齐,而且000 位仍有对应 000位地址,即起始地址仍一样。
(2)信 线及8080并口协议:
(5)库函数使用:(见如下代码及注释,参考正点原子)
关于读写时序的结构体参数如下*(即上面结构体的最后两个成员变量)*:
FSMC的使能函数如下:(较简单)
2.TFTLED屏(ILI9341驱动)
1)ILI9341驱动:
(1)接口时序:8080并口:
接口线 | 作用简介 |
---|---|
CS | 片选 |
WR | 写使能 |
RD | 读使能· |
D[15:0] | 16位双向数据线 |
RST | 硬件复位线 |
RS/DCX | 数据1*(写入9341的SRAM)/命令0(写入9341的寄存器)* 控制线 |
在接线上,原子用的方法比较巧妙;
-
将RST复位接在系统的复位上;
-
将RS线接在FSMC的任意一个地址线上(A10上)如下:
-
利用结构体地址自增的特性:
将LCD这个结构体定义做LCD_BASE*(A10)的地址*;***(注意:16位数据传输时,将外设地址右移一对齐位,所以实际是 HADDR[11] 位)***,这样:
LCD_REG == 0x6C0007FE ,A10位为0(7为0111);
LCD_RAM == 0x6C000800,A10位为1(8为1000)这里的A10均指外设的A10即FSMC_A[10].
如此在,对地址LCD_REG = 0xyyyy*(数据)时就是,写入命令(写道9341的寄存器中)(因为此时,RS=0)*;
同理,对地址LCD_RAM = 0xyyyy*(数据)时就是,写入数据(写到9341的SRAM上)(因为此时,RS=1)*。
2)ILI9341的部分命令:
-
0xD3:读ID.
-
0x2A:设置列坐标,(即x轴横坐标)
0x2B:与2A一样,设置的是行坐标(即y轴纵坐标)
注:以下的SC可以理解为 Start Column;EC可以理解为Ending Column.
RGB565格式如下:
3)原子代码使用:
原子帮我们将许多底层的代码都封装好了,但在使用时有一些注意事项:
-
使用时,需先执行LCD_Init();函数进行初始化;
-
**因为LCD_Init()函数里默认将芯片信 printf到串口1输出;所以在执行LCD_Init()初始化函数前,需先执行串口初始化uart_init();或者直接将LCD_Init()内的printf();注释掉,否则程序会卡死在printf中 **
-
将原子的LCD.h中可以调用的函数整理在这儿,方便自己查找:
声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!