怎么创建网站充值和提现账号,wordpress 正在建设插件,深圳系统开发高端网站建设,内蒙古兴泰建设集团信息化网站前言 #xff08;1#xff09;本系列是基于STM32的项目笔记#xff0c;内容涵盖了STM32各种外设的使用#xff0c;由浅入深。 #xff08;2#xff09;小编使用的单片机是STM32F105RCT6#xff0c;项目笔记基于小编的实际项目#xff0c;但是博客中的内容适用于各种单片…前言 1本系列是基于STM32的项目笔记内容涵盖了STM32各种外设的使用由浅入深。 2小编使用的单片机是STM32F105RCT6项目笔记基于小编的实际项目但是博客中的内容适用于各种单片机开发的同学学习和使用。 学习目标 本章有五个任务 了解关于TFTLCD液晶屏的硬件接口学习和了解STM32 DMA驱动TFTLCD液晶屏的硬件接口初始化LCD液晶初始化TFTLCD液晶屏代码移植和显示测试 TFTLCD液晶屏硬件电路分析 接口说明TFTLCD液晶屏是连接到了单片机的SPI3接口。 TFTDIO ---- PB5 SPI3-MOSI 数据发送管脚 SPI硬件控制 TFTCMD---- PB4 SPI3-MISO 数据/指令控制脚 TFTCLK ----- PB3 SPI3-SCK 数据发送时钟脚 SPI硬件控制 CS ------PB6 片选脚位 LEDA_EN— PC10 LCD屏背光控制脚 FTFRES — PA15 LCD复位脚 电路设计说明 ● 硬件电路设计是参考液晶屏官方给的参考资料设计的。基本是按照芯片资料照抄过来即可 ● 为了提高液晶屏的刷屏效率我们选择了SPI3接口。采用单线模式 ● DIO CLK 必须固定连接 MOSI SCK 其他管脚可以连任意IO口 TFTLCD液晶屏初始化
hal_tftlcd.c 代码
#include hal_tftlcd.h
#include stm32F10x.h
//#include lcd_font.h//-----------------LCD端口定义----------------
#define LCD_SCLK_Clr() GPIO_ResetBits(GPIOB,GPIO_Pin_3)//SCLSCLK
#define LCD_SCLK_Set() GPIO_SetBits(GPIOB,GPIO_Pin_3)#define LCD_MOSI_Clr() GPIO_ResetBits(GPIOB,GPIO_Pin_5)//SDAMOSI
#define LCD_MOSI_Set() GPIO_SetBits(GPIOB,GPIO_Pin_5)#define LCD_DC_Clr() GPIO_ResetBits(GPIOB,GPIO_Pin_4)//DC
#define LCD_DC_Set() GPIO_SetBits(GPIOB,GPIO_Pin_4)#define LCD_CS_Clr() GPIO_ResetBits(GPIOB,GPIO_Pin_6)//CS
#define LCD_CS_Set() GPIO_SetBits(GPIOB,GPIO_Pin_6)#define LCD_RES_Clr() GPIO_ResetBits(GPIOA,GPIO_Pin_15)//RES
#define LCD_RES_Set() GPIO_SetBits(GPIOA,GPIO_Pin_15)#define LCD_BLK_Clr() GPIO_ResetBits(GPIOC,GPIO_Pin_10)//BLK
#define LCD_BLK_Set() GPIO_SetBits(GPIOC,GPIO_Pin_10)void hal_tftlcdConfig(void)
{SPI_InitTypeDef SPI_InitStructure;GPIO_InitTypeDef GPIO_InitStructure;DMA_InitTypeDef DMA_InitStructure;//DMA初始化结构体RCC_APB1PeriphClockCmd(RCC_APB1Periph_SPI3, ENABLE);RCC_AHBPeriphClockCmd(RCC_AHBPeriph_DMA2, ENABLE); RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA|RCC_APB2Periph_GPIOB|RCC_APB2Periph_GPIOC|RCC_APB2Periph_AFIO, ENABLE); //相关IO的初始化GPIO_PinRemapConfig(GPIO_Remap_SWJ_JTAGDisable, ENABLE);//RES-PA15GPIO_InitStructure.GPIO_Pin GPIO_Pin_15; GPIO_InitStructure.GPIO_Mode GPIO_Mode_Out_PP; //推挽输出GPIO_InitStructure.GPIO_Speed GPIO_Speed_50MHz;//速度50MHzGPIO_Init(GPIOA, GPIO_InitStructure); //初始化GPIOAGPIO_SetBits(GPIOA,GPIO_Pin_15);//CMD-PB4//CS-PB6GPIO_InitStructure.GPIO_Pin GPIO_Pin_4|GPIO_Pin_6; GPIO_InitStructure.GPIO_Mode GPIO_Mode_Out_PP; //推挽输出GPIO_InitStructure.GPIO_Speed GPIO_Speed_50MHz;//速度50MHzGPIO_Init(GPIOB, GPIO_InitStructure); //初始化GPIOA GPIO_SetBits(GPIOB,GPIO_Pin_4|GPIO_Pin_6);//BLK-PC10GPIO_InitStructure.GPIO_Pin GPIO_Pin_10; GPIO_InitStructure.GPIO_Mode GPIO_Mode_Out_PP; //推挽输出GPIO_InitStructure.GPIO_Speed GPIO_Speed_50MHz;//速度50MHzGPIO_Init(GPIOC, GPIO_InitStructure); //初始化GPIOA GPIO_ResetBits(GPIOC,GPIO_Pin_10);//CLK-PB3//MOSI-PB5GPIO_InitStructure.GPIO_Pin GPIO_Pin_3 |GPIO_Pin_5;GPIO_InitStructure.GPIO_Speed GPIO_Speed_50MHz;GPIO_InitStructure.GPIO_Mode GPIO_Mode_AF_PP;GPIO_Init(GPIOB, GPIO_InitStructure); /* SPI3 configuration */ SPI_InitStructure.SPI_Direction SPI_Direction_1Line_Tx; //SPI1设置为单线SPI_InitStructure.SPI_Mode SPI_Mode_Master; //设置SPI1为主模式SPI_InitStructure.SPI_DataSize SPI_DataSize_8b; //SPI发送接收8位帧结构SPI_InitStructure.SPI_CPOL SPI_CPOL_Low; //串行时钟在不操作时时钟为高电平SPI_InitStructure.SPI_CPHA SPI_CPHA_1Edge; //第二个时钟沿开始采样数据SPI_InitStructure.SPI_NSS SPI_NSS_Soft; //NSS信号由软件使用SSI位管理SPI_InitStructure.SPI_BaudRatePrescaler SPI_BaudRatePrescaler_2; //定义波特率预分频的值:波特率预分频值为8SPI_InitStructure.SPI_FirstBit SPI_FirstBit_MSB; //数据传输从MSB位开始SPI_InitStructure.SPI_CRCPolynomial 7; //CRC值计算的多项式SPI_Init(SPI3, SPI_InitStructure);//使能DMA发送DMA_DeInit(DMA2_Channel2); DMA_InitStructure.DMA_PeripheralBaseAddr (u32)SPI3-DR; //数据传输目标地址//数据缓存地址DMA_InitStructure.DMA_DIR DMA_DIR_PeripheralDST; //外设作为数据传输的目的地DMA_InitStructure.DMA_BufferSize 1024; //发送Buff数据大小DMA_InitStructure.DMA_PeripheralInc DMA_PeripheralInc_Disable; //设置外设地址是否递增DMA_InitStructure.DMA_MemoryInc DMA_MemoryInc_Enable; //设置内存地址是否递增DMA_InitStructure.DMA_PeripheralDataSize DMA_PeripheralDataSize_Byte; //外设数据宽度为8位DMA_InitStructure.DMA_MemoryDataSize DMA_MemoryDataSize_Byte; //内存数据宽度为8位 DMA_InitStructure.DMA_Mode DMA_Mode_Normal; //普通缓存模式DMA_InitStructure.DMA_Priority DMA_Priority_Medium; //高优先级DMA_InitStructure.DMA_M2M DMA_M2M_Disable; //禁止DMA2个内存相互访问DMA_Init(DMA2_Channel2, DMA_InitStructure); //初始化DMA,SPI在DMA1的通道2SPI_I2S_DMACmd(SPI3,SPI_I2S_DMAReq_Tx,ENABLE); /使能SPI2 DMA发送功能*/ SPI_Cmd(SPI3, ENABLE);//使能SPI2
}// SPI3 DMA发送
void DMA_SPI3_TX(unsigned char *buffer,unsigned short len)
{DMA2-IFCR |(0xf4); //清除通道2上面所有的标志位DMA2_Channel2-CNDTRlen; //设置要传输的数据长度DMA2_Channel2-CMAR(u32)buffer; //设置RAM缓冲区地址DMA2_Channel2-CCR|0x1; ///启动DMAwhile(!(DMA2-ISR(15)));///等待数据数据传输完成DMA2_Channel2-CCR (uint32_t)~0x1;//关闭DMA
}void LCD_Writ_Bus(unsigned char dat)
{ LCD_CS_Clr();DMA_SPI3_TX(dat,1);
}/******************************************************************************函数说明LCD写入数据入口数据dat 写入的数据返回值 无
******************************************************************************/
void LCD_WR_DATA8(unsigned char dat)
{LCD_Writ_Bus(dat);
}/******************************************************************************函数说明LCD写入数据入口数据dat 写入的数据返回值 无
******************************************************************************/
void LCD_WR_DATA(unsigned short dat)
{unsigned char d[2];d[0] dat8;d[1] dat;DMA_SPI3_TX(d[0],2);
}/******************************************************************************函数说明LCD写入命令入口数据dat 写入的命令返回值 无
******************************************************************************/
void LCD_WR_REG(unsigned char dat)
{LCD_DC_Clr();//写命令LCD_Writ_Bus(dat);LCD_DC_Set();//写数据
}void hal_Oled_Display_on(void)
{LCD_BLK_Set();
}void hal_Oled_Display_off(void)
{LCD_BLK_Clr();
}
///void hal_oled_RestH(void)
{LCD_RES_Set();
}
void hal_oled_RestL(void)
{LCD_RES_Clr();
}
hal_tftlcd.h 代码
#ifndef ____HAL_TFTLCD_H_
#define ____HAL_TFTLCD_H_void hal_tftlcdConfig(void);void LCD_WR_REG(unsigned char dat);
void LCD_WR_DATA8(unsigned char dat);
void LCD_WR_DATA(unsigned short dat);
void DMA_SPI3_TX(unsigned char *buffer,unsigned short len);void hal_Oled_Display_on(void);
void hal_Oled_Display_off(void);
void hal_oled_RestH(void);
void hal_oled_RestL(void);
#endif
代码分析
hal_tftlcd.c 包括
● TFTLCD液晶屏通讯接口初始化
● TFTLCD通过DMA数据发送函数
● TFTLCD液晶屏其他端口控制函数
TFTLCD SP3接口初始化流程
➢ 定义TFTLCD通讯的接口
//-----------------LCD端口定义----------------
#define LCD_SCLK_Clr() GPIO_ResetBits(GPIOB,GPIO_Pin_3)//SCLSCLK
#define LCD_SCLK_Set() GPIO_SetBits(GPIOB,GPIO_Pin_3)#define LCD_MOSI_Clr() GPIO_ResetBits(GPIOB,GPIO_Pin_5)//SDAMOSI
#define LCD_MOSI_Set() GPIO_SetBits(GPIOB,GPIO_Pin_5)#define LCD_DC_Clr() GPIO_ResetBits(GPIOB,GPIO_Pin_4)//DC
#define LCD_DC_Set() GPIO_SetBits(GPIOB,GPIO_Pin_4)#define LCD_CS_Clr() GPIO_ResetBits(GPIOB,GPIO_Pin_6)//CS
#define LCD_CS_Set() GPIO_SetBits(GPIOB,GPIO_Pin_6)#define LCD_RES_Clr() GPIO_ResetBits(GPIOA,GPIO_Pin_15)//RES
#define LCD_RES_Set() GPIO_SetBits(GPIOA,GPIO_Pin_15)#define LCD_BLK_Clr() GPIO_ResetBits(GPIOC,GPIO_Pin_10)//BLK
#define LCD_BLK_Set() GPIO_SetBits(GPIOC,GPIO_Pin_10)
➢ 打开相关时钟
RCC_APB1PeriphClockCmd(RCC_APB1Periph_SPI3, ENABLE);
RCC_AHBPeriphClockCmd(RCC_AHBPeriph_DMA2, ENABLE);
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA|RCC_APB2Periph_GPIOB |RCC_APB2Periph_GPIOC | RCC_APB2Periph_AFIO, ENABLE); //相关IO的初始化GPIO_PinRemapConfig(GPIO_Remap_SWJ_JTAGDisable, ENABLE);//打开端口重映射PB3、PB4端口默认的功能不是SPI3是JTAG所以要对端口重映射让它们具备SPI3的功能➢ 初始化TFTLCD 液晶屏 和SPI3相关的GPIO口 //CMD-PB4//CS-PB6GPIO_InitStructure.GPIO_Pin GPIO_Pin_4|GPIO_Pin_6; GPIO_InitStructure.GPIO_Mode GPIO_Mode_Out_PP; //推挽输出GPIO_InitStructure.GPIO_Speed GPIO_Speed_50MHz;//速度50MHzGPIO_Init(GPIOB, GPIO_InitStructure); //初始化GPIOA GPIO_SetBits(GPIOB,GPIO_Pin_4|GPIO_Pin_6);//BLK-PC10GPIO_InitStructure.GPIO_Pin GPIO_Pin_10; GPIO_InitStructure.GPIO_Mode GPIO_Mode_Out_PP; //推挽输出GPIO_InitStructure.GPIO_Speed GPIO_Speed_50MHz;//速度50MHzGPIO_Init(GPIOC, GPIO_InitStructure); //初始化GPIOA GPIO_ResetBits(GPIOC,GPIO_Pin_10);//CLK-PB3//MOSI-PB5GPIO_InitStructure.GPIO_Pin GPIO_Pin_3 |GPIO_Pin_5;GPIO_InitStructure.GPIO_Speed GPIO_Speed_50MHz;GPIO_InitStructure.GPIO_Mode GPIO_Mode_AF_PP;GPIO_Init(GPIOB, GPIO_InitStructure);
➢ 初始化SPI3相关参数
/* SPI3 configuration */
SPI_InitStructure.SPI_Direction SPI_Direction_1Line_Tx; //SPI1设置为单线
SPI_InitStructure.SPI_Mode SPI_Mode_Master; //设置SPI1为主模式
SPI_InitStructure.SPI_DataSize SPI_DataSize_8b; //SPI发送接收8位帧结构
SPI_InitStructure.SPI_CPOL SPI_CPOL_High; //串行时钟在不操作时时钟为高电平
SPI_InitStructure.SPI_CPHA SPI_CPHA_2Edge; //第二个时钟沿开始采样数据
SPI_InitStructure.SPI_NSS SPI_NSS_Soft; //NSS信号由软件使用SSI位管理
SPI_InitStructure.SPI_BaudRatePrescaler SPI_BaudRatePrescaler_2; //定义波特率预分频的值:波特率预分频值为8
SPI_InitStructure.SPI_FirstBit SPI_FirstBit_MSB; //数据传输从MSB位开始
SPI_InitStructure.SPI_CRCPolynomial 7; //CRC值计算的多项式
SPI_Init(SPI3, SPI_InitStructure);
➢ 配置SPI3 DMA功能。
DMA介绍
直接存储器存取(DMA)用来提供在外设和存储器之间或者存储器和存储器之间的高速数据传输。无须CPU干预数据可以通过DMA快速地移动这就节省了CPU的资源来做其他操作。两个DMA控制器有12个通道(DMA1有7个通道DMA2有5个通道)每个通道专门用来管理来自于一个或多个外设对存储器访问的请求。还有一个仲裁器来协调各个DMA请求的优先权。 总之当我们的功能中涉及数据传输功能时例如ADC、DMA、USART等为了使数据传输更快可以在数据传输中加上DMA功能使能DMA发送或接收。 DMA1 各个通道对应表: DMA2 各个通道对应表 我们项目用到是DMA2的发送功能因为我们只需要对TFTLCD显示屏发送数据。
//使能DMA发送
DMA_DeInit(DMA2_Channel2);
DMA_InitStructure.DMA_PeripheralBaseAddr (u32)SPI3-DR; //数据传输目标地址
DMA_InitStructure.DMA_DIR DMA_DIR_PeripheralDST; 数据传输方向从内存读取发送到外设
DMA_InitStructure.DMA_BufferSize 1024; //发送Buff数据大小
DMA_InitStructure.DMA_PeripheralInc DMA_PeripheralInc_Disable; //设置外设地址是否递增
DMA_InitStructure.DMA_MemoryInc DMA_MemoryInc_Enable; //设置内存地址是否递增
DMA_InitStructure.DMA_PeripheralDataSize DMA_PeripheralDataSize_Byte; //外设数据宽度为8位
DMA_InitStructure.DMA_MemoryDataSize DMA_MemoryDataSize_Byte; //内存数据宽度为8位 DMA_InitStructure.DMA_Mode DMA_Mode_Normal; //普通缓存模式
DMA_InitStructure.DMA_Priority DMA_Priority_Medium; //高优先级
DMA_InitStructure.DMA_M2M DMA_M2M_Disable; //禁止DMA2个内存相互访问
DMA_Init(DMA2_Channel2, DMA_InitStructure); //初始化DMA,SPI在DMA1的通道2SPI_I2S_DMACmd(SPI3,SPI_I2S_DMAReq_Tx,ENABLE); /使能SPI2 DMA发送功能*/
SPI_Cmd(SPI3, ENABLE);//使能SPI2
SPI3 DMA 数据发送函数
// SPI3 DMA发送
void DMA_SPI3_TX(unsigned char *buffer,unsigned short len)
{DMA2-IFCR |(0xf4); //清除通道2上面所有的标志位DMA2_Channel2-CNDTRlen; //设置要传输的数据长度DMA2_Channel2-CMAR(u32)buffer; //设置RAM缓冲区地址DMA2_Channel2-CCR|0x1; ///启动DMAwhile(!(DMA2-ISR(15))) ; ///等待数据数据传输完成DMA2_Channel2-CCR (uint32_t)~0x1;//关闭DMA
}
void LCD_Writ_Bus(unsigned char dat)
{ LCD_CS_Clr();DMA_SPI3_TX(dat,1);
}
其他LCD脚位控制函数
void hal_Oled_Display_on(void)
{LCD_BLK_Set();
}void hal_Oled_Display_off(void)
{LCD_BLK_Clr();
}void hal_oled_RestH(void)
{LCD_RES_Set();
}
void hal_oled_RestL(void)
{LCD_RES_Clr();
}
LCD指令和数据发送函数
/******************************************************************************函数说明LCD写入数据入口数据dat 写入的数据返回值 无
******************************************************************************/
void LCD_WR_DATA8(unsigned char dat)
{DMA_SPI3_TX(dat);
}/******************************************************************************函数说明LCD写入数据入口数据dat 写入的数据返回值 无
******************************************************************************/
void LCD_WR_DATA(unsigned short dat)
{unsigned char d[2];d[0] dat8;d[1] dat;DMA_SPI3_TX(d[0],2);
}/******************************************************************************函数说明LCD写入命令入口数据dat 写入的命令返回值 无
******************************************************************************/
void LCD_WR_REG(unsigned char dat)
{LCD_DC_Clr();//写命令LCD_Writ_Bus(dat);LCD_DC_Set();//写数据
}
以上内容都是hal_tftlcd.c 和hal_tftlcd.h文件内容都是有关于stm32外设 DMA SPI3 的初始化的函数.
以下内容将会是mt_tftlcd.c 和mt_tftlcd.h文件内容都是有关于模块 LCD屏幕 的初始化内容LCD屏幕模块的初始化都是基于stm32外设初始化的函数写的所以模块的初始化函数都是调用外设初始化函数组合而成的底层就是stm32外设的初始化函数模块的初始化函数和代码相对来说是应用层代码。所以mt文件中是应用层驱动代码hal文件中是底层驱动代码。
LCD屏幕初始化和LCD填充函数
LCD驱动和LCD相关其他驱动函数我们直接从官方参考的例程移植过来使用即可不需要自己深入的研究。
void mt_tftlcd_init(void)
LCD_Fill(unsigned short xsta,unsigned short ysta,unsigned short xend,unsigned short yend,unsigned short color)
注意不论是底层驱动代码还是应用层驱动代码都是基于配置STM32寄存器写的程序不要求深入研究会调用即可应用层驱动程序是基于底层驱动程序编程的。
mt_tftlcd.c代码
#include mt_Tftlcd.h
#include hal_tftlcd.hstatic void hal_tftlcd_Delay(unsigned int de);
unsigned char ColorBuf[640];void mt_tftlcd_init(void)
{hal_tftlcdConfig();//初始化GPIOhal_tftlcd_Delay(10000);hal_oled_RestL();//复位hal_tftlcd_Delay(10000);hal_oled_RestH();hal_tftlcd_Delay(100);//************* Start Initial Sequence **********//LCD_WR_REG(0x11);hal_tftlcd_Delay(10000);//delay_ms(100); //Delay 120msLCD_WR_REG(0X36);// Memory Access Controlif(USE_HORIZONTAL0)LCD_WR_DATA8(0x00);else if(USE_HORIZONTAL1)LCD_WR_DATA8(0xC0);else if(USE_HORIZONTAL2)LCD_WR_DATA8(0x70);else LCD_WR_DATA8(0xA0);LCD_WR_REG(0X3A);// LCD_WR_DATA8(0X03); //12bitLCD_WR_DATA8(0X05); //--------------------------------ST7789S Frame rate setting-------------------------LCD_WR_REG(0xb2);LCD_WR_DATA8(0x0c);LCD_WR_DATA8(0x0c);LCD_WR_DATA8(0x00);LCD_WR_DATA8(0x33);LCD_WR_DATA8(0x33);LCD_WR_REG(0xb7);LCD_WR_DATA8(0x35);//---------------------------------ST7789S Power setting-----------------------------LCD_WR_REG(0xbb);LCD_WR_DATA8(0x35);LCD_WR_REG(0xc0);LCD_WR_DATA8(0x2c);LCD_WR_REG(0xc2);LCD_WR_DATA8(0x01);LCD_WR_REG(0xc3);LCD_WR_DATA8(0x13);LCD_WR_REG(0xc4);LCD_WR_DATA8(0x20);LCD_WR_REG(0xc6);LCD_WR_DATA8(0x0f);LCD_WR_REG(0xca);LCD_WR_DATA8(0x0f);LCD_WR_REG(0xc8);LCD_WR_DATA8(0x08);LCD_WR_REG(0x55);LCD_WR_DATA8(0x90);LCD_WR_REG(0xd0);LCD_WR_DATA8(0xa4);LCD_WR_DATA8(0xa1);//--------------------------------ST7789S gamma setting------------------------------LCD_WR_REG(0xe0);LCD_WR_DATA8(0xd0);LCD_WR_DATA8(0x00);LCD_WR_DATA8(0x06);LCD_WR_DATA8(0x09);LCD_WR_DATA8(0x0b);LCD_WR_DATA8(0x2a);LCD_WR_DATA8(0x3c);LCD_WR_DATA8(0x55);LCD_WR_DATA8(0x4b);LCD_WR_DATA8(0x08);LCD_WR_DATA8(0x16);LCD_WR_DATA8(0x14);LCD_WR_DATA8(0x19);LCD_WR_DATA8(0x20);LCD_WR_REG(0xe1);LCD_WR_DATA8(0xd0);LCD_WR_DATA8(0x00);LCD_WR_DATA8(0x06);LCD_WR_DATA8(0x09);LCD_WR_DATA8(0x0b);LCD_WR_DATA8(0x29);LCD_WR_DATA8(0x36);LCD_WR_DATA8(0x54);LCD_WR_DATA8(0x4b);LCD_WR_DATA8(0x0d);LCD_WR_DATA8(0x16);LCD_WR_DATA8(0x14);LCD_WR_DATA8(0x21);LCD_WR_DATA8(0x20);LCD_WR_REG(0x29);hal_Oled_Display_on();//打开背光LCD_Fill(0,0,LCD_W,LCD_H,RED);
} /******************************************************************************函数说明设置起始和结束地址入口数据x1,x2 设置列的起始和结束地址y1,y2 设置行的起始和结束地址返回值 无
******************************************************************************/
void LCD_Address_Set(unsigned short x1,unsigned short y1,unsigned short x2,unsigned short y2)
{LCD_WR_REG(0x2a);//列地址设置LCD_WR_DATA(x12);LCD_WR_DATA(x22);LCD_WR_REG(0x2b);//行地址设置LCD_WR_DATA(y11);LCD_WR_DATA(y21);LCD_WR_REG(0x2c);//储存器写
}static void hal_tftlcd_Delay(unsigned int de)
{while(de--);
}void LCD_Fill(unsigned short xsta,unsigned short ysta,unsigned short xend,unsigned short yend,unsigned short color)
{ unsigned short i; LCD_Address_Set(xsta,ysta,xend-1,yend-1);//设置显示范围for(i0;ixend;i){ColorBuf[i] color8;ColorBuf[i] color;}for(iysta;iyend*2;i){ DMA_SPI3_TX(ColorBuf,xend);}
}
mt_Tftlcd.h代码
#ifndef ____MT_TFTLCD_H_
#define ____MT_TFTLCD_H_#define USE_HORIZONTAL 3 //设置横屏或者竖屏显示 0或1为竖屏 2或3为横屏#if USE_HORIZONTAL0||USE_HORIZONTAL1#define LCD_W 240
#define LCD_H 320#else
#define LCD_W 320
#define LCD_H 240
#endif///RGB565
#define WHITE 0xFFFF
#define BLACK 0x0000
#define BLUE 0x001F
#define BRED 0XF81F
#define GRED 0XFFE0
#define GBLUE 0X07FF
#define RED 0xF800
#define MAGENTA 0xF81F
#define GREEN 0x07E0
#define CYAN 0x7FFF
#define YELLOW 0xFFE0
#define BROWN 0XBC40 //棕色
#define BRRED 0XFC07 //棕红色
#define GRAY 0X8430 //灰色
#define DARKBLUE 0X01CF //深蓝色
#define LIGHTBLUE 0X7D7C //浅蓝色
#define GRAYBLUE 0X5458 //灰蓝色
#define LIGHTGREEN 0X841F //浅绿色
#define LGRAY 0XC618 //浅灰色(PANNEL),窗体背景色
#define LGRAYBLUE 0XA651 //浅灰蓝色(中间层颜色)
#define LBBLUE 0X2B12 //浅棕蓝色(选择条目的反色)enum
{FORTSIZE_12 12,FORTSIZE_16 16, FORTSIZE_24 24,FORTSIZE_32 32, FORTSIZE_48 48,
};#define HUE_LCD_FONT WHITE
#define HUE_LCD_BACK BLACK//YELLOW //BLACK//
#define HUE_FONT_BACK GRAYvoid mt_tftlcd_init(void);
void LCD_Fill(unsigned short xsta,unsigned short ysta,unsigned short xend,unsigned short yend,unsigned short color);
#endif
功能测试验证
LCD屏幕全屏显示黄色表示驱动完成OK。