//

/*

*********************************************************************************************************

*                                     下面的函数被emWin所调用

*********************************************************************************************************

*/

/*

*********************************************************************************************************

*    函 数 名: LCD_ConfigLTDC

*    功能说明: 配置LTDC

*    形    参: 无

*    返 回 值: 无

*   笔    记:

*       LCD_TFT 同步时序配置(整理自官方做的一个截图,言简意赅):

*       ----------------------------------------------------------------------------

*

*                                                 Total Width

*                             <--------------------------------------------------->

*                       Hsync width HBP             Active Width                HFP

*                             <---><--><--------------------------------------><-->

*                         ____    ____|_______________________________________|____

*                             |___|   |                                       |    |

*                                     |                                       |    |

*                         __|         |                                       |    |

*            /|\\    /|\\  |            |                                       |    |

*             | VSYNC|   |            |                                       |    |

*             |Width\\|/  |__          |                                       |    |

*             |     /|\\     |         |                                       |    |

*             |  VBP |      |         |                                       |    |

*             |     \\|/_____|_________|_______________________________________|    |

*             |     /|\\     |         | / / / / / / / / / / / / / / / / / / / |    |

*             |      |      |         |/ / / / / / / / / / / / / / / / / / / /|    |

*    Total    |      |      |         |/ / / / / / / / / / / / / / / / / / / /|    |

*    Heigh    |      |      |         |/ / / / / / / / / / / / / / / / / / / /|    |

*             |Active|      |         |/ / / / / / / / / / / / / / / / / / / /|    |

*             |Heigh |      |         |/ / / / / / Active Display Area / / / /|    |

*             |      |      |         |/ / / / / / / / / / / / / / / / / / / /|    |

*             |      |      |         |/ / / / / / / / / / / / / / / / / / / /|    |

*             |      |      |         |/ / / / / / / / / / / / / / / / / / / /|    |

*             |      |      |         |/ / / / / / / / / / / / / / / / / / / /|    |

*             |      |      |         |/ / / / / / / / / / / / / / / / / / / /|    |

*             |     \\|/_____|_________|_______________________________________|    |

*             |     /|\\     |                                                      |

*             |  VFP |      |                                                      |

*            \\|/    \\|/_____|______________________________________________________|

*

*

*     每个LCD设备都有自己的同步时序值:

*     Horizontal Synchronization (Hsync)

*     Horizontal Back Porch (HBP)

*     Active Width

*     Horizontal Front Porch (HFP)

*

*     Vertical Synchronization (Vsync)

*     Vertical Back Porch (VBP)

*     Active Heigh

*     Vertical Front Porch (VFP)

*

*     LCD_TFT 窗口水平和垂直的起始以及结束位置 :

*     ----------------------------------------------------------------

*

*     HorizontalStart = (Offset_X + Hsync + HBP);

*     HorizontalStop  = (Offset_X + Hsync + HBP + Window_Width - 1);

*     VarticalStart   = (Offset_Y + Vsync + VBP);

*     VerticalStop    = (Offset_Y + Vsync + VBP + Window_Heigh - 1);

*

*********************************************************************************************************

*/

__IO uint16_t Width, Height, HSYNC_W, VSYNC_W, HBP, HFP, VBP, VFP;

void LCD_ConfigLTDC(void)

{

LTDC_InitTypeDef       LTDC_InitStruct;

LTDC_Layer_TypeDef     LTDC_Layerx;

/* 使能LTDC */

RCC_APB2PeriphClockCmd(RCC_APB2Periph_LTDC, ENABLE); //--------------(1)

/* 使能DMA2D */

RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_DMA2D, ENABLE); //--------------(2)

/* 配置LCD引脚 */

LCD429_AF_GPIOConfig();  //--------------(3)

/* 配置信号极性 */

LTDC_InitStruct.LTDC_HSPolarity = LTDC_HSPolarity_AL;   /* HSYNC 低电平有效 */  //--------------(4)

LTDC_InitStruct.LTDC_VSPolarity = LTDC_VSPolarity_AL;   /* VSYNC 低电平有效 */

LTDC_InitStruct.LTDC_DEPolarity = LTDC_DEPolarity_AL;   /* DE 低电平有效 */

