FMSC Demo应用中,使在库函数样例工程中使用选用: FSMC_Ex8080TFTLCD.uvprojx
实验展示如何初始化LCD接口与实现LCD并行驱动显示。
软件分为两个部分:
1、FSMC接口GPIO与FSMC接口参数初始化
2、LCD显示初始化与LCD显示
FSMC接口GPIO与FSMC接口参数初始化 void BSP_LCD_Configure()
{
initGPIO_LCD();
initFSMC();
LCDC_Init_Reg();
lcdFillColor(Black);
lcdBlcH();
}
① 在initGPIO_LCD()中实现LCD对应IO初始化 包括LCD对应nRST引脚,背光控制引脚,FSMC相关的片选,读写,数据/命令,数据D0~D15引脚的初始化。 ② 在initFSMC()中实现FSMC功能配置初始化
A. 写操作周期 B. 单个bit数据写入保持时间 C. 写操作时,地址线的建立时间 D. 读操作周期长度设置 E. 存储器数据总线位宽 F. 式选择:8080模式 G. 外接设备的内存大小 void initFSMC(void)
{
FSMC_InitTypeDef FSMC_InitStructure;
FSMC_NORSRAM_Bank_InitTypeDef FSMC_BankInitStructure;
RCC_AHB3PeriphClockCmd(RCC_AHB3ENR_FSMC, ENABLE);
FSMC_BankInitStructure.FSMC_SMReadPipe = 0;
FSMC_BankInitStructure.FSMC_ReadyMode = 0;
FSMC_BankInitStructure.FSMC_WritePeriod = 0x2;
FSMC_BankInitStructure.FSMC_WriteHoldTime = 1;
FSMC_BankInitStructure.FSMC_AddrSetTime = 3;
FSMC_BankInitStructure.FSMC_ReadPeriod = 0x1;
FSMC_BankInitStructure.FSMC_DataWidth = FSMC_DataWidth_16bits;
FSMC_NORSRAM_Bank_Init(&FSMC_BankInitStructure, FSMC_NORSRAM_BANK0);
FSMC_InitStructure.FSMC_Mode = FSMC_Mode_8080;
FSMC_InitStructure.FSMC_TimingRegSelect = FSMC_TimingRegSelect_0;
FSMC_InitStructure.FSMC_MemSize = FSMC_MemSize_64MB;
FSMC_InitStructure.FSMC_MemType = FSMC_MemType_NorSRAM;
FSMC_InitStructure.FSMC_AddrDataMode = FSMC_AddrDataMUX;
FSMC_NORSRAMInit(&FSMC_InitStructure);
}
LCD显示初始化
Bank0地址为0x60000000,0x80000=(0x01 << 19)则是地址线A18的偏移量。首先完成写CMD和DATA驱动:void lcdCmd(u8 cmd)
{
*(u16*)(0x60000000) = cmd;
}
////////////////////////////////////////////////////////////////////////////////
void lcdData(u8 dat)
{
*(u16*)(0x60000000 | (0x01 << 19)) = dat;
}
////////////////////////////////////////////////////////////////////////////////
void lcdData16(u16 dat)
{
*(u16*)(0x60000000 | (0x01 << 19)) = dat;
}
读CMD和REG也是一样的操作,不同的是从相应地址读取数据。
1、在LCDC_Init_Reg ()中调用上述3种函数实现LCD对应驱动芯片中寄存器器的初始设置 2、在lcdFillColor(Black); & lcdBlcH();中实现配置LCD的初始显示页面为全黑色和打开背光
LCD驱动显示 LCD的画点流程都可以概括为:设置坐标→写入GRAM指令→写入颜色;
LCD的读点的流程可以概括为:设置坐标→读取GRAM指令→读取颜色。
通过画点的操作到画方块、线、圆、字符等功能。
该Demo中通过Systick定时刷新要显示的数据,实现了LCD的功能演示。
void randRefresh()
{
u16 x, y, w, h, c;
drawSquare(dx, dy, dw, dh, SPACE, NUL);
if (drawBlockCnt++ % 2) {
x = rand();
x %= (dw - 2);
y = rand();
y %= (dh - 2);
w = rand();
w %= DMAX;
h = rand();
h %= DMAX;
c = rand();
c &= 0x0f;
if ((x + w) > (dw - 2)) x = dw - w - 2;
if ((y + h) > (dh - 2)) y = dh - h - 2;
drawRec (x + dx + 1, y + dy + 1, w, h, getColor(c));
}
else {
c = rand();
c &= 0x0f;
drawRec (dx + 1, dy + 1, dw - 2, dh - 2, getColor(c));
}
}
将程序下载进入板子我们可以观察到,TFTLCD上显示出了下列MindMotion **:
还可以观察到屏幕快速画出不同的颜色方框,表明实验成功
Demo程序可登录MindMotion的官网下载MM32F3270 lib_Samples: https://www.mindmotion.com.cn/products/mm32mcu/mm32f/mm32f_mainstream/mm32f3270/ 工程路径如下:
~MM32F327x_Samples\LibSamples\FSMC\FSMC_Ex8080TFT-LCD
|