[STM32F7]

NUCLEO144-STM32F722驱动液晶屏

[复制链接]
1027|1
手机看帖
扫描二维码
随时随地手机跟帖
9robot|  楼主 | 2017-3-21 16:37 | 显示全部楼层 |阅读模式
       手里有个家里人不用的山寨机,扔了可惜,留着无用。然后就拆了,发现里面基本没什么可以利用的只有一个主芯片和一个射频芯片,很是精简。唯一可以用的也就是那块1.77英寸的液晶屏了。
       拆掉之后,通过屏幕的排线数量可以知道,这屏肯定是串行驱动。排线借口有好多引脚,但是连接到屏幕内部的只有12个。先拿万用表测量GND,这个还是比较好找的。再找LED的正负极,试几次也就找到了。剩下的就是VCC和信号线了。然后就是那逻辑分析仪分析。通过时序图可以找到哪些是信号线。哪几个是VCC。后来证明其实这样做有点浪费时间。在找资料是,淘宝真是一个比百度好使的地儿。搜索液晶相关,发现与之类似的点开找资料。发现有一个14PIN的液晶和我手里的这块引脚顺序一样。

TB2wHaHaXXXXXbQXpXXXXXXXXXX_!!2237664661.png

       店家提供了代码,直接复制粘贴,简单修改GPIO,烧写代码,就成功了,说起来是不是感觉很简单。

IMG_20170319_095103.jpg

IMG_20170319_095107.jpg


       软件采用了模拟SPI的方式向屏幕发送数据。发送的速率和代码的执行效率有关。最初并没有开D-CACHE和I-CACHE,主要是考虑如果速度过快,屏幕可能会跟不上,从而出现问题。当调试好后,就想办法提高刷屏速度了。先是把没必要的延时函数删除,快了一些,但是程度很有限。可以当我把硬件加速打开后。我的天呢。刷屏速度简直快了好几倍。

IMG_20170319_095107.jpg

NUCLEO144_M7_LCD.zip

1.08 MB

gejigeji521| | 2017-3-21 19:18 | 显示全部楼层

#include "main.h"
#include "usart.h"
#include "sys.h"
#include "delay.h"
#include "led.h"
#include "Lcd_Driver.h"
#include "GUI.h"
#include "delay.h"
#include "Picture.h"

unsigned char Num[10]={0,1,2,3,4,5,6,7,8,9};



void Num_Test(void)
{
        u8 i=0;
        Lcd_Clear(GRAY0);
        Gui_DrawFont_GBK16(16,20,RED,GRAY0,"1234567890");
//        delay_ms(1000);
        Lcd_Clear(GRAY0);

        for(i=0;i<10;i++)
        {
        Gui_DrawFont_Num32((i%3)*40,32*(i/3)+30,RED,GRAY0,Num[i+1]);
//        delay_ms(100);
        }
       
}

void Font_Test(void)
{
        Lcd_Clear(GRAY0);
       

//        delay_ms(1000);
        Lcd_Clear(GRAY0);

        Gui_DrawFont_GBK16(0,100,BLUE,GRAY0,"1234567890");
        Gui_DrawFont_GBK16(0,130,RED,GRAY0, "1234567890");       
//        delay_ms(1800);       
}

void Color_Test(void)
{
        u8 i=1;
        Lcd_Clear(GRAY0);
       
        Gui_DrawFont_GBK16(20,10,BLUE,GRAY0,"Color Test");
//        delay_ms(200);

        while(i--)
        {
        Lcd_Clear(WHITE);
        Lcd_Clear(BLACK);
        Lcd_Clear(RED);
  Lcd_Clear(GREEN);
  Lcd_Clear(BLUE);
        }               
}
//16位 垂直扫描  右到左  高位在前
void show_pic()
{
        int i,j,k;
        unsigned char picH,picL;
        Lcd_Clear(GRAY0);

//        delay_ms(1000);
        Lcd_Clear(GRAY0);
        k=0;
        for(i=0;i<128;i++)
        for(j=0;j<160;j++)
        {
                picH=gImage_123[k++];
                picL=gImage_123[k++];
                Lcd_WriteData(picH);
                Lcd_WriteData(picL);
        }       
}
u16 ID=0;
int main(void)
{
//  u8 a=0;
        u16 color=0;
        HAL_Init();
//  Cache_Enable();
  /* Configure the system clock to 216 MHz */
  SystemClock_Config();
  LED_Init();
        uart_init(115200);

  Lcd_Init(2);
        Lcd_Clear(GRAY0);
       
  while(1)
  {  
//                Lcd_Init(2);
                Lcd_Clear(color);
                Color_Test();                //简单纯色填充测试
                Num_Test();
                Font_Test();//中英文显示测试               
                show_pic();//图片显示示例
                delay_ms(600);
                color+=100;
  }
       
          

       

}



使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

16

主题

91

帖子

1

粉丝