LTDC_InitStruct.LTDC_PCPolarity = LTDC_PCPolarity_IPC;

/* 背景色 */

LTDC_InitStruct.LTDC_BackgroundRedValue = 0;    //--------------(5)

LTDC_InitStruct.LTDC_BackgroundGreenValue = 0;

LTDC_InitStruct.LTDC_BackgroundBlueValue = 0;

/*

LTDC时钟配置说明:

函数RCC_PLLSAIConfig的第一个参数是PLLSAI_N,第三个参数数PLLSAI_R。

函数RCC_LTDCCLKDivConfig的参数是RCC_PLLSAIDivR。

下面举一个例子:PLLSAI_N = 400, PLLSAI_R = 4  RCC_PLLSAIDivR = 2:

首先,输入时钟 PLLSAI_VCO Input = HSE_VALUE / PLL_M = 8M / 8 = 1MHz

输出时钟 PLLSAI_VCO Output  = PLLSAI_VCO Input * PLLSAI_N = 1 * 400 = 400 1MHz

PLLLCDCLK = PLLSAI_VCO Output / PLLSAI_R = 400 / 4 = 100 1MHz

最好,LTDC 时钟 = PLLLCDCLK / RCC_PLLSAIDivR = 100 / 2 = 50 1MHz

*/

/* 支持6种面板 */

switch (g_LcdType)   //--------------(6)

{

case LCD_35_480X320:   /* 3.5寸 480 * 320 */

RCC_PLLSAIConfig(429, 2,  4);

RCC_LTDCCLKDivConfig(RCC_PLLSAIDivR_Div8);

Width = 480;

Height = 272;

HSYNC_W = 10;

HBP = 20;

HFP = 20;

VSYNC_W = 20;

VBP = 20;

VFP = 20;

break;

case LCD_43_480X272:/* 4.3寸 480 * 272  选择LTDC输出20MHz,所有颜色深度都可以选择这个时钟频率 */

RCC_PLLSAIConfig(280, 2,  7);

RCC_LTDCCLKDivConfig(RCC_PLLSAIDivR_Div2);

Width = 480;

Height = 272;

HSYNC_W = 40;

HBP = 2;

HFP = 2;

VSYNC_W = 9;

VBP = 2;

VFP = 2;

break;

case LCD_50_480X272:        /* 5.0寸 480 * 272 */

RCC_PLLSAIConfig(429, 2,  4);

RCC_LTDCCLKDivConfig(RCC_PLLSAIDivR_Div8);

Width = 480;

Height = 272;

HSYNC_W = 40;

HBP = 2;

HFP = 2;

VSYNC_W = 9;

VBP = 2;

VFP = 2;

break;

case LCD_50_800X480:/* 5.0寸 800 * 480,24位或者32位色选择LTDC输出15MHz,16位或者8位30MHz */

RCC_PLLSAIConfig(420, 2,  7);

RCC_LTDCCLKDivConfig(RCC_PLLSAIDivR_Div4);

Width = 800;

Height = 480;

HSYNC_W = 96;

HBP = 10;

HFP = 10;

VSYNC_W = 2;

VBP = 10;

VFP = 10;

break;

//--------------(7)

case LCD_70_800X480:/* 7.0寸 800 * 480,24位或者32位色选择LTDC输出15MHz,16位或者8位30MHz*/

RCC_PLLSAIConfig(420, 2,  7);

RCC_LTDCCLKDivConfig(RCC_PLLSAIDivR_Div2);

#if 0

RCC_PLLSAIConfig(400, 2,  2);

RCC_LTDCCLKDivConfig(RCC_PLLSAIDivR_Div4);

#endif

Width = 800;

Height = 480;

HSYNC_W = 48;

HBP = 88;

HFP = 40;

VSYNC_W = 3;

VBP = 32;

VFP = 13;

break;

case LCD_70_1024X600:       /* 7.0寸 1024 * 600 */

LTDC_InitStruct.LTDC_HSPolarity = LTDC_HSPolarity_AL;   /* HSYNC 低电平有效 */

LTDC_InitStruct.LTDC_VSPolarity = LTDC_VSPolarity_AL;   /* VSYNC 低电平有效 */

LTDC_InitStruct.LTDC_DEPolarity = LTDC_DEPolarity_AL;   /* DE 低电平有效 */

LTDC_InitStruct.LTDC_PCPolarity = LTDC_PCPolarity_IIPC;

/* IPS 7寸 1024*600,  像素时钟频率范围 : 57 -- 65 --- 70.5MHz

PLLSAI_VCO Input   = HSE_VALUE / PLL_M = 8M / 4 = 2 Mhz

PLLSAI_VCO Output  = PLLSAI_VCO Input * PLLSAI_N =   2 * 429 = 858 Mhz

PLLLCDCLK = PLLSAI_VCO Output / PLLSAI_R = 858 / 4 = 214.5 Mhz

LTDC clock frequency = PLLLCDCLK / RCC_PLLSAIDivR = 214.5 / 4 = 53.625 Mhz

(429, 2, 4); RCC_PLLSAIDivR_Div4 实测像素时钟 = 53.7M

*/

RCC_PLLSAIConfig(429, 2, 6);

RCC_LTDCCLKDivConfig(RCC_PLLSAIDivR_Div4);

Width = 1024;

Height = 600;

HSYNC_W = 2;  /* =10时,显示错位,20时部分屏可以的,80时全部OK */

HBP = 157;

HFP = 160;

VSYNC_W = 2;

VBP = 20;

VFP = 12;

break;

default:

RCC_PLLSAIConfig(429, 2,  4);

RCC_LTDCCLKDivConfig(RCC_PLLSAIDivR_Div8);

Width = 800;

Height = 480;

HSYNC_W = 80; /* =10时,显示错位,20时部分屏可以的,80时全部OK */

HBP = 10;

HFP = 10;

VSYNC_W = 10;

VBP = 10;

VFP = 10;

break;

}

