1.接口说明如下:
RS-PD11
CS-PD7
RST-PE1
------------------------------------------------------------------------------------
2.使用模拟IO口的方式可以点亮,因为端口已经固定,非常笨的方式写数据写指令,如下:
//TFT写数据
//FSMC
void LcdMenu_write_data(u8 data)
{
TFT_CS_CLR;
TFT_RS_CLR;
TFT_RD_SET;
D0=data;
D1=data>>1;
D2=data>>2;
D3=data>>3;
D4=data>>4;
D5=data>>5;
D6=data>>6;
D7=data>>7;
TFT_WR_CLR;
TFT_WR_SET;
TFT_CS_SET;
}
//TFT写指令
//FSMC
void LcdMenu_write_cmd(u8 comm)
{
TFT_CS_CLR;
TFT_RS_SET;
TFT_RD_SET;
D0=comm;
D1=comm>>1;
D2=comm>>2;
D3=comm>>3;
D4=comm>>4;
D5=comm>>5;
D6=comm>>6;
D7=comm>>7;
TFT_WR_CLR;
TFT_WR_SET;
TFT_CS_SET;
}
------------------------------------------------------------------------------------
3.FSMC设定如下,无显示
void TestLcd_Port_Init(void)
{
RCC->APB2ENR|=1<<5; //使能PORTD时钟
RCC->APB2ENR|=1<<6; //使能PORTE时钟
GPIOE->CRL&=0XFFF0FF0F; //PE1 推挽输出RST复位脚
GPIOE->CRL|=0X00000030; //PE1
GPIOE->ODR|=1<<1; //PE1 输出高
//PORTD复用推挽输出
GPIOD->CRH&=0X00FF0000;
GPIOD->CRH|=0XBB00BBBB;
GPIOD->CRL&=0X0F00FF00;
GPIOD->CRL|=0XB0BB00BB;
GPIOE->CRH=0XBBBBBBBB;
GPIOE->CRL&=0X0FFFFF0F;
GPIOE->CRL|=0XB0000030;
//FSMC
RCC->AHBENR|=1<<8; //使能FSMC时钟
RCC->APB2ENR|=1<<0; //使能AFIO时钟
FSMC->BCR1 = 0X00001050;//sram 16BIT 模式B 位4,5->01:16位(default) 位6->1:允许对NOR闪存存储器的访问操作。 位12->1:允许FSMC对存储器的写操作;这是复位后的默认状态。
FSMC->BTR1 = 0X00000501; //位3:0->地址建立时间 0001->2个HCLK时钟周期 ; 位7:4->地址保持时间 0101->6个HCLK时钟周期
FSMC->BCR1 |= 0X00000001; //位0->存储器块使能位 1:启用对应的存储器块。
FSMC ->BWTR1=0X0FFFFFFF; //这个寄存器包含了每个存储器块的控制信息,可以用于SRAM、ROM和NOR闪存存储器。如果FSMC_BCRx寄存器中设置了EXTMOD位,则这个寄存器对应写操作。
}
//TFT写数据
//FSMC
void LcdMenu_write_data(u16 data)
{
LCD->LCD_RAM = data;//写入数据
}
//TFT写指令
//FSMC
void LcdMenu_write_cmd(u16 comm)
{
LCD->LCD_REG = comm;//写入要写的寄存器序号
}
//采用FSMC模式驱动TFT
//LCD地址结构体
typedef struct
{
u16 LCD_REG;
u16 LCD_RAM;
} LCD_TypeDef;
//使用NOR/SRAM的 BANK 4,地址位HADDR[27,26]=11 A10作为数据命令区分线 ,
//注意设置时STM32内部会右移一位对其! 111110=0X3E
#define LCD_BASE ((u32)(0x60000000|0x0001FFFE)) // A16
#define LCD ((LCD_TypeDef *) LCD_BASE)
typedef struct
{
volatile unsigned int BCR1;
volatile unsigned int BTR1;
volatile unsigned int BCR2;
volatile unsigned int BTR2;
volatile unsigned int BCR3;
volatile unsigned int BTR3;
volatile unsigned int BCR4;
volatile unsigned int BTR4;
volatile unsigned int RESERVED0[17];
volatile unsigned int PCR2;
volatile unsigned int SR2;
volatile unsigned int PMEM2;
volatile unsigned int PATT2;
volatile unsigned int RESERVED1[5];
volatile unsigned int PCR3;
volatile unsigned int SR3;
volatile unsigned int PMEM3;
volatile unsigned int PATT3;
volatile unsigned int RESERVED2[5];
volatile unsigned int PCR4;
volatile unsigned int SR4;
volatile unsigned int PMEM4;
volatile unsigned int PATT4;
volatile unsigned int PIO4;
volatile unsigned int RESERVED3[21];
volatile unsigned int BWTR1;
volatile unsigned int BWTR2;
volatile unsigned int BWTR3;
volatile unsigned int BWTR4;
} FSMC_TypeDef;
#define FSMC_BASE ((u32)0xA0000000)
#define FSMC ((FSMC_TypeDef *) FSMC_BASE)
附上两种工程,大家帮忙看下是什么原因?谢谢!
|