你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

stm32f429驱动TFT问题,后小部分显示不正常

[复制链接]
weizhiwuxian 提问时间:2015-7-11 09:51 /
/* 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_PCPolarity_IPC;
       
        /* 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(250, 2, 8);//RCC_PLLSAIConfig(192, 7, 4);
  RCC_LTDCCLKDivConfig(RCC_PLLSAIDivR_Div4);       
       
  /* ʹÄÜPLLSAIʱÖÓ */
  RCC_PLLSAICmd(ENABLE);
       
  /* µÈ´ýPLLSAIʱÖÓ */
  while(RCC_GetFlagStatus(RCC_FLAG_PLLSAIRDY) == RESET){}
       
//-- Timing configuration --//
//-- Configure horizontal synchronization width --//                 
  /*  */
  LTDC_InitStruct.LTDC_HorizontalSync = HSYNC;
  /*  */
  LTDC_InitStruct.LTDC_VerticalSync = VSYNC;
  /*  */
  LTDC_InitStruct.LTDC_AccumulatedHBP = HBP;
  /*  */
  LTDC_InitStruct.LTDC_AccumulatedVBP = VBP;  
  /*  */
  LTDC_InitStruct.LTDC_AccumulatedActiveW = LCDX + HBP;
  /*  */
  LTDC_InitStruct.LTDC_AccumulatedActiveH = LCDY + VBP;
  /*  */
  LTDC_InitStruct.LTDC_TotalWidth = LCDX + HBP + HFP;
  /*  */
  LTDC_InitStruct.LTDC_TotalHeigh = LCDY + VBP + VFP;

  LTDC_Init(&LTDC_InitStruct);
               
  LTDC_Layer_InitStruct.LTDC_HorizontalStart = HBP+1;
  LTDC_Layer_InitStruct.LTDC_HorizontalStop = (LCDX + HBP);
  LTDC_Layer_InitStruct.LTDC_VerticalStart = VBP+1;
  LTDC_Layer_InitStruct.LTDC_VerticalStop = (LCDY + VBP);       

  /* Pixel Format configuration*/            
  LTDC_Layer_InitStruct.LTDC_PixelFormat = LTDC_Pixelformat_RGB888;
  /* 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 = 0x0000ff;        
  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 = ((LCDX * 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 = (LCDX * 2);
  /* configure the number of lines */  
  LTDC_Layer_InitStruct.LTDC_CFBLineNumber = LCDY;

  /* 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();


试过驱动800 X480的TFT,写数据只显示到320行,驱动800 X 600 的TFT数据像是到400行,请问是什么问题???????????????,用SDROM做内存显示

ddd.jpg
收藏 1 评论13 发布时间:2015-7-11 09:51

举报

13个回答
creep 回答时间:2015-7-11 11:23:09
weizhiwuxian 发表于 2015-7-11 11:06
问题解决,配置错误,R888模式,对应需要修改TDC_Layer_InitStruct.LTDC_CFBLineLength = ((LCDX * 2) + 3); ...

RGB888模式要修改为下面的吧,
  1. TDC_Layer_InitStruct.LTDC_CFBLineLength = ((LCDX * 3) + 3);
复制代码
lcd.jpg
feiting94 回答时间:2015-7-11 10:04:09
楼主可以试一试只开一层,
creep 回答时间:2015-7-11 11:05:24
不是很懂,但是感觉下面的几个参数设置是不是有问题,
  1. LTDC_Layer_InitStruct.LTDC_HorizontalStart = HBP+1;
  2.   LTDC_Layer_InitStruct.LTDC_HorizontalStop = (LCDX + HBP);
  3.   LTDC_Layer_InitStruct.LTDC_VerticalStart = VBP+1;
  4.   LTDC_Layer_InitStruct.LTDC_VerticalStop = (LCDY + VBP);     
复制代码

从手册上看的2个图看
lcd.jpg
lcd.jpg
应该为下面的公式吧,
  1.    Horizontal start = horizontal synchronization + Horizontal back porch
  2.      Vertical start   = vertical synchronization + vertical back porch   
  3.      Horizontal stop = Horizontal start + window width -1
  4.      Vertical stop   = Vertical start + window height -1  
复制代码





weizhiwuxian 回答时间:2015-7-11 11:06:03
问题解决,配置错误,R888模式,对应需要修改TDC_Layer_InitStruct.LTDC_CFBLineLength = ((LCDX * 2) + 3);
weizhiwuxian 回答时间:2015-7-11 11:27:54
是的,正解!!!!!!!!!!
moyanming2013 回答时间:2015-7-11 14:53:23
注释乱码
112207301219 回答时间:2015-7-11 15:47:53
还能这样玩
星辰一方 回答时间:2015-7-11 15:55:36
不懂,帮顶……
mark0668 回答时间:2015-7-11 16:45:00
学习了..
12下一页

所属标签

相似问题

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
微信公众号二维码 微信公众号
手机版二维码 手机版