本篇文章来自极术社区与灵动组织的MM32F5270开发板评测活动,更多开发板试用活动请关注极术社区网站。作者:小会

上篇使用IO口方式驱动TFTLCD显示屏,这篇测试使用FSMC例程驱动TFTLCD显示屏。

一、FSMC手册资料

FSMC方式可以驱动多种类型的总线设备,这里显示屏使用的是8080控制方式。

二、代码

主要代码部分如下
2.1、lcd.c

/** Copyright 2021 MindMotion Microelectronics Co., Ltd.* All rights reserved.** SPDX-License-Identifier: BSD-3-Clause*/#include "lcd.h"
#include "board_init.h"
#include "delay.h"extern void LCD_InitHardware(void);
extern void LCD_WriteCmd(uint16_t cmd);
extern void LCD_WriteData(uint16_t dat);
extern uint16_t LCD_ReadData(void);static void lcd_rst(void)
{GPIO_SetBits(BOARD_LCD_RST_GPIO_PORT, BOARD_LCD_RST_GPIO_PIN);   delay_ms(1); GPIO_ClearBits(BOARD_LCD_RST_GPIO_PORT, BOARD_LCD_RST_GPIO_PIN);  delay_ms(10);             // This delay time is necessary GPIO_SetBits(BOARD_LCD_RST_GPIO_PORT, BOARD_LCD_RST_GPIO_PIN);delay_ms(120);
}void LCD_Init(LCD_Init_Type * init)
{uint32_t id=0;LCD_InitHardware();lcd_rst();LCD_WriteCmd(0x0011);        //exit SLEEP modedelay_ms(120);LCD_WriteCmd(0x0036);LCD_WriteData(0x0060);            //MADCTL: memory data access controlLCD_WriteCmd(0x003A);LCD_WriteData(0x0005);            //COLMOD: Interface Pixel format *** I use 262K-colors in 18bit/pixel format when using 8-bit interface to allow 3-bytes per pixel//    TFT_24_7789_Write_Command(0x003A);TFT_24_7789_Write_Data(0x0055);//COLMOD: Interface Pixel format  *** I use 65K-colors in 16bit/pixel (5-6-5) format when using 16-bit interface to allow 1-byte per pixelLCD_WriteCmd(0x00B2);LCD_WriteData(0x000C);LCD_WriteData(0x000C);LCD_WriteData(0x0000);LCD_WriteData(0x0033);LCD_WriteData(0x0033);            //PORCTRK: Porch settingLCD_WriteCmd(0x00B7);LCD_WriteData(0x0035);            //GCTRL: Gate ControlLCD_WriteCmd(0x00BB);LCD_WriteData(0x001c);            //VCOMS: VCOM settingLCD_WriteCmd(0x00C0);LCD_WriteData(0x002C);            //LCMCTRL: LCM ControlLCD_WriteCmd(0x00C2);LCD_WriteData(0x0001);LCD_WriteData(0x00FF);            //VDVVRHEN: VDV and VRH Command EnableLCD_WriteCmd(0x00C3);LCD_WriteData(0x000B);            //VRHS: VRH SetLCD_WriteCmd(0x00C4);LCD_WriteData(0x0020);            //VDVS: VDV SetLCD_WriteCmd(0x00C6);LCD_WriteData(0x000F);            //FRCTRL2: Frame Rate control in normal modeLCD_WriteCmd(0x00D0);LCD_WriteData(0x00A4);LCD_WriteData(0x00A1);            //PWCTRL1: Power Control 1LCD_WriteCmd(0x00E0);LCD_WriteData(0x00D0);LCD_WriteData(0x0000);LCD_WriteData(0x0003);LCD_WriteData(0x0009);LCD_WriteData(0x0013);LCD_WriteData(0x001c);LCD_WriteData(0x003a);LCD_WriteData(0x0055);LCD_WriteData(0x0048);LCD_WriteData(0x0018);LCD_WriteData(0x0012);LCD_WriteData(0x000e);LCD_WriteData(0x0019);LCD_WriteData(0x001e);            //PVGAMCTRL: Positive Voltage Gamma controlLCD_WriteCmd(0x00E1);LCD_WriteData(0x00D0);LCD_WriteData(0x0000);LCD_WriteData(0x0003);LCD_WriteData(0x0009);LCD_WriteData(0x0005);LCD_WriteData(0x0025);LCD_WriteData(0x003a);LCD_WriteData(0x0055);LCD_WriteData(0x0050);LCD_WriteData(0x003d);LCD_WriteData(0x001c);LCD_WriteData(0x001d);LCD_WriteData(0x001d);LCD_WriteData(0x001e);            LCD_WriteCmd(0x0029);                //display ON
}void LCD_SetWindow(uint16_t x0, uint16_t y0, uint16_t x1, uint16_t y1)
{LCD_WriteCmd(0x2a);LCD_WriteData(x0 >> 8);LCD_WriteData(x0 & 0xff);LCD_WriteData(x1 >> 8);LCD_WriteData(x1 & 0xff);LCD_WriteCmd(0x2b);LCD_WriteData(y0 >> 8);LCD_WriteData(y0 & 0xff);LCD_WriteData(y1 >> 8);LCD_WriteData(y1 & 0xff);
}void LCD_ClearWindow(uint16_t x0, uint16_t y0, uint16_t x1, uint16_t y1, uint16_t color)
{LCD_SetWindow(x0, y0, x1, y1);LCD_WriteCmd(0x2c);for(uint32_t i = 0; i <= x1 - x0; i++){for(uint32_t j = 0; j <= y1 - y0; j++){LCD_WriteData(color);}}
}void LCD_FillWindow(uint16_t x0, uint16_t y0, uint16_t x1, uint16_t y1, uint16_t * color)
{LCD_SetWindow(x0, y0, x1, y1);LCD_WriteCmd(0x2c);for(uint32_t i = 0; i <= x1 - x0; i++){for(uint32_t j = 0; j <= y1 - y0; j++){LCD_WriteData((* color++));}}
}void LCD_DrawPixel(uint16_t x, uint16_t y, uint16_t color)
{LCD_ClearWindow(x, y, x, y, color);
}

