stm32 TFTLCD驱动原理(三)
来源:互联网 发布:移动蜂窝数据是什么 编辑:程序博客网 时间:2024/06/01 10:44
代码的实现
(1)
首先是对 TFTLCD 进行引脚初始化
static void LCD_GPIO_Config ( void ){GPIO_InitTypeDef GPIO_InitStructure; /* 使能复用IO时钟:复用为fsmc功能 */RCC_APB2PeriphClockCmd ( RCC_APB2Periph_AFIO, ENABLE ); /* 使能FSMC对应相应管脚时钟 */RCC_APB2PeriphClockCmd ( RCC_APB2Periph_GPIOD | RCC_APB2Periph_GPIOE, ENABLE ); FSMC_LCD_CS_APBxClock_FUN ( FSMC_LCD_CS_CLK, ENABLE ); FSMC_LCD_DC_APBxClock_FUN ( FSMC_LCD_DC_CLK, ENABLE ); FSMC_LCD_BK_APBxClock_FUN ( FSMC_LCD_BK_CLK, ENABLE ); /* 配置FSMC相对应的数据线,FSMC-D0~D15: PD 14 15 0 1,PE 7 8 9 10 11 12 13 14 15,PD 8 9 10 */GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0 | GPIO_Pin_1 | GPIO_Pin_8 | GPIO_Pin_9 | GPIO_Pin_10 | GPIO_Pin_14 | GPIO_Pin_15;GPIO_Init ( GPIOD, & GPIO_InitStructure );GPIO_InitStructure.GPIO_Pin = GPIO_Pin_7 | GPIO_Pin_8 | GPIO_Pin_9 | GPIO_Pin_10 | GPIO_Pin_11 | GPIO_Pin_12 | GPIO_Pin_13 | GPIO_Pin_14 | GPIO_Pin_15;GPIO_Init ( GPIOE, & GPIO_InitStructure ); /* 配置FSMC相对应的控制线 * PD4-FSMC_NOE :LCD-RD * PD5-FSMC_NWE :LCD-WR * PG12-FSMC_NE4 :LCD-CS * PF0-FSMC_A0 :LCD-DC */GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;GPIO_InitStructure.GPIO_Pin = GPIO_Pin_4; GPIO_Init (GPIOD, & GPIO_InitStructure );GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5; GPIO_Init (GPIOD, & GPIO_InitStructure ); GPIO_InitStructure.GPIO_Pin = FSMC_LCD_CS_PIN; GPIO_Init ( FSMC_LCD_CS_PORT, & GPIO_InitStructure ); GPIO_InitStructure.GPIO_Pin = FSMC_LCD_DC_PIN; GPIO_Init ( FSMC_LCD_DC_PORT, & GPIO_InitStructure ); /* 配置LCD背光控制管脚BK*/GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;GPIO_InitStructure.GPIO_Speed = GPIO_Speed_10MHz; GPIO_InitStructure.GPIO_Pin = FSMC_LCD_BK_PIN; GPIO_Init ( FSMC_LCD_BK_PORT, & GPIO_InitStructure ); /* 初始化时先不开背光 */ GPIO_ResetBits(FSMC_LCD_BK_PORT,FSMC_LCD_BK_PIN);}
FSMC模式配置以及时序
/** * 函数功能: LCD FSMC 模式配置 * 输入参数: 无 * 返 回 值: 无 * 说 明:读写使用相同时间配置 */static void LCD_FSMC_Config ( void ){FSMC_NORSRAMInitTypeDef FSMC_NORSRAMInitStructure;FSMC_NORSRAMTimingInitTypeDef fsmc_lcd; /* 使能FSMC时钟*/RCC_AHBPeriphClockCmd ( RCC_AHBPeriph_FSMC, ENABLE );fsmc_lcd.FSMC_AddressSetupTime = 0x02; //地址建立时间fsmc_lcd.FSMC_AddressHoldTime = 0x00; //地址保持时间fsmc_lcd.FSMC_DataSetupTime = 0x05; //数据建立时间fsmc_lcd.FSMC_BusTurnAroundDuration = 0x00;fsmc_lcd.FSMC_CLKDivision = 0x00;fsmc_lcd.FSMC_DataLatency = 0x00;fsmc_lcd.FSMC_AccessMode = FSMC_AccessMode_B; //模式B比较适用于LCDFSMC_NORSRAMInitStructure.FSMC_Bank = FSMC_LCD_BACKx;FSMC_NORSRAMInitStructure.FSMC_DataAddressMux = FSMC_DataAddressMux_Disable;FSMC_NORSRAMInitStructure.FSMC_MemoryType = FSMC_MemoryType_NOR;FSMC_NORSRAMInitStructure.FSMC_MemoryDataWidth = FSMC_MemoryDataWidth_16b;FSMC_NORSRAMInitStructure.FSMC_BurstAccessMode = FSMC_BurstAccessMode_Disable;FSMC_NORSRAMInitStructure.FSMC_WaitSignalPolarity = FSMC_WaitSignalPolarity_Low;FSMC_NORSRAMInitStructure.FSMC_WrapMode = FSMC_WrapMode_Disable;FSMC_NORSRAMInitStructure.FSMC_WaitSignalActive = FSMC_WaitSignalActive_BeforeWaitState;FSMC_NORSRAMInitStructure.FSMC_WriteOperation = FSMC_WriteOperation_Enable;FSMC_NORSRAMInitStructure.FSMC_WaitSignal = FSMC_WaitSignal_Disable;FSMC_NORSRAMInitStructure.FSMC_ExtendedMode = FSMC_ExtendedMode_Disable;FSMC_NORSRAMInitStructure.FSMC_WriteBurst = FSMC_WriteBurst_Disable;FSMC_NORSRAMInitStructure.FSMC_ReadWriteTimingStruct = & fsmc_lcd;FSMC_NORSRAMInitStructure.FSMC_WriteTimingStruct = & fsmc_lcd; FSMC_NORSRAMInit ( & FSMC_NORSRAMInitStructure ); /* 使能 FSMC_Bank1_NORSRAM4 */FSMC_NORSRAMCmd ( FSMC_LCD_BACKx, ENABLE ); }
可以看出对LCD的操作转化为对地址的操作
/* 宏定义 --------------------------------------------------------------------*//******************************************************************************2^26 =0X0400 0000 = 64MB,每个 BANK 有4*64MB = 256MB64MB:FSMC_Bank1_NORSRAM1:0X6000 0000 ~ 0X63FF FFFF64MB:FSMC_Bank1_NORSRAM2:0X6400 0000 ~ 0X67FF FFFF64MB:FSMC_Bank1_NORSRAM3:0X6800 0000 ~ 0X6BFF FFFF64MB:FSMC_Bank1_NORSRAM4:0X6C00 0000 ~ 0X6FFF FFFF选择BANK1-BORSRAM4 连接 TFT,地址范围为0X6C00 0000 ~ 0X6FFF FFFFYS-F1P开发板选择 FSMC_A0 接LCD的DC(寄存器/数据选择)脚寄存器基地址 = 0X6C00 0000RAM基地址 = 0X6C00 0002 = 0X6C00 0000+(1<<(0+1))如果电路设计时选择不同的地址线时,地址要重新计算 *******************************************************************************//******************************* ILI9488 显示屏的 FSMC 参数定义 ***************/#define FSMC_LCD_CMD ((uint32_t)0x6C000000) //FSMC_Bank1_NORSRAM1用于LCD命令操作的地址#define FSMC_LCD_DATA ((uint32_t)0x6C000002) //FSMC_Bank1_NORSRAM1用于LCD数据操作的地址 #define LCD_WRITE_CMD(x) *(__IO uint16_t *)FSMC_LCD_CMD = x #define LCD_WRITE_DATA(x) *(__IO uint16_t *)FSMC_LCD_DATA = x#define LCD_READ_DATA() *(__IO uint16_t *)FSMC_LCD_DATA
模块的初始化操作。
/** * 函数功能: 液晶模组初始化 * 输入参数: 无 * 返 回 值: 无 * 说 明:无 */uint32_t BSP_LCD_Init(void){LCD_GPIO_Config();LCD_FSMC_Config(); lcd_id=LCD_ReadID(); if(lcd_id==0x548066 || lcd_id==0x8066) { ILI9488_REG_Config(); } LCD_Clear(0,0,LCD_DEFAULT_WIDTH,LCD_DEFAULT_HEIGTH,BLACK); LCD_DELAY(2000); return lcd_id;}
显示屏的基本操作函数
* 扩展变量 ------------------------------------------------------------------*//* 函数声明 ------------------------------------------------------------------*/uint32_t BSP_LCD_Init(void);void LCD_SetDirection(uint8_t ucOtion);void LCD_OpenWindow(uint16_t usX,uint16_t usY,uint16_t usWidth,uint16_t usHeight);void LCD_Clear(uint16_t usX,uint16_t usY,uint16_t usWidth,uint16_t usHeight,uint16_t usColor);void LCD_SetPointPixel(uint16_t usX,uint16_t usY,uint16_t usColor);uint16_t LCD_GetPointPixel(uint16_t usX,uint16_t usY);void LCD_DrawLine(uint16_t usX1,uint16_t usY1,uint16_t usX2,uint16_t usY2,uint16_t usColor);void LCD_DrawRectangle(uint16_t usX_Start,uint16_t usY_Start, uint16_t usWidth,uint16_t usHeight,uint16_t usColor,uint8_t ucFilled);void LCD_DrawCircle(uint16_t usX_Center,uint16_t usY_Center,uint16_t usRadius,uint16_t usColor,uint8_t ucFilled);void LCD_DispChar_EN(uint16_t usX,uint16_t usY,const char cChar,uint16_t usColor_Background,uint16_t usColor_Foreground,USB_FONT_Typdef font);void LCD_DispString_EN(uint16_t usX,uint16_t usY,const char *pStr,uint16_t usColor_Background,uint16_t usColor_Foreground,USB_FONT_Typdef font);#endif /* __BSP_LCD_H__ */
资料地址:链接:http://pan.baidu.com/s/1qXIV8ny 密码:9o4k
阅读全文
0 0
- stm32 TFTLCD驱动原理(三)
- stm32 TFTLCD驱动原理(一)
- stm32 TFTLCD驱动原理(二)
- STM32系列第14篇--TFTLCD驱动原理
- STM32驱动ILI9341控制器控制TFTLCD显示
- STM32 FSMC驱动TFTLCD 难点解析
- TFTLCD原理与驱动与指令介绍
- TFTLCD原理与驱动与指令介绍
- 基于STM32的OLED与TFTLCD详解1(IC驱动及FSMC初探)
- stm32寄存器之TFTLCD
- stm32 FSMC-TFTLCD显示
- FSMC驱动TFTLCD原理,时序和寄存器介绍
- S3C2440 TFTLCD驱动详解
- TFTlcd显示屏驱动
- STM32学习笔记一一TFTLCD 显示
- STM32神舟III号 驱动直流电机学习(三 )
- stm32(三) STM32(STM32F217XX) 分段程序下载以及其运行原理
- stm32(三) STM32(STM32F217XX) 分段程序下载以及其运行原理
- 匈牙利算法——最大匹配问题(具体例程)—— 过山车问题、奶牛选择问题产奶、飞行员匹配
- TCP的那些事(下)
- 【Java学习笔记之二十六】深入理解Java匿名内部类
- python中mro中的C3算法
- 2542: 弟弟的作业
- stm32 TFTLCD驱动原理(三)
- eclipse配置工作区间问题
- 函数式编程的数据结构
- javaee学习日记之java基础之异常
- HDU 5873Football Games
- 实现文件图片浏览功能,并把路径输入文本框
- 取2的补码
- 决策树中的熵(一)
- LeetCode.36 Valid Sudoku