saiav.win forum.php,【emWin实战教程V2.0】第4章 emWin5.xx的裸机方式移植(F4
//
/*
*********************************************************************************************************
* 下面的函数被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相关推荐
- [经验] 【emWin实战教程V2.0】第8章 emWin5.32模拟器的使用方法
8.1 初学者重要提示 1.模拟器使用的是5.32版本,如果SEGGER官网以后有更高版本的推出,使用方法是一样的. 2.模拟器的运行是采用的VC6.0精简版,大小仅16MB,支持XP系统,WIN7 ...
- 热烈庆祝《Vue.js 实战教程 V2.x(一)基础篇》上线了!
热烈庆祝<Vue.js 实战教程 V2.x(一)基础篇>上线了! 课程简介 课程地址:https://edu.csdn.net/course/detail/25641 机构名称:大华软件学 ...
- 【RTX操作系统教程】第6章 RTX操作系统源码方式移植
原文来源:http://forum.armfly.com/forum.php?mod=viewthread&tid=16616&highlight=RTX%B2%D9%D7%F7%CF ...
- micropython中文教程 嵌入式详细教程_MicroPython中文教程 v2.0 嵌入式详细教程 PDF 完整版...
给大家带来的一篇关于MicroPython相关的电子文档资源,介绍了关于MicroPython中文教程.MicroPython.嵌入式方面的内容,本书是由Python官网出版,格式为PDF,资源大小6 ...
- Fluent Operator v2.0 发布:Fluent Bit 新的部署方式——Fluent Bit Collector
2019 年 1 月 21 日,KubeSphere 社区为了满足以云原生的方式管理 Fluent Bit 的需求开发了 FluentBit Operator.此后产品不断迭代,在 2021 年 8 ...
- saiav.win forum.php,关于 DiscuzX3.4 UC_Server 本地文件包含漏洞
最近又发现discuz论坛被挂马了,决定好好研究一下discuz的漏洞,技术债始终要还是要还的 一.问题发现 快要睡觉的时候,突然收到一封邮件,发现服务器上的文件被篡改了,立即登录服务器,清空恶意文件 ...
- 慧联A8最新检测使用教程V2.0.3
有小伙伴反馈旧版本 TWS106.TWSVerification 软件无法检测慧联A8,如下方截图所示: 由于之前版本确实太低 1.0.5 或者 2.0.2 都无法检测慧联A8,需要安装 2.0.3 ...
- Unfiltered Audio Plugins Bundle for Mac(音频插件包)附破解教程 v2.0.0激活版
与大家分享一套Unfiltered Audio系列音频插件包 Unfiltered Audio Plugins Bundle for Mac 激活版.该插件包可以在Ableton Live,Logic ...
- mybatis实战教程(mybatis in action)之二:以接口的方式编程
前面一章,已经搭建好了eclipse,mybatis,mysql的环境,并且实现了一个简单的查询.请注意,这种方式是用SqlSession实例来直接执行已映射的SQL语句: session.selec ...
最新文章
- 第五周项目二-游戏中的角色类(1)
- (转)LCA模板(倍增法)
- 排查 CI Unable to load the requested file
- java model1和model2_Java项目(4)——探究两种开发模型的异同-Model1与Model2
- Ubuntu14.04 搜索不到WIFI或连接不上的解决方法。
- 我的挨踢人物传之又是一年找工作时
- fpgrowth算法实战 mlib_MLlib--FPGrowth算法
- 制作u盘winpe启动盘_微PE工具箱 (WePE),绿色纯净的WinPE启动盘/U盘重装系统工具...
- 极路由 刷linux,极路由3(HC5861)刷第三方固件Padavan完整教程
- 图灵社区python kindle_推送mobi至Kindle流程说明(简要操作)
- 悉尼大学计算机一年制硕士,悉尼大学一年制硕士
- 高考志愿填报选专业,女孩子适合的十大职业
- Appium从环境搭建到测试脚本编写(四)
- DES_3DES_AES_IDES_RSA密码算法比较
- 模式识别-从贝叶斯决策理论看模式分类
- Java SpringBoot Rest请求Post传实体类接收不到值的问题
- linux 不同用户时间,Linux时间子系统之(一):时间的基本概念
- 4.4OC10-内存管理2-set方法的内存管理
- oracle utl_file权限,Oracle内建包UTL_FILE使用说明
- 加载.node文件报错:no suitable image found. unknown file type, first eight bytes
热门文章
- python教程:ConfigParser模块使用教程
- 在Python列表中删除重复元素的几种方法,用起来真好用
- Python中shuffle() 函数的作用及用法
- python常用的十进制、16进制之间的转换
- Python基础教程:数据结构
- python文件读read()、readline()、readlines()对比
- go和java线程,Go的多线程和pthread或Java线程有什么区别?
- ubuntu禁用锁屏
- linux运行脚本报错:/bin/bash^M: bad interpreter: No such file or directory(dos2unix )(/bin/sh^M)(回车符、换行符)
- Make Them Equal 埃氏筛法(1200)