初级会员

- 积分
- 175
- 金钱
- 175
- 注册时间
- 2019-7-31
- 在线时间
- 93 小时
|
LCD一直不显示,自己才发现原来连ID都没读取对。下面代码是抄的,自己组合了一下,id还是没读取对
#include"sys.h"
#include"usart.h"
typedef struct {
vu16 LCD_Command;
vu16 LCD_Date;
}LCD_W_R;
#define LCD_BASE ((u32)(0x6C000000 | 0x000007FE))
#define LCD ((LCD_W_R *) LCD_BASE)
int main()
{
unsigned int LCD_ID;
Stm32_Clock_Init(9);
uart_init(72,115200);
RCC->AHBENR|=1<<8; //使能 FSMC 时钟
RCC->APB2ENR|=1<<3; //使能 PORTB 时钟
RCC->APB2ENR|=1<<5; //使能 PORTD 时钟
RCC->APB2ENR|=1<<6; //使能 PORTE 时钟
RCC->APB2ENR|=1<<8; //使能 PORTG 时钟
GPIOB->CRL&=0XFFFFFFF0; //PB0 推挽输出 背光
GPIOB->CRL|=0X00000003;
//PORTD 复用推挽输出
GPIOD->CRH&=0X00FFF000;
GPIOD->CRH|=0XBB000BBB;
GPIOD->CRL&=0XFF00FF00;
GPIOD->CRL|=0X00BB00BB;
//PORTE 复用推挽输出
GPIOE->CRH&=0X00000000;
GPIOE->CRH|=0XBBBBBBBB;
GPIOE->CRL&=0X0FFFFFFF;
GPIOE->CRL|=0XB0000000;
//PORTG12 复用推挽输出
GPIOG->CRH&=0XFFF0FFFF;
GPIOG->CRH|=0X000B0000;
GPIOG->CRL&=0XFFFFFFF0;//PG0->RS
GPIOG->CRL|=0X0000000B;
//寄存器清零
//bank1 有 NE1~4,每一个有一个 BCR+TCR,所以总共八个寄存器。
//这里我们使用 NE4 ,也就对应 BTCR[6],[7]。
FSMC_Bank1->BTCR[6]=0X00000000;
FSMC_Bank1->BTCR[7]=0X00000000;
FSMC_Bank1E->BWTR[6]=0X00000000;
//操作 BCR 寄存器 使用异步模式
FSMC_Bank1->BTCR[6]|=1<<12; //存储器写使能
FSMC_Bank1->BTCR[6]|=1<<14; //读写使用不同的时序
FSMC_Bank1->BTCR[6]|=1<<4; //存储器数据宽度为 16bit
//操作 BTR 寄存器
//读时序控制寄存器
FSMC_Bank1->BTCR[7]|=0<<28; //模式 A
FSMC_Bank1->BTCR[7]|=1<<0;
//地址建立时间(ADDSET)为 2 个 HCLK,1/36M=27ns(实际>200ns)
//因为液晶驱动 IC 的读数据的时候,速度不能太快,尤其对 1289 这个 IC。
FSMC_Bank1->BTCR[7]|=0XF<<8; //数据保存时间为 16 个 HCLK
//写时序控制寄存器
FSMC_Bank1E->BWTR[6]|=0<<28; //模式 A
FSMC_Bank1E->BWTR[6]|=0<<0; //地址建立时间(ADDSET)为 1 个 HCLK
//4 个 HCLK(HCLK=72M)液晶驱动 IC 的写脉宽,最少也得 50ns。 72M/4=24M=55ns
FSMC_Bank1E->BWTR[6]|=3<<8; //数据保存时间为 4 个 HCLK
//使能 BANK1,区域 4
FSMC_Bank1->BTCR[6]|=1<<0;
LCD->LCD_Command=0xD3;
LCD_ID=LCD->LCD_Date;
LCD_ID=LCD->LCD_Date;
LCD_ID=LCD->LCD_Date;
LCD_ID<<=8;
LCD_ID|=LCD->LCD_Date;
printf("%d",LCD_ID);
while(1)
{
}
}
|
|