一、简介
相关知识
1)8080并口方式
在微机系统内,如系统部件之间的数据传送大多数使用并行数据传送方式。并行数据每一位都对应独立的传输线路,所以数据传送速度块,但是线路多,一般只用于较短距离传送。因此在嵌入式开发中芯片的外部接口多为串行接口,然而由于显示屏中要求刷新速率高,所以OLED和LCD显示屏中依然会用到8080或8060并行接口进行通信。
2)FSMC 静态存储控制器
能够与同步或异步存储器和 16 位 PC 存储器卡连接,STM32F4 的 FSMC 接口支持包括 SRAM、 NAND FLASH、 NOR FLASH 和 PSRAM 等存储器。
STM32F4 的 FSMC 将外部设备分为 2 类: NOR/PSRAM 设备、NAND/PC 卡设备。他们共用地址数据总线等信号,他们具有不同的 CS 以区分不同的设备。TFT LCD使用FSMC的第四个部分。
二、CUBEMX配置
这里以stm32f407zgt6正点原子探索者开发板为例:
1.配置好RCC、时钟树,这里根据自己需要配置就行了
2.随后配置FSMC
因为LCD使用FSMC的第四模块,这里选择NE4作为片选引脚,存储类型为LCD接口,寄存器挑选为A6,数据为16位。根据自己实际电路来配置,我这里电路引脚和软件默认设置的一样的。
随后配置时序:
这里配置好后,芯片引脚自动进行选择,这里注意观察配置的引脚是否与实际原理图一致。这里不清楚的可以参考资料3。
3.生成代码,添加TFT LCD驱动文件。
我这里驱动文件,直接用的正点原子的开发板资料,进行修改,不想看修改过程可以直接用我修改后的文件,直接添加进去就可以用了。
1)在文件所对应位置新建文件夹USER,将驱动文件放入其中。
2) KEIL中添加这两个文件
3)魔法棒中添加两个文件夹位置以及主程序中添加头文件“LCD.h”
4)lcd.c文件中注释掉串口和延时头文件
5)注释掉这段HAL_SRAM_MspInit函数,因为CUBEMX中为我们配置好了,这里再用会出现重复定义的错误。
6)LCD初始化函数中,注释掉FSMC和SRAM初始化的内容,原因与上面一样。
注意这里不要把背光配置注释掉了,按理这个背光也可以在CUBEMX里面配置好,然后就可以把这里注释掉。
7)注释掉所有的delay_ms和delay_us。这里不注释会出错,因为没有定义延时函数。我不太清楚这里延时的作用,可能是保证每步配置完成吧,但是我这里注释了之后没有影响配置。
8)注释掉串口,没有用,若需要自己配置就行了
4.主程序事例,主程序添加代码
#include "lcd.h"
#include "stdio.h"
……
int main()
{
u8 x=0;
u8 lcd_id[12]; //存放LCD ID字符串
……
LCD_Init(); //初始化LCD FSMC接口
POINT_COLOR=RED; //画笔颜色:红色
sprintf((char*)lcd_id,"LCD ID:%04X",lcddev.id);//将LCD ID打印到lcd_id数组。
while(1)
{
switch(x)
{
case 0:LCD_Clear(WHITE);break;
case 1:LCD_Clear(BLACK);break;
case 2:LCD_Clear(BLUE);break;
case 3:LCD_Clear(RED);break;
case 4:LCD_Clear(MAGENTA);break;
case 5:LCD_Clear(GREEN);break;
case 6:LCD_Clear(CYAN);break;
case 7:LCD_Clear(YELLOW);break;
case 8:LCD_Clear(BRRED);break;
case 9:LCD_Clear(GRAY);break;
case 10:LCD_Clear(LGRAY);break;
case 11:LCD_Clear(BROWN);break;
}
POINT_COLOR=RED;
LCD_ShowString(30,40,210,24,24,"Explorer STM32F4");
LCD_ShowString(30,70,200,16,16,"TFTLCD TEST");
LCD_ShowString(30,90,200,16,16,"ATOM@ALIENTEK");
LCD_ShowString(30,110,200,16,16,lcd_id); //显示LCD ID
LCD_ShowString(30,130,200,12,12,"2017/4/8");
x++;
if(x==12)x=0;
HAL_Delay(700);
}
三、调试
编译下载,0错误0警告
其他
LCD驱动文件代码比较长,放资源包了
参考资料
【1】野火stm32f407霸天虎V2开发板使用cubemx驱动4.3寸LCD屏_stm32cube nt35510-CSDN博客
【2】并行接口、协议和相关芯片介绍(8080、8060)_8080总线-CSDN博客
【3】FSMC连接TFT LCD原理与电路——Kevin带你读《STM32Cube高效开发教程基础篇》_哔哩哔哩_bilibili