廠家的程式和正點原子的程式都改了,使用A18地址線,FSMC_bank1驅動,另外我增加了1個LCD螢屏電源芯片,用于單獨管理螢屏功耗。
不管如何操作寫入D3名回傳ID9488 這是正常的 然后初始化了一堆代碼 最后設定螢屏位藍色,但是實際沒有任何反應。一片白茫茫,求助大神姥爺幫忙,我吧工程和原理圖放到附件中了。
調了4天了,臉都綠了,是在是搞不明白了,焊接上肯定沒問題,老拖焊手不是白練的。



void LCD_Init(void)
{
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
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);
// 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(0x11);
delay_ms(120);
LCD_WR_REG(0x29);
LCD_Display_Dir(0); //默認為豎屏
LCD_Clear(BLUE);//顯示藍色背景
// LCD_Fill(0,0,200,200,BLUE);
}
L
頭檔案如下
//LCD重要引數集
typedef struct
{
u16 width; //LCD 寬度
u16 height; //LCD 高度
u16 id; //LCD ID
u8 dir; //橫屏還是豎屏控制:0,豎屏;1,橫屏。
u16 wramcmd; //開始寫gram指令
u16 setxcmd; //設定x坐標指令
u16 setycmd; //設定y坐標指令
}_lcd_dev;
//LCD引數
extern _lcd_dev lcddev; //管理LCD重要引數
//LCD的畫筆顏色和背景色
extern u16 POINT_COLOR;//默認紅色
extern u16 BACK_COLOR; //背景顏色.默認為白色
#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)
//////////////////////////////////////////////////////////////////////////////////
//掃描方向定義
#define L2R_U2D 0 //從左到右,從上到下
#define L2R_D2U 1 //從左到右,從下到上
#define R2L_U2D 2 //從右到左,從上到下
#define R2L_D2U 3 //從右到左,從下到上
#define U2D_L2R 4 //從上到下,從左到右
#define U2D_R2L 5 //從上到下,從右到左
#define D2U_L2R 6 //從下到上,從左到右
#define D2U_R2L 7 //從下到上,從右到左
#define DFT_SCAN_DIR L2R_U2D //默認的掃描方向
//畫筆顏色
#define WHITE 0xFFFF
#define BLACK 0x0000
#define BLUE 0x001F
#define BRED 0XF81F
#define GRED 0XFFE0
#define GBLUE 0X07FF
#define RED 0xF800
#define MAGENTA 0xF81F
#define GREEN 0x07E0
#define CYAN 0x7FFF
#define YELLOW 0xFFE0
#define BROWN 0XBC40 //棕色
#define BRRED 0XFC07 //棕紅色
#define GRAY 0X8430 //灰色
//GUI顏色
#define DARKBLUE 0X01CF //深藍色
#define LIGHTBLUE 0X7D7C //淺藍色
#define GRAYBLUE 0X5458 //灰藍色
//以上三色為PANEL的顏色
#define LIGHTGREEN 0X841F //淺綠色
//#define LIGHTGRAY 0XEF5B //淺灰色(PANNEL)
#define LGRAY 0XC618 //淺灰色(PANNEL),表單背景色
#define LGRAYBLUE 0XA651 //淺灰藍色(中間層顏色)
#define LBBLUE 0X2B12 //淺棕藍色(選擇條目的反色)
void LCD_WR_DATA(u16 data);
void LCD_WR_REG(u16 regval);
void LCD_Init(void); //初始化
uj5u.com熱心網友回復:
自己頂自己個肺吧uj5u.com熱心網友回復:
初始化引數都有寫進去嗎?回讀看下!另外 確保屏供電都正常!還有就是屏是否有個測驗模式 看能否進入測驗模式驗證下轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/168354.html
標籤:單片機/工控
上一篇:將無線研究從實驗室轉移到現場
