[MM32软件] FSMC 控制LCD的软件设计

[复制链接]
2186|12
 楼主| mutable 发表于 2021-12-17 14:55 | 显示全部楼层 |阅读模式

FMSC Demo应用中,使在库函数样例工程中使用选用:

FSMC_Ex8080TFTLCD.uvprojx


实验展示如何初始化LCD接口与实现LCD并行驱动显示。


软件分为两个部分:


1、FSMC接口GPIO与FSMC接口参数初始化

2、LCD显示初始化与LCD显示

FSMC接口GPIO与FSMC接口参数初始化

  1. void BSP_LCD_Configure()
  2. {
  3.     initGPIO_LCD();
  4.     initFSMC();
  5.     LCDC_Init_Reg();
  6.     lcdFillColor(Black);
  7.     lcdBlcH();
  8. }
① 在initGPIO_LCD()中实现LCD对应IO初始化

包括LCD对应nRST引脚,背光控制引脚,FSMC相关的片选,读写,数据/命令,数据D0~D15引脚的初始化。

② 在initFSMC()中实现FSMC功能配置初始化

A. 写操作周期

B. 单个bit数据写入保持时间

C. 写操作时,地址线的建立时间

D. 读操作周期长度设置

E. 存储器数据总线位宽

F. 式选择:8080模式

G. 外接设备的内存大小

  1. void initFSMC(void)
  2. {
  3.     FSMC_InitTypeDef                FSMC_InitStructure;
  4.     FSMC_NORSRAM_Bank_InitTypeDef   FSMC_BankInitStructure;

  5.     RCC_AHB3PeriphClockCmd(RCC_AHB3ENR_FSMC, ENABLE);

  6.     FSMC_BankInitStructure.FSMC_SMReadPipe    = 0;
  7.     FSMC_BankInitStructure.FSMC_ReadyMode     = 0;
  8.     FSMC_BankInitStructure.FSMC_WritePeriod   = 0x2;
  9.     FSMC_BankInitStructure.FSMC_WriteHoldTime = 1;
  10.     FSMC_BankInitStructure.FSMC_AddrSetTime   = 3;
  11.     FSMC_BankInitStructure.FSMC_ReadPeriod    = 0x1;
  12.     FSMC_BankInitStructure.FSMC_DataWidth     = FSMC_DataWidth_16bits;
  13.     FSMC_NORSRAM_Bank_Init(&FSMC_BankInitStructure, FSMC_NORSRAM_BANK0);

  14.     FSMC_InitStructure.FSMC_Mode = FSMC_Mode_8080;
  15.     FSMC_InitStructure.FSMC_TimingRegSelect = FSMC_TimingRegSelect_0;
  16.     FSMC_InitStructure.FSMC_MemSize = FSMC_MemSize_64MB;
  17.     FSMC_InitStructure.FSMC_MemType = FSMC_MemType_NorSRAM;
  18.     FSMC_InitStructure.FSMC_AddrDataMode = FSMC_AddrDataMUX;
  19.     FSMC_NORSRAMInit(&FSMC_InitStructure);
  20. }
LCD显示初始化

Bank0地址为0x60000000,0x80000=(0x01 << 19)则是地址线A18的偏移量。首先完成写CMD和DATA驱动:
  1. void lcdCmd(u8 cmd)
  2. {
  3.     *(u16*)(0x60000000) = cmd;
  4. }

  5. ////////////////////////////////////////////////////////////////////////////////
  6. void lcdData(u8 dat)
  7. {
  8.     *(u16*)(0x60000000 | (0x01 << 19)) = dat;
  9. }

  10. ////////////////////////////////////////////////////////////////////////////////
  11. void lcdData16(u16 dat)
  12. {
  13.     *(u16*)(0x60000000 | (0x01 << 19)) = dat;
  14. }      

读CMD和REG也是一样的操作,不同的是从相应地址读取数据。


1、在LCDC_Init_Reg ()中调用上述3种函数实现LCD对应驱动芯片中寄存器器的初始设置
2、在lcdFillColor(Black); & lcdBlcH();中实现配置LCD的初始显示页面为全黑色和打开背光

LCD驱动显示

LCD的画点流程都可以概括为:设置坐标→写入GRAM指令→写入颜色;


LCD的读点的流程可以概括为:设置坐标→读取GRAM指令→读取颜色。


通过画点的操作到画方块、线、圆、字符等功能。


该Demo中通过Systick定时刷新要显示的数据,实现了LCD的功能演示。


  1. void randRefresh()
  2. {
  3.     u16 x, y, w, h, c;
  4.     drawSquare(dx,  dy,  dw, dh, SPACE, NUL);
  5.     if (drawBlockCnt++ % 2) {
  6.         x = rand();
  7.         x %= (dw - 2);
  8.         y = rand();
  9.         y %= (dh - 2);
  10.         w = rand();
  11.         w %= DMAX;
  12.         h = rand();
  13.         h %= DMAX;
  14.         c = rand();
  15.         c &= 0x0f;
  16.         if ((x + w) > (dw - 2)) x = dw - w - 2;
  17.         if ((y + h) > (dh - 2)) y = dh - h - 2;
  18.         drawRec (x + dx + 1, y + dy + 1, w, h, getColor(c));
  19.     }
  20.     else {
  21.         c = rand();
  22.         c &= 0x0f;
  23.         drawRec (dx + 1, dy + 1, dw - 2, dh - 2, getColor(c));
  24.     }
  25. }

将程序下载进入板子我们可以观察到,TFTLCD上显示出了下列MindMotion **:

9576361bc344bdbfb8.png


还可以观察到屏幕快速画出不同的颜色方框,表明实验成功



Demo程序可登录MindMotion的官网下载MM32F3270 lib_Samples:

https://www.mindmotion.com.cn/products/mm32mcu/mm32f/mm32f_mainstream/mm32f3270/

工程路径如下:

~MM32F327x_Samples\LibSamples\FSMC\FSMC_Ex8080TFT-LCD



yangjiaxu 发表于 2021-12-17 15:55 | 显示全部楼层
FSMC属实好用一些,刷屏非常快
七毛钱 发表于 2021-12-17 16:44 来自手机 | 显示全部楼层
这个确实不错
redone 发表于 2021-12-18 16:39 | 显示全部楼层
这个,直接用的例程移植,真没自己研究过
kiwis66 发表于 2021-12-20 11:40 | 显示全部楼层
其实fsmc挺好用的
liu96jp 发表于 2021-12-30 14:20 | 显示全部楼层
fsmc确实不错,用起来方便
coshi 发表于 2022-1-8 10:17 | 显示全部楼层
一般地址都是多少位的啊
aoyi 发表于 2022-1-8 10:19 | 显示全部楼层
这个要地址和数据一起合作吧
drer 发表于 2022-1-8 10:25 | 显示全部楼层
这个接口应该算是一种并口了吧
gwsan 发表于 2022-1-8 10:26 | 显示全部楼层
我很喜欢用这个接口
kxsi 发表于 2022-1-8 10:27 | 显示全部楼层
是的 用起来非常的方便
weifeng90 发表于 2022-1-8 21:22 来自手机 | 显示全部楼层
FSMC做LCD接口确实很高校。
chenjun89 发表于 2022-1-10 08:31 来自手机 | 显示全部楼层
这个接口做LCD控制总线很实用
您需要登录后才可以回帖 登录 | 注册

本版积分规则

72

主题

598

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部