g_LcdWidth  = Width;        /* 显示屏分辨率-宽度 */  //--------------(8)

g_LcdHeight = Height;       /* 显示屏分辨率-高度 */

/* 使能 PLLSAI */

RCC_PLLSAICmd(ENABLE);   //--------------(9)

/* 等待完成 */

while(RCC_GetFlagStatus(RCC_FLAG_PLLSAIRDY) == RESET);

/* 配置LTDC的同步时序 */

LTDC_InitStruct.LTDC_HorizontalSync = HSYNC_W;

LTDC_InitStruct.LTDC_VerticalSync = VSYNC_W;

LTDC_InitStruct.LTDC_AccumulatedHBP = LTDC_InitStruct.LTDC_HorizontalSync + HBP;

LTDC_InitStruct.LTDC_AccumulatedVBP = LTDC_InitStruct.LTDC_VerticalSync + VBP;

LTDC_InitStruct.LTDC_AccumulatedActiveW = Width + LTDC_InitStruct.LTDC_AccumulatedHBP;

LTDC_InitStruct.LTDC_AccumulatedActiveH = Height + LTDC_InitStruct.LTDC_AccumulatedVBP;

LTDC_InitStruct.LTDC_TotalWidth = LTDC_InitStruct.LTDC_AccumulatedActiveW + HFP;

LTDC_InitStruct.LTDC_TotalHeigh = LTDC_InitStruct.LTDC_AccumulatedActiveH + VFP;

LTDC_Init(<DC_InitStruct); //--------------(10)

}

