zoukankan      html  css  js  c++  java
  • STM32F4 LTDC

    首先配置同步时序先看参考手册

    下面看一个实际例子,一块439的开发板

    设置:

      配置时序

      LTDC_InitStruct.LTDC_HorizontalSync = 40;
      /*  */
      LTDC_InitStruct.LTDC_VerticalSync = 9;
      /*  */
      LTDC_InitStruct.LTDC_AccumulatedHBP = 42; 
      /*  */
      LTDC_InitStruct.LTDC_AccumulatedVBP = 11;  
      /*  */
      LTDC_InitStruct.LTDC_AccumulatedActiveW = 522;
      /*  */
      LTDC_InitStruct.LTDC_AccumulatedActiveH = 283;
      /*  */
      LTDC_InitStruct.LTDC_TotalWidth = 524; 
      /*  */
      LTDC_InitStruct.LTDC_TotalHeigh = 285;
                
      LTDC_Init(&LTDC_InitStruct);

    注意每个参数定义,之前是累加

    看下完整的初始化代码

    void LCD_Init(void)
    {
      LTDC_InitTypeDef       LTDC_InitStruct;
      LTDC_Layer_InitTypeDef LTDC_Layer_InitStruct;
      LTDC_Layer_TypeDef     LTDC_Layerx;
      
        
      /* IO¿Ú³õʼ»¯ */
      LCD_GPIOInit();
        
      LCD_DisplayOff();
      /* ʹÄÜLCDʱÖÓ */
      RCC_APB2PeriphClockCmd(RCC_APB2Periph_LTDC, ENABLE);
      /* ʹÄÜDMAʧ×Ù*/
      RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_DMA2D, ENABLE);
        
      /* ˮƽͬ²½ÐźÅ---µÍµçƽÓÐЧ */
      LTDC_InitStruct.LTDC_HSPolarity = LTDC_HSPolarity_AL;     
      /* ´¹Ö±Í¬²½ÐźÅ---µÍµçƽÓÐЧ */  
      LTDC_InitStruct.LTDC_VSPolarity = LTDC_VSPolarity_AL;     
      /* Êý¾ÝʹÄÜÐźÅ---µÍµçƽÓÐЧ */
      LTDC_InitStruct.LTDC_DEPolarity = LTDC_DEPolarity_AL;     
      /* ÏñËØÊ±ÖÓÅäÖÃ--- */ 
      LTDC_InitStruct.LTDC_PCPolarity = LTDC_DEPolarity_AL;
        /* LCD±³¹âÉèÖà */
      LTDC_InitStruct.LTDC_BackgroundRedValue = 0;            
      LTDC_InitStruct.LTDC_BackgroundGreenValue = 0;          
      LTDC_InitStruct.LTDC_BackgroundBlueValue = 0;      
      /*
       ****************************************************************************
       *PLLSAI_VCO = HSE*PLLSAI_N / PLL_M = 8 * 192 / 8 = 192MHz
       *PLLLCDCLK = PLLSAI_VCO / PLLSAI_R = 192 / 3 = 64 Mhz
       *LTDC clock frequency = PLLLCDCLK / RCC_PLLSAIDivR = 64 / 8 = 8 Mhz
       ****************************************************************************
       */
      RCC_PLLSAIConfig(192, 7, 3);
      RCC_LTDCCLKDivConfig(RCC_PLLSAIDivR_Div4);    
      /* ʹÄÜPLLSAIʱÖÓ */
      RCC_PLLSAICmd(ENABLE);
      /* µÈ´ýPLLSAIʱÖÓ */
      while(RCC_GetFlagStatus(RCC_FLAG_PLLSAIRDY) == RESET){}
      /*  */
      LTDC_InitStruct.LTDC_HorizontalSync = 40;
      /*  */
      LTDC_InitStruct.LTDC_VerticalSync = 9;
      /*  */
      LTDC_InitStruct.LTDC_AccumulatedHBP = 42; 
      /*  */
      LTDC_InitStruct.LTDC_AccumulatedVBP = 11;  
      /*  */
      LTDC_InitStruct.LTDC_AccumulatedActiveW = 522;
      /*  */
      LTDC_InitStruct.LTDC_AccumulatedActiveH = 283;
      /*  */
      LTDC_InitStruct.LTDC_TotalWidth = 524; 
      /*  */
      LTDC_InitStruct.LTDC_TotalHeigh = 285;
                
      LTDC_Init(&LTDC_InitStruct);
            
      LTDC_Layer_InitStruct.LTDC_HorizontalStart = 43;
      LTDC_Layer_InitStruct.LTDC_HorizontalStop = (480 + 43 - 1); 
      LTDC_Layer_InitStruct.LTDC_VarticalStart = 12;
      LTDC_Layer_InitStruct.LTDC_VerticalStop = (272 + 12 - 1);    
    
      /* Pixel Format configuration*/            
      LTDC_Layer_InitStruct.LTDC_PixelFormat = LTDC_Pixelformat_RGB565;
      /* Alpha constant (255 totally opaque) */
      LTDC_Layer_InitStruct.LTDC_ConstantAlpha = 255; 
      /* Default Color configuration (configure A,R,G,B component values) */          
      LTDC_Layer_InitStruct.LTDC_DefaultColorBlue = 0;        
      LTDC_Layer_InitStruct.LTDC_DefaultColorGreen = 0;       
      LTDC_Layer_InitStruct.LTDC_DefaultColorRed = 0;         
      LTDC_Layer_InitStruct.LTDC_DefaultColorAlpha = 0;
      /* Configure blending factors */       
      LTDC_Layer_InitStruct.LTDC_BlendingFactor_1 = LTDC_BlendingFactor1_CA;    
      LTDC_Layer_InitStruct.LTDC_BlendingFactor_2 = LTDC_BlendingFactor2_CA;
      /* the length of one line of pixels in bytes + 3 then :
         Line Lenth = Active high width x number of bytes per pixel + 3 
         Active high width         = LCD_PIXEL_WIDTH 
         number of bytes per pixel = 2    (pixel_format : RGB565) 
      */
      LTDC_Layer_InitStruct.LTDC_CFBLineLength = ((480 * 2) + 3);
      /*  the pitch is the increment from the start of one line of pixels to the 
          start of the next line in bytes, then :
          Pitch = Active high width x number of bytes per pixel     
      */ 
      LTDC_Layer_InitStruct.LTDC_CFBPitch = (480 * 2);
      /* configure the number of lines */  
      LTDC_Layer_InitStruct.LTDC_CFBLineNumber = 272;
    
      /* Input Address configuration */    
      LTDC_Layer_InitStruct.LTDC_CFBStartAdress = LCD_FRAME_BUFFER;
       
      LTDC_LayerInit(LTDC_Layer1, &LTDC_Layer_InitStruct);
    
      /* Configure Layer2 */
      LTDC_Layer_InitStruct.LTDC_CFBStartAdress = LCD_FRAME_BUFFER + BUFFER_OFFSET;
      LTDC_Layer_InitStruct.LTDC_BlendingFactor_1 = LTDC_BlendingFactor1_PAxCA;    
      LTDC_Layer_InitStruct.LTDC_BlendingFactor_2 = LTDC_BlendingFactor2_PAxCA;
      LTDC_LayerInit(LTDC_Layer2, &LTDC_Layer_InitStruct);
        
      LTDC_ReloadConfig(LTDC_IMReload);
      
      /* Enable foreground & background Layers */
      LTDC_LayerCmd(LTDC_Layer1, ENABLE);
    //  LTDC_LayerCmd(LTDC_Layer2, ENABLE);
      LTDC_ReloadConfig(LTDC_IMReload);
        
      LCD_DisplayOn();
    }
    
    LCD_Init

    LTDC_DefaultColorBlue就是背景色

    每个Layer支持窗口(Window)操作,所谓Window,就是指该层的图像只有在Window区域内有效,而Window区域外则用该层的DefaultColor填充。如下图:

    填色直接写内存

    int main (void)
    {
      uint32_t i, j;
      uint16_t *addr = (uint16_t *)LCD_FRAME_BUFFER;
        
        
      SDRAM_Init();
      LCD_Init();
        j = 0;
      while (1) {
            
        for (i = 0; i < 0x2000000;i++);
        for (i = 0; i < 480 * 272; i++) 
        {
          addr[i] = 1 << j;
        }
        j++;
        if (j > 15)j = 0;        
      }    
    }
    
  • 相关阅读:
    123457123457#0#-----com.threeapp.renzhepaoku01----儿童跑酷游戏(忍者版)
    123456123456#0#-----com.threeapp.xiongMaoPaoPao01----熊猫跑酷01
    123456123456#0#-----com.threeapp.JiQiRenDaZhan01----机器人大战恐龙
    HashMap的工作原理
    Java 虚拟机
    分布式之缓存系统
    分库分表之后,id 主键如何处理?
    如何设计可以动态扩容缩容的分库分表方案?
    为什么要分库分表?用过哪些分库分表中间件?不同的分库分表中间件都有什么优点和缺点?
    如何实现 MySQL 的读写分离?MySQL 主从复制原理的是啥?如何解决 MySQL 主从同步的延时问题?
  • 原文地址:https://www.cnblogs.com/jiangzhaowei/p/10864511.html
Copyright © 2011-2022 走看看