新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > STM32驅動TFT顯示屏ILI9325

        STM32驅動TFT顯示屏ILI9325

        作者: 時間:2016-11-24 來源:網絡 收藏
        2.4寸TFT240370PQ顯示屏,驅動IC為ILI9325。該屏屏幕電源為2.8~3.3V,背光電源最高3.2V(在3.3V電源下串20Ω電阻或5V下串200Ω電阻),兼容8/16位數據接口(可選)。數據口電平理論上不能超3.3V,由于TFT內部有電壓鉗位,樣品測試時可使用5V單片機。

          寫下幾點注意事項:

        1、不要急著寫屏,首先讀ID,確認驅動IC是否ILI9325。ILI9320、ILI9325、ILI9328等驅動IC的初始化參數會稍有不同。讀ID還可以確認數據接口選擇的正確性。如果是16位數據接口,ID讀到0x9325;如果是8位數據接口,ID讀兩次可得0x93,0x25。

        2、雖然TFT屏的初始化參數比較多,但參數要求并不很嚴格,不會因為一點點的差錯而點不亮(當然,不寫display on的命令肯定不會亮),所以,在點不亮時不要首先懷疑Init()的參數設置,應該先檢查連線的正確性,I/O口的設置。

        3、要注意給RST的復位有足夠的時間,寫命令和寫數據的子函數里RS的選擇。

        4、賣屏的商家通常提供的是STC的例程,若STM32驅不起來,可先用STC把屏點亮,以確認該屏正常,再仔細尋找問題所在。

          以下是例程,該例程使用I/O口驅動,雖然選擇16位數據接口,但刷屏速度有點慢,建議使用LCD總線。背光使用PWM調節對比度(該段程序省略):


        #defineP_TFT_RS   GPIOB
        #define TFT_RS    GPIO_Pin_0
        #defineP_TFT_WR  GPIOB
        #define TFT_WR    GPIO_Pin_1
        #defineP_TFT_RD GPIOB
        #define TFT_RD GPIO_Pin_2
        #defineP_TFT_CS GPIOB
        #define TFT_CS GPIO_Pin_10
        #defineP_TFT_RSTGPIOB
        #define TFT_RST GPIO_Pin_11
        #defineP_TFT_BK GPIOB
        #define TFT_BKGPIO_Pin_7 // TIM4_CH2 PWM


        #define Set_CS GPIO_SetBits(P_TFT_CS,TFT_CS);
        #define Clr_CS GPIO_ResetBits(P_TFT_CS,TFT_CS);

        #define Set_RSGPIO_SetBits(P_TFT_RS,TFT_RS);
        #define Clr_RS GPIO_ResetBits(P_TFT_RS,TFT_RS);

        #define Set_WR GPIO_SetBits(P_TFT_WR,TFT_WR);
        #define Clr_WR GPIO_ResetBits(P_TFT_WR,TFT_WR);

        #define Set_RD GPIO_SetBits(P_TFT_RD,TFT_RD);
        #define Clr_RD GPIO_ResetBits(P_TFT_RD,TFT_RD);

        #define Set_RST GPIO_SetBits(P_TFT_RST,TFT_RST);
        #define Clr_RST GPIO_ResetBits(P_TFT_RST,TFT_RST);

        void GPIO_Configuration(void)
        {
        GPIO_InitTypeDef GPIO_InitStructure;


        GPIO_InitStructure.GPIO_Pin = GPIO_Pin_All;
        GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
        GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
        GPIO_Init(GPIOA, &GPIO_InitStructure);
        GPIO_Init(GPIOB, &GPIO_InitStructure);
        GPIO_Init(GPIOC, &GPIO_InitStructure);
        GPIO_Init(GPIOD, &GPIO_InitStructure);

        GPIO_InitStructure.GPIO_Pin = GPIO_Pin_7;// for PWM
        GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
        GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
        GPIO_Init(GPIOB, &GPIO_InitStructure);

        }


        void DataToIO(u16 val)
        {
        u16 dat;
        dat = GPIO_ReadOutputData(GPIOC);// DBL
        dat = (dat&0xFF00) | (val&0xFF);
        GPIO_Write(GPIOC, dat);

        dat = GPIO_ReadOutputData(GPIOA);// DBH
        dat = (dat&0xFF00) | ((val>>8)&0xFF);
        GPIO_Write(GPIOA, dat);
        }


        void TFT_Write_com(u16 dat) //發送命令
        {
        Clr_RS;
        Set_RD;
        DataToIO(dat);
        Clr_WR;
        Set_WR;
        }


        void TFT_Write_dat(u16 dat)// 發送數據
        {
        Set_RS;
        Set_RD;
        DataToIO(dat);
        Clr_WR;
        Set_WR;
        }


        u16 TFT_ReadReg(u16 reg)
        {
        u16 datL, datH;
        GPIO_InitTypeDef GPIO_InitStructure;

        Clr_CS;
        TFT_Write_com(reg);

        GPIO_InitStructure.GPIO_Pin = 0xFF;
        GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
        GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU ;// 上拉輸入
        GPIO_Init(GPIOC, &GPIO_InitStructure);
        GPIO_Init(GPIOA, &GPIO_InitStructure);

        GPIOA->ODR = 0xFFFF;
        GPIOC->ODR = 0xFFFF;

        Set_RS;
        Set_WR;
        Clr_RD;
        datH = GPIOA->IDR;
        datL = GPIOC->IDR;
        Set_RD;
        Set_CS;

        GPIO_InitStructure.GPIO_Pin = GPIO_Pin_All;
        GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
        GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
        GPIO_Init(GPIOC, &GPIO_InitStructure);
        GPIO_InitStructure.GPIO_Pin = 0xFF;
        GPIO_Init(GPIOA, &GPIO_InitStructure);
        DataToIO(0xFFFF);

        datH = ((datH<<8)&0xFF00) | (datL&0x00FF);

        return(datH);
        }


        上一頁 1 2 下一頁

        評論


        技術專區

        關閉
        主站蜘蛛池模板: 陆川县| 马公市| 河北省| 上饶县| 白山市| 锦屏县| 古丈县| 房产| 屯留县| 汉源县| 陕西省| 兴安盟| 扎鲁特旗| 新野县| 万州区| 灌阳县| 剑川县| 郁南县| 禹州市| 永新县| 江源县| 子长县| 孝感市| 嫩江县| 抚宁县| 清新县| 义马市| 金塔县| 平乐县| 东乡族自治县| 通山县| 台南县| 三门县| 恩平市| 泰顺县| 修水县| 郁南县| 禄丰县| 大方县| 德昌县| 万源市|