历史上的今天
今天是:2025年06月18日(星期三)
2019年06月18日 | stm32 TFTLCD驱动原理(三)
2019-06-18 来源:eefocus
代码的实现
(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比较适用于LCD
FSMC_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 = 256MB
64MB:FSMC_Bank1_NORSRAM1:0X6000 0000 ~ 0X63FF FFFF
64MB:FSMC_Bank1_NORSRAM2:0X6400 0000 ~ 0X67FF FFFF
64MB:FSMC_Bank1_NORSRAM3:0X6800 0000 ~ 0X6BFF FFFF
64MB:FSMC_Bank1_NORSRAM4:0X6C00 0000 ~ 0X6FFF FFFF
选择BANK1-BORSRAM4 连接 TFT,地址范围为0X6C00 0000 ~ 0X6FFF FFFF
YS-F1P开发板选择 FSMC_A0 接LCD的DC(寄存器/数据选择)脚
寄存器基地址 = 0X6C00 0000
RAM基地址 = 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
史海拾趣
|
求答疑!!!!windows 怎么向 linux 发送一个 .c文件,linux能完整接收编译? 我的目标是在C#平台自动生成一个目标.c文件,而编译工作要使用linux下的gcc编译我的目标.c文件,(考虑到windows下的cygwin编译出来的可执行文件在linux是不能跑的)我现在的问题是:怎么才能把windows下我的.c文件传给到linux编译????? 等待 ...… 查看全部问答> |
|
ISA ISA=Industry Standard Architecture (isa总线) Pin Name Description 引脚 名称 含义 A1 /I/O CH CK I/O channel check; active low=parity error A2 D7 Data bit 7 A3 D6 Data bit 6 A4 D5 Data bit 5 A5 D4 Data bit 4 A6 ...… 查看全部问答> |
|
问题有三: DOS下232串口编程和485串口编程有区别否,能通用吗? DOS下BC31写485通讯需要注意些什么? 有好点的类库推荐下吗? 谢谢!PS:我的双机是两个PC104… 查看全部问答> |
|
用595驱动16*16点阵遇到很奇怪的问题,实在没检查出问题,在线等 这是程序 #include sbit ser = P3^7; sbit OE = P3^6; sbit RCK = P3^5; sbit SCK = P3^4; sbit G1 = P2^0; sbit G2 = P2^1; char code tab[]= { 0x02,0x00,0x04,0x00,0x1F,0xFF,0xE0,0x00, ...… 查看全部问答> |
|
用CCSv4.0编译包含bios系统的工程,出现如下错误: fatal error: file \"D:/Program Files/Texas Instruments/bios_5_41_02_14/packages/ti/bios/lib/bios.a28FP<clk.o28FP>\" specifies ISA revision \"C28FPU32\", ...… 查看全部问答> |