2.2、lcd_port.c

/** Copyright 2021 MindMotion Microelectronics Co., Ltd.* All rights reserved.** SPDX-License-Identifier: BSD-3-Clause*/#include "lcd.h"
#include "board_init.h"void LCD_InitHardware(void)
{FSMC_Init_Type fsmc_init ={.MemType = FSMC_MemType_SRAM,.MemSize = FSMC_MemSize_64MB};FSMC_Conf_Type fsmc_conf ={.ReadPeriod    = 0x1u,.AddrSetTime   = 0x3u,.WriteHoldTime = 0x1u, .WritePeriod   = 0x2u, .ReadySignal   = FSMC_ReadySignal_Internal,.SMReadPipe    = 0u,.BusWidth      = FSMC_BusWidth_16b};FSMC_Init(BOARD_LCD_FSMC_PORT, 3, &fsmc_init);FSMC_SetConf(BOARD_LCD_FSMC_PORT, BOARD_LCD_FSMC_SET_INDEX, &fsmc_conf);FSMC_EnableConf(BOARD_LCD_FSMC_PORT, 3, BOARD_LCD_FSMC_SET_INDEX);GPIO_WriteBit(BOARD_LCD_BL_GPIO_PORT, BOARD_LCD_BL_GPIO_PIN, 1u); /* enable back light. */
}void LCD_WriteCmd(uint16_t cmd)
{FSMC_PutData16(BOARD_LCD_FSMC_PORT, 3, 0, cmd);
}void LCD_WriteData(uint16_t dat)
{FSMC_PutData16(BOARD_LCD_FSMC_PORT, 3, (1u << BOARD_LCD_FSMC_RS_BIT_INDEX), dat);
}uint16_t LCD_ReadData(void)
{return FSMC_GetData16(BOARD_LCD_FSMC_PORT, 3, (1 << BOARD_LCD_FSMC_RS_BIT_INDEX));
}/* EOF. */

2.3、main.c

int main(void)
{BOARD_Init();delay_init();/* init the lcd. */LCD_Init_Type lcd_init ={.DisplayMode = LCD_DisplayMode_Landspace,};LCD_Init(&lcd_init);printf("\r\nmm32f5270 test.\r\n");while(1){                GPIO_WriteBit(BOARD_LED0_GPIO_PORT, BOARD_LED0_GPIO_PIN, 1u);delay_ms(100);GPIO_WriteBit(BOARD_LED0_GPIO_PORT, BOARD_LED0_GPIO_PIN, 0u);delay_ms(100);LCD_ClearWindow(0u, 0u, BOARD_LCD_HEIGHT-1u, BOARD_LCD_WIDTH-1u, LCD_COLOR_RED);delay_ms(1000);LCD_ClearWindow(0u, 0u, BOARD_LCD_HEIGHT-1u, BOARD_LCD_WIDTH-1u, LCD_COLOR_GREEN);delay_ms(1000);LCD_ClearWindow(0u, 0u, BOARD_LCD_HEIGHT-1u, BOARD_LCD_WIDTH-1u, LCD_COLOR_BLUE);delay_ms(1000);}
}

三、程序运行
显示刷屏

