最近在stm32f429
discover板上驱动7寸屏(800X480),
stm32f429内部带屏的驱动器LTDC,之前在r板上运行网上的emwin很正常,但是屏幕是2.4寸的,现在改为7寸屏,可以显示但是显示的尺寸跟分辨率不对,
我的相关配置如下,这个问题让我纠结好久了,希望知道的大大给我指点一下,不胜感激,必有重谢!
另附图片
[mw_shl_code=c,true]#define LCD_PIXEL_WIDTH ((uint16_t)800)
#define LCD_PIXEL_HEIGHT ((uint16_t)480)
#define HSW ((uint16_t)48) /* Horizontal synchronization */
#define HBP ((uint16_t)40) /* Horizontal back porch */
#define HFP ((uint16_t)40) /* Horizontal front porch */
#define VSW ((uint16_t)3) /* Vertical synchronization */
#define VBP ((uint16_t)29) /* Vertical back porch */
#define VFP ((uint16_t)13) /* Vertical front porch */
#define HSTART (HBP)
#define HSTOP (LCD_PIXEL_WIDTH+HSTART)
#define VSTART (VBP)
#define VSTOP (LCD_PIXEL_HEIGHT+VSTART)
#define LCD_FRAME_BUFFER ((uint32_t)0xD0000000) //LCD?????????×???·?????·SDRAM
#define BUFFER_OFFSET ((uint32_t)0x60000)
void LCD_Init(void)函数中:
RCC_PLLSAIConfig(192, 7, 4);
RCC_LTDCCLKDivConfig(RCC_PLLSAIDivR_Div2);//RCC_PLLSAIDivR_Div8
/* Enable PLLSAI Clock */
RCC_PLLSAICmd(ENABLE);
/* Wait for PLLSAI activation */
while(RCC_GetFlagStatus(RCC_FLAG_PLLSAIRDY) == RESET)
{
}
//?±?ò?????????????ó????×???
/* Timing configuration */
/* Configure horizontal synchronization width */
LTDC_InitStruct.LTDC_HorizontalSync = HSW-1;
/* Configure vertical synchronization height */
LTDC_InitStruct.LTDC_VerticalSync = VSW-1;
/* Configure accumulated horizontal back porch */
LTDC_InitStruct.LTDC_AccumulatedHBP = HBP-1;
/* Configure accumulated vertical back porch */
LTDC_InitStruct.LTDC_AccumulatedVBP = VBP-1;
/* Configure accumulated active width */
LTDC_InitStruct.LTDC_AccumulatedActiveW = LCD_PIXEL_WIDTH + HBP-1;
/* Configure accumulated active height */
LTDC_InitStruct.LTDC_AccumulatedActiveH = LCD_PIXEL_HEIGHT + VBP-1;
/* Configure total width */
LTDC_InitStruct.LTDC_TotalWidth = LCD_PIXEL_WIDTH + HBP + HFP-1;
/* Configure total height */
LTDC_InitStruct.LTDC_TotalHeigh = LCD_PIXEL_HEIGHT + VBP + VFP-1;
LTDC_Init(<DC_InitStruct);
static void _LCD_InitController(int LayerIndex) 函数中:
xSize = LCD_GetXSizeEx(LayerIndex);
ySize = LCD_GetYSizeEx(LayerIndex);
LTDC_Layer_InitStruct.LTDC_HorizontalStart = HSTART;
LTDC_Layer_InitStruct.LTDC_HorizontalStop = (xSize + HSTART-1);
LTDC_Layer_InitStruct.LTDC_VerticalStart = VSTART;
LTDC_Layer_InitStruct.LTDC_VerticalStop = (ySize + VSTART-1);[/mw_shl_code]
[mw_shl_code=c,true]
[/mw_shl_code]
{
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;
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 / LL_M = 8 * 192 / 8 = 192MHz
*PLLLCDCLK = LLSAI_VCO / LLSAI_R = 192 / 3 = 64 Mhz
*LTDC clock frequency = LLLCDCLK / RCC_PLLSAIDivR = 64 / 2 = 32 Mhz
****************************************************************************
*/
RCC_PLLSAIConfig(192, 7, 3);
RCC_LTDCCLKDivConfig(RCC_PLLSAIDivR_Div4);
/* 使能PLLSAI时钟 */
RCC_PLLSAICmd(ENABLE);
/* 等待PLLSAI时钟 */
while(RCC_GetFlagStatus(RCC_FLAG_PLLSAIRDY) == RESET){}
/* Configure horizontal synchronization width */
LTDC_InitStruct.LTDC_HorizontalSync = 39;
/* Configure vertical synchronization height */
LTDC_InitStruct.LTDC_VerticalSync = 19;
/* Configure accumulated horizontal back porch */
LTDC_InitStruct.LTDC_AccumulatedHBP = 45;
/* Configure accumulated vertical back porch */
LTDC_InitStruct.LTDC_AccumulatedVBP = 22;
/* Configure accumulated active width */
LTDC_InitStruct.LTDC_AccumulatedActiveW = 845;
/* Configure accumulated active height */
LTDC_InitStruct.LTDC_AccumulatedActiveH = 502;
/* Configure total width */
LTDC_InitStruct.LTDC_TotalWidth = 1055;
/* Configure total height */
LTDC_InitStruct.LTDC_TotalHeigh = 524;
LTDC_Init(<DC_InitStruct);
LTDC_ITConfig(LTDC_IER_LIE,ENABLE);
NVIC_SetPriority(LTDC_IRQn,0);
NVIC_EnableIRQ(LTDC_IRQn);
DMA2D_ITConfig(DMA2D_CR_TCIE,ENABLE);
NVIC_SetPriority(DMA2D_IRQn,0);
NVIC_EnableIRQ(DMA2D_IRQn);
DMA2D->IFCR=(u32)DMA2D_IFSR_CTCIF;
LTDC_Layer_InitStruct.LTDC_HorizontalStart = 46; //46
// LTDC_Layer_InitStruct.LTDC_HorizontalStart = 70;
// LTDC_Layer_InitStruct.LTDC_HorizontalStop = (480 + 43 - 1);
LTDC_Layer_InitStruct.LTDC_HorizontalStop = (800 + 46 - 1);
LTDC_Layer_InitStruct.LTDC_VarticalStart = 23;//23
// LTDC_Layer_InitStruct.LTDC_VerticalStop = (272 + 12 - 1);
LTDC_Layer_InitStruct.LTDC_VerticalStop = (480 + 23 - 1);
/* ixel 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);
LTDC_Layer_InitStruct.LTDC_CFBLineLength = ((800 * 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:
 itch = Active high width x number of bytes per pixel
*/
// LTDC_Layer_InitStruct.LTDC_CFBPitch = (480 * 2);
LTDC_Layer_InitStruct.LTDC_CFBPitch = (800 * 2);
/* configure the number of lines */
// LTDC_Layer_InitStruct.LTDC_CFBLineNumber = 272;
LTDC_Layer_InitStruct.LTDC_CFBLineNumber = 480;
/* Input Address configuration */
LTDC_Layer_InitStruct.LTDC_CFBStartAdress = LCD_FRAME_BUFFER;
LTDC_LayerInit(LTDC_Layer1, <DC_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, <DC_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();
}
一周热门 更多>