saiav.win forum.php,【emWin实战教程V2.0】第4章    emWin5.xx的裸机方式移植(F4相关推荐

  1. [经验] 【emWin实战教程V2.0】第8章 emWin5.32模拟器的使用方法

    8.1  初学者重要提示 1.模拟器使用的是5.32版本,如果SEGGER官网以后有更高版本的推出,使用方法是一样的. 2.模拟器的运行是采用的VC6.0精简版,大小仅16MB,支持XP系统,WIN7 ...

  2. 热烈庆祝《Vue.js 实战教程 V2.x(一)基础篇》上线了!

    热烈庆祝<Vue.js 实战教程 V2.x(一)基础篇>上线了! 课程简介 课程地址:https://edu.csdn.net/course/detail/25641 机构名称:大华软件学 ...

  3. 【RTX操作系统教程】第6章 RTX操作系统源码方式移植

    原文来源:http://forum.armfly.com/forum.php?mod=viewthread&tid=16616&highlight=RTX%B2%D9%D7%F7%CF ...

  4. micropython中文教程 嵌入式详细教程_MicroPython中文教程 v2.0 嵌入式详细教程 PDF 完整版...

    给大家带来的一篇关于MicroPython相关的电子文档资源,介绍了关于MicroPython中文教程.MicroPython.嵌入式方面的内容,本书是由Python官网出版,格式为PDF,资源大小6 ...

  5. Fluent Operator v2.0 发布:Fluent Bit 新的部署方式——Fluent Bit Collector

    2019 年 1 月 21 日,KubeSphere 社区为了满足以云原生的方式管理 Fluent Bit 的需求开发了 FluentBit Operator.此后产品不断迭代,在 2021 年 8 ...

  6. saiav.win forum.php,关于 DiscuzX3.4 UC_Server 本地文件包含漏洞

    最近又发现discuz论坛被挂马了,决定好好研究一下discuz的漏洞,技术债始终要还是要还的 一.问题发现 快要睡觉的时候,突然收到一封邮件,发现服务器上的文件被篡改了,立即登录服务器,清空恶意文件 ...

  7. 慧联A8最新检测使用教程V2.0.3

    有小伙伴反馈旧版本 TWS106.TWSVerification 软件无法检测慧联A8,如下方截图所示: 由于之前版本确实太低 1.0.5 或者 2.0.2 都无法检测慧联A8,需要安装 2.0.3 ...

  8. Unfiltered Audio Plugins Bundle for Mac(音频插件包)附破解教程 v2.0.0激活版

    与大家分享一套Unfiltered Audio系列音频插件包 Unfiltered Audio Plugins Bundle for Mac 激活版.该插件包可以在Ableton Live,Logic ...

  9. mybatis实战教程(mybatis in action)之二:以接口的方式编程

    前面一章,已经搭建好了eclipse,mybatis,mysql的环境,并且实现了一个简单的查询.请注意,这种方式是用SqlSession实例来直接执行已映射的SQL语句: session.selec ...

最新文章

  1. 第五周项目二-游戏中的角色类(1)
  2. (转)LCA模板(倍增法)
  3. 排查 CI Unable to load the requested file
  4. java model1和model2_Java项目(4)——探究两种开发模型的异同-Model1与Model2
  5. Ubuntu14.04 搜索不到WIFI或连接不上的解决方法。
  6. 我的挨踢人物传之又是一年找工作时
  7. fpgrowth算法实战 mlib_MLlib--FPGrowth算法
  8. 制作u盘winpe启动盘_微PE工具箱 (WePE),绿色纯净的WinPE启动盘/U盘重装系统工具...
  9. 极路由 刷linux,极路由3(HC5861)刷第三方固件Padavan完整教程
  10. 图灵社区python kindle_推送mobi至Kindle流程说明(简要操作)
  11. 悉尼大学计算机一年制硕士,悉尼大学一年制硕士
  12. 高考志愿填报选专业,女孩子适合的十大职业
  13. Appium从环境搭建到测试脚本编写(四)
  14. DES_3DES_AES_IDES_RSA密码算法比较
  15. 模式识别-从贝叶斯决策理论看模式分类
  16. Java SpringBoot Rest请求Post传实体类接收不到值的问题
  17. linux 不同用户时间,Linux时间子系统之(一):时间的基本概念
  18. 4.4OC10-内存管理2-set方法的内存管理
  19. oracle utl_file权限,Oracle内建包UTL_FILE使用说明
  20. 加载.node文件报错:no suitable image found. unknown file type, first eight bytes

热门文章

  1. python教程:ConfigParser模块使用教程
  2. 在Python列表中删除重复元素的几种方法,用起来真好用
  3. Python中shuffle() 函数的作用及用法
  4. python常用的十进制、16进制之间的转换
  5. Python基础教程:数据结构
  6. python文件读read()、readline()、readlines()对比
  7. go和java线程,Go的多线程和pthread或Java线程有什么区别?
  8. ubuntu禁用锁屏
  9. linux运行脚本报错:/bin/bash^M: bad interpreter: No such file or directory(dos2unix )(/bin/sh^M)(回车符、换行符)
  10. Make Them Equal 埃氏筛法(1200)