新手上路
- 积分
- 28
- 金钱
- 28
- 注册时间
- 2020-1-22
- 在线时间
- 6 小时
|
10金钱
- 先说说崩溃的内心,原理图和全部代码打包文件中,大师下载帮看看。
复制代码 {
u16 i;
GPIO_InitTypeDef GPIO_InitStructure;
FSMC_NORSRAMInitTypeDef FSMC_NORSRAMInitStructure;
FSMC_NORSRAMTimingInitTypeDef readWriteTiming;
FSMC_NORSRAMTimingInitTypeDef writeTiming;
RCC->AHBENR|=1<<8; //??FSMC??
RCC->APB2ENR|=1<<0; //??PORTB??
RCC->APB2ENR|=1<<3; //??PORTB??
RCC->APB2ENR|=1<<5; //??PORTD??
RCC->APB2ENR|=1<<6; //??PORTE??
RCC_AHBPeriphClockCmd(RCC_AHBPeriph_FSMC,ENABLE); //使能FSMC时钟
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA|RCC_APB2Periph_GPIOD|RCC_APB2Periph_GPIOE|RCC_APB2Periph_GPIOB,ENABLE|RCC_APB2Periph_AFIO);//使能PORTB,D,E,G以及AFIO复用功能时钟
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8|GPIO_Pin_11|GPIO_Pin_12; //PB0 推挽输出 背光
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; //推挽输出
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOA, &GPIO_InitStructure);
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_3; //PB0 推挽输出 背光
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; //推挽输出
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOD, &GPIO_InitStructure);
//PORTD复用推挽输出
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0|GPIO_Pin_1|GPIO_Pin_4|GPIO_Pin_5|GPIO_Pin_7|GPIO_Pin_8|GPIO_Pin_9|GPIO_Pin_10|GPIO_Pin_13|GPIO_Pin_14|GPIO_Pin_15; // //PORTD复用推挽输出
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; //复用推挽输出
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOD, &GPIO_InitStructure);
//PORTE复用推挽输出
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_7|GPIO_Pin_8|GPIO_Pin_9|GPIO_Pin_10|GPIO_Pin_11|GPIO_Pin_12|GPIO_Pin_13|GPIO_Pin_14|GPIO_Pin_15; // //PORTD复用推挽输出
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; //复用推挽输出
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOE, &GPIO_InitStructure);
// // //PORTG12复用推挽输出 A0
// GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0|GPIO_Pin_12; // //PORTD复用推挽输出
// GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; //复用推挽输出
// GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
// GPIO_Init(GPIOG, &GPIO_InitStructure);
readWriteTiming.FSMC_AddressSetupTime = 0x01; //地址建立时间(ADDSET)为2个HCLK 1/36M=27ns
readWriteTiming.FSMC_AddressHoldTime = 0x00; //地址保持时间(ADDHLD)模式A未用到
readWriteTiming.FSMC_DataSetupTime = 0xf; // 数据保存时间为16个HCLK,因为液晶驱动IC的读数据的时候,速度不能太快,尤其对1289这个IC。
readWriteTiming.FSMC_BusTurnAroundDuration = 0x00;
readWriteTiming.FSMC_CLKDivision = 0x00;
readWriteTiming.FSMC_DataLatency = 0x00;
readWriteTiming.FSMC_AccessMode = FSMC_AccessMode_A; //模式A
writeTiming.FSMC_AddressSetupTime = 0x00; //地址建立时间(ADDSET)为1个HCLK
writeTiming.FSMC_AddressHoldTime = 0x0; //地址保持时间(A
writeTiming.FSMC_DataSetupTime = 0x3; ////数据保存时间为4个HCLK
writeTiming.FSMC_BusTurnAroundDuration = 0x00;
writeTiming.FSMC_CLKDivision = 0x00;
writeTiming.FSMC_DataLatency = 0x00;
writeTiming.FSMC_AccessMode = FSMC_AccessMode_A; //模式A
FSMC_NORSRAMInitStructure.FSMC_Bank = FSMC_LCD_BACKx;// 这里我们使用NE4 ,也就对应BTCR[6],[7]。
FSMC_NORSRAMInitStructure.FSMC_DataAddressMux = FSMC_DataAddressMux_Disable; // 不复用数据地址
FSMC_NORSRAMInitStructure.FSMC_MemoryType =FSMC_MemoryType_SRAM;// FSMC_MemoryType_SRAM; //SRAM
FSMC_NORSRAMInitStructure.FSMC_MemoryDataWidth = FSMC_MemoryDataWidth_16b;//存储器数据宽度为16bit
FSMC_NORSRAMInitStructure.FSMC_BurstAccessMode =FSMC_BurstAccessMode_Disable;// FSMC_BurstAccessMode_Disable;
FSMC_NORSRAMInitStructure.FSMC_WaitSignalPolarity = FSMC_WaitSignalPolarity_Low;
FSMC_NORSRAMInitStructure.FSMC_AsynchronousWait=FSMC_AsynchronousWait_Disable;
FSMC_NORSRAMInitStructure.FSMC_WrapMode = FSMC_WrapMode_Disable;
FSMC_NORSRAMInitStructure.FSMC_WaitSignalActive = FSMC_WaitSignalActive_BeforeWaitState;
FSMC_NORSRAMInitStructure.FSMC_WriteOperation = FSMC_WriteOperation_Enable; // 存储器写使能
FSMC_NORSRAMInitStructure.FSMC_WaitSignal = FSMC_WaitSignal_Disable;
FSMC_NORSRAMInitStructure.FSMC_ExtendedMode = FSMC_ExtendedMode_Enable; // 读写使用不同的时序
FSMC_NORSRAMInitStructure.FSMC_WriteBurst = FSMC_WriteBurst_Disable;
FSMC_NORSRAMInitStructure.FSMC_ReadWriteTimingStruct = &readWriteTiming; //读写时序
FSMC_NORSRAMInitStructure.FSMC_WriteTimingStruct = &writeTiming; //写时序
FSMC_NORSRAMInit(&FSMC_NORSRAMInitStructure); //初始化FSMC配置
FSMC_NORSRAMCmd(FSMC_LCD_BACKx, ENABLE); // 使能BANK1
//GPIOB->CRL&=0XFFFFFF0F; //PB1 ???? ??
//GPIOB->CRL|=0X00000030;
////PORTD??????
//GPIOD->CRH&=0X000FF000;
//GPIOD->CRH|=0XBBB00BBB;
//GPIOD->CRL&=0X0F00FF00;
//GPIOD->CRL|=0XB0BB00BB;
////PORTE??????
//GPIOE->CRH&=0X00000000;
//GPIOE->CRH|=0XBBBBBBBB;
//GPIOE->CRL&=0X000FFFFF;
//GPIOE->CRL|=0XBBB00000;
////?????
//bank1?NE1~4,??????BCR+TCR,??????????
//??????NE1 ,????BTCR[0],[1]?
//FSMC_Bank1->BTCR[0]=0X00000000;
//FSMC_Bank1->BTCR[1]=0X00000000;
//FSMC_Bank1E->BWTR[0]=0X00000000;
////??BCR??? ??????
//FSMC_Bank1->BTCR[0]|=1<<12; //??????
//FSMC_Bank1->BTCR[0]|=1<<14; //?????????
//FSMC_Bank1->BTCR[0]|=1<<4; //????????16bit
////??BTR???
////????????
//FSMC_Bank1->BTCR[1]|=0<<28; //??A
//FSMC_Bank1->BTCR[1]|=1<<0; //??????(ADDSET)?2?HCLK 1/36M=27ns
////??????IC???????,??????,???1289??IC?
//FSMC_Bank1->BTCR[1]|=0XF<<8; //???????16?HCLK
////????????
//FSMC_Bank1E->BWTR[0]|=0<<28; //??A
//FSMC_Bank1E->BWTR[0]|=0<<0; //??????(ADDSET)?1?HCLK
// //4?HCLK(HCLK=72M)??????IC??????,????50ns?72M/4=24M=55ns
//FSMC_Bank1E->BWTR[0]|=3<<8; //???????4?HCLK
////??BANK1,??4
//FSMC_Bank1->BTCR[0]|=1<<0; //??BANK1,??1
LCD_EN=1;//开启TFT电源
LCD_LED=1; //点亮背光
LCD_RESET=1; //复位引脚
delay_ms(5); // delay 5 ms
LCD_RESET=0; //复位
delay_ms(200); // delay 50 ms
LCD_RESET=1; //复位完成
delay_ms(300); // delay 50 ms
// LCD_WriteReg(0x0000,0x0001);
// LCD_WriteReg(0x0000,0x0001);
// LCD_CS=0; //PB.5 输出高
// lcddev.id=LCD_ReadReg(0x0000); //读ID(9320/9325/9328/4531/4535等IC)
// // printf(" LCD ID:%x\r\n",lcddev.id); //打印LCD ID
// if(lcddev.id<0XFF||lcddev.id==0XFFFF||lcddev.id==0X9300)//读到ID不正确,新增lcddev.id==0X9300判断,因为9341在未被复位的情况下会被读成9300
// {
//尝试9341 ID的读取
LCD_WR_REG(0XD3);
lcddev.id=LCD_RD_DATA(); //dummy read
lcddev.id=LCD_RD_DATA(); //读到0X00
lcddev.id=LCD_RD_DATA(); //读取93 或者94
lcddev.id<<=8;
lcddev.id|=LCD_RD_DATA(); //读取41 或者86或者88
// }
// printf(" LCD ID:%x\r\n",lcddev.id); //打印LCD ID
// LCD_WR_REG( 0x11 );
// delay_ms( 120 );
// LCD_WR_REG( 0x29 ); /* Display ON (29h) */
// LCD_WR_REG( 0XF7 );
// LCD_WR_DATA( 0xA9 );
// LCD_WR_DATA( 0x51 );
// LCD_WR_DATA( 0x2C );
// LCD_WR_DATA( 0x82 ); /* DSI write DCS command, use loose packet RGB 666 */
///* Power Control 1 (C0h) */
// LCD_WR_REG( 0xC0 );
// LCD_WR_DATA( 0x11 );
// LCD_WR_DATA( 0x09 );
///* Power Control 2 (C1h) */
// LCD_WR_REG( 0xC1 );
// LCD_WR_DATA( 0x41 );
///* VCOM Control (C5h) */
// LCD_WR_REG( 0XC5 );
// LCD_WR_DATA( 0x00 );
// LCD_WR_DATA( 0x0A );
// LCD_WR_DATA( 0x80 );
///* Frame Rate Control (In Normal Mode/Full Colors) (B1h) */
// LCD_WR_REG( 0xB1 );
// LCD_WR_DATA( 0xB0 );
// LCD_WR_DATA( 0x11 );
///* Display Inversion Control (B4h) */
// LCD_WR_REG( 0xB4 );
// LCD_WR_DATA( 0x02 );
///* Display Function Control (B6h) */
// LCD_WR_REG( 0xB6 );
// LCD_WR_DATA( 0x02 );
// LCD_WR_DATA( 0x22 );
///* Entry Mode Set (B7h) */
// LCD_WR_REG( 0xB7 );
// LCD_WR_DATA( 0xc6 );
///* HS Lanes Control (BEh) */
// LCD_WR_REG( 0xBE );
// LCD_WR_DATA( 0x00 );
// LCD_WR_DATA( 0x04 );
///* Set Image Function (E9h) */
// LCD_WR_REG( 0xE9 );
// LCD_WR_DATA( 0x00 );
// LCD_WR_REG( 0x36 );
// LCD_WR_DATA( 0x08 );
///* Interface Pixel Format (3Ah) */
// LCD_WR_REG( 0x3A );
// LCD_WR_DATA( 0x55 ); /* 0x55 : 16 bits/pixel */
///* PGAMCTRL (Positive Gamma Control) (E0h) */
// LCD_WR_REG( 0xE0 );
// LCD_WR_DATA( 0x00 );
// LCD_WR_DATA( 0x07 );
// LCD_WR_DATA( 0x10 );
// LCD_WR_DATA( 0x09 );
// LCD_WR_DATA( 0x17 );
// LCD_WR_DATA( 0x0B );
// LCD_WR_DATA( 0x41 );
// LCD_WR_DATA( 0x89 );
// LCD_WR_DATA( 0x4B );
// LCD_WR_DATA( 0x0A );
// LCD_WR_DATA( 0x0C );
// LCD_WR_DATA( 0x0E );
// LCD_WR_DATA( 0x18 );
// LCD_WR_DATA( 0x1B );
// LCD_WR_DATA( 0x0F );
///* NGAMCTRL (Negative Gamma Control) (E1h) */
// LCD_WR_REG( 0XE1 );
// LCD_WR_DATA( 0x00 );
// LCD_WR_DATA( 0x17 );
// LCD_WR_DATA( 0x1A );
// LCD_WR_DATA( 0x04 );
// LCD_WR_DATA( 0x0E );
// LCD_WR_DATA( 0x06 );
// LCD_WR_DATA( 0x2F );
// LCD_WR_DATA( 0x45 );
// LCD_WR_DATA( 0x43 );
// LCD_WR_DATA( 0x02 );
// LCD_WR_DATA( 0x0A );
// LCD_WR_DATA( 0x09 );
// LCD_WR_DATA( 0x32 );
// LCD_WR_DATA( 0x36 );
// LCD_WR_DATA( 0x0F );
LCD_WR_REG(0xE0);
LCD_WR_DATA(0x00);
LCD_WR_DATA(0x07);
LCD_WR_DATA(0x0f);
LCD_WR_DATA(0x0D);
LCD_WR_DATA(0x1B);
LCD_WR_DATA(0x0A);
LCD_WR_DATA(0x3c);
LCD_WR_DATA(0x78);
LCD_WR_DATA(0x4A);
LCD_WR_DATA(0x07);
LCD_WR_DATA(0x0E);
LCD_WR_DATA(0x09);
LCD_WR_DATA(0x1B);
LCD_WR_DATA(0x1e);
LCD_WR_DATA(0x0f);
LCD_WR_REG(0xE1);
LCD_WR_DATA(0x00);
LCD_WR_DATA(0x22);
LCD_WR_DATA(0x24);
LCD_WR_DATA(0x06);
LCD_WR_DATA(0x12);
LCD_WR_DATA(0x07);
LCD_WR_DATA(0x36);
LCD_WR_DATA(0x47);
LCD_WR_DATA(0x47);
LCD_WR_DATA(0x06);
LCD_WR_DATA(0x0a);
LCD_WR_DATA(0x07);
LCD_WR_DATA(0x30);
LCD_WR_DATA(0x37);
LCD_WR_DATA(0x0f);
LCD_WR_REG(0xC0);
LCD_WR_DATA(0x10);
LCD_WR_DATA(0x10);
LCD_WR_REG(0xC1);
LCD_WR_DATA(0x41);
LCD_WR_REG(0xC5);
LCD_WR_DATA(0x00);
LCD_WR_DATA(0x22);
LCD_WR_DATA(0x80);
LCD_WR_REG(0x36);
LCD_WR_DATA(0x48);
LCD_WR_REG(0x3A);// Interface Mode Control
LCD_WR_DATA(0x66);
LCD_WR_REG(0XB0); //Interface Mode Control
LCD_WR_DATA(0x00);
LCD_WR_REG(0xB1); //Frame rate 70HZ
LCD_WR_DATA(0xB0);
LCD_WR_DATA(0x11);
LCD_WR_REG(0xB4);
LCD_WR_DATA(0x02);
LCD_WR_REG(0xB6); //RGB/MCU Interface Control
LCD_WR_DATA(0x02);
LCD_WR_DATA(0x02);
LCD_WR_REG(0xB7);
LCD_WR_DATA(0xC6);
//LCD_WR_REG(0XBE);
//LCD_WR_DATA(0x00);
//LCD_WR_DATA(0x04);
LCD_WR_REG(0xE9);
LCD_WR_DATA(0x00);
LCD_WR_REG(0XF7);
LCD_WR_DATA(0xA9);
LCD_WR_DATA(0x51);
LCD_WR_DATA(0x2C);
LCD_WR_DATA(0x82);
LCD_WR_REG(0x11);
delay_ms(120);
LCD_WR_REG(0x29);
/* Sleep Out (11h */
// LCD_WR_REG( 0x11 );
// delay_ms( 120 );
// LCD_WR_REG( 0x29 ); /* Display ON (29h) */
LCD_Display_Dir(0); //默认为竖屏
LCD_Clear(BLUE);//显示蓝色背景
// LCD_Fill(0,0,200,200,BLUE);
}
下面是部分头文件 #define FSMC_LCD_BACKx FSMC_Bank1_NORSRAM1
//////////////////////////////////////////////////////////////////////////////////
//-----------------LCD端口定义----------------
#define LCD_LED PAout(8) //LCD背光 PB0
#define LCD_EN PAout(12) //LCD背光 PB0
#define LCD_RESET PDout(3) //LCD背光 PB0
#define LCD_DCX PDout(13) //LCD背光 PB0
#define LCD_CS PDout(13) //LCD背光 PB0
//LCD地址结构体
typedef struct
{
vu16 LCD_REG;
vu16 LCD_RAM;
} LCD_TypeDef;
//使用NOR/SRAM的 Bank1.sector4,地址位HADDR[27,26]=11 A10作为数据命令区分线
//注意设置时STM32内部会右移一位对其!
#define LCD_BASE ((u32)(0x60000000 | 0x0007FFFE))
#define LCD ((LCD_TypeDef *) LCD_BASE)
|
最佳答案
查看完整内容[请看2#楼]
还没有解决 我自己先顶自己个肺吧!
FSMC用的很流畅了,也玩明白了。改了几个列成 示波器都能看到每个腿的脉冲 就是不能正常。
|