【MM32F5270开发板试用】+ TFTLCD FSMC方式驱动相关推荐

  1. 【MM32F5270开发板试用】RT-Thread SPI 驱动适配指南

    本篇文章来自极术社区与灵动组织的MM32F5270开发板评测活动,更多开发板试用活动请关注极术社区网站.作者:xusiwei1236 本文记录了我在社区"Rice我叫加饭?"大佬移 ...

  2. 【MM32F5270开发板试用】播放TF卡WAV格式音乐,I2S驱动CS4344

    [MM32F5270开发板试用]播放TF卡WAV格式音乐,I2S驱动CS4344 上四篇文章: [MM32F5270开发板试用]一.依靠SPI_SD,移植FatFs文件系统 [MM32F5270开发板 ...

  3. 【MM32F5270开发板试用】快速移植STM32应用到MM32F5270(以OLED为例)

    本篇文章来自极术社区与灵动组织的MM32F5270开发板评测活动,更多开发板试用活动请关注极术社区网站.作者:@#@ 本篇文章来自极术社区与灵动组织的MM32F5270开发板评测活动,更多开发板试用活 ...

  4. 【MM32F5270开发板试用】 MindSDK使用测评

    本篇文章来自极术社区与灵动组织的MM32F5270开发板评测活动,更多开发板试用活动请关注极术社区网站.作者:胖墩墩 一.前言: 非常感谢极术社区和灵动微电子开展的MM32F5270开发板试用申请活动 ...

  5. 【MM32F5270开发板试用】手势传感PAJ7620U2的智能家居应用

    本篇文章来自极术社区与灵动组织的MM32F5270开发板评测活动,更多开发板试用活动请关注极术社区网站.作者:风云再起 一.序 很高兴能参加极术社区联合灵动微电子组织的[灵动MM32F5270开发板试 ...

  6. 【GD32F427开发板试用】5. SPI驱动TFTLCD屏幕

    本篇文章来自极术社区与兆易创新组织的GD32F427开发板评测活动,更多开发板试用活动请关注极术社区网站.作者:hehung 之前发帖 [GD32F427开发板试用]1. 串口实现scanf输入控制L ...

  7. 【MM32F5270开发板试用】定制MicroPython及读取MPU6050数据到OLED1306

    本篇文章来自极术社区与灵动组织的MM32F5270开发板评测活动,更多开发板试用活动请关注极术社区网站.作者:HonestQiao 前言 这次有幸获得MM32F5270开发板的试用,非常幸运. 收到板 ...

  8. 【MM32F5270开发板试用】移植Google Chrome小恐龙游戏到MM32F5270

    本篇文章来自极术社区与灵动组织的MM32F5270开发板评测活动,更多开发板试用活动请关注极术社区网站.作者:曾是一颗薏米 一.项目背景 在几年前,Google 给 Chrome 浏览器加了一个有趣的 ...

  9. 【MM32F5270开发板试用】GPIO输入+EXTI外部中断例程demo试用

    本篇文章来自极术社区与灵动组织的MM32F5270开发板评测活动,更多开发板试用活动请关注极术社区网站.作者:Zeee 前言: 首先,感谢灵动微电子与极术社区给予宝贵的试用机会.借助本次对Plus-F ...

最新文章

  1. linux网络配置答案,Linux网络配置与管理作业3答案.doc
  2. java练气期(1)----java高级(JDBC)
  3. 共享SQL语句减少硬解析
  4. 《UML大战需求分析》阅读笔记01
  5. 并发译文翻译计划(二)
  6. grid列的值格式化
  7. apache php提示下载,apache正在下载php文件而不是显示它们。
  8. 因打印日志而引发的故障
  9. 手机问卷调查报告 html,使用手机问卷调查报告
  10. flink-sqlclient报错
  11. 大专学历计算机专业可以积分,持有大专紧缺急需专业可直接申请上海居住证积分?...
  12. ACL中的permit/deny与traffic policy中behavior的permit/deny之间是什么关系?
  13. 吴忌寒入选福布斯2019最年轻亿万富豪榜;黑客已将价值近千万EOS偷跑 | 1分钟链圈...
  14. 【Aviator】(二)应用实战
  15. Android系统开发:GMS包移植
  16. mysql中in条件使用字符串
  17. linux系统vmd软件如何使用,VMD使用
  18. 树莓派系统安装步骤——免费工具包资源
  19. NetCore配置详解(1)
  20. 公司注册资本认缴和实缴有什么区别,你了解多少?

热门文章

  1. 如何给视频添加特效?快速制作特效视频
  2. Vue F01 -- keyframe、transform详情与实例
  3. 两种方式识别“传统”图片验证码
  4. oncontextmenu简单使用方法,以及在js函数中失效的问题
  5. linux驱动开发笔记 一 基本流程
  6. 正泰电表采集 Modbus 数据接入 ThingsCloud 物联网云平台
  7. c语言装逼编程,教你用C语言写一个好玩的万年历,必备的装逼神器
  8. 【Spring】AOP面向切面编程(Spring4和Spring5区别)
  9. CSAPP实验之Bomb Lab详解
  10. 微信支付首创“先享后付”保险模式 司乘没交钱就可享受高速保险服务