【MM32F5270开发板试用】+ TFTLCD FSMC方式驱动
本篇文章来自极术社区与灵动组织的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方式驱动相关推荐
- 【MM32F5270开发板试用】RT-Thread SPI 驱动适配指南
本篇文章来自极术社区与灵动组织的MM32F5270开发板评测活动,更多开发板试用活动请关注极术社区网站.作者:xusiwei1236 本文记录了我在社区"Rice我叫加饭?"大佬移 ...
- 【MM32F5270开发板试用】播放TF卡WAV格式音乐,I2S驱动CS4344
[MM32F5270开发板试用]播放TF卡WAV格式音乐,I2S驱动CS4344 上四篇文章: [MM32F5270开发板试用]一.依靠SPI_SD,移植FatFs文件系统 [MM32F5270开发板 ...
- 【MM32F5270开发板试用】快速移植STM32应用到MM32F5270(以OLED为例)
本篇文章来自极术社区与灵动组织的MM32F5270开发板评测活动,更多开发板试用活动请关注极术社区网站.作者:@#@ 本篇文章来自极术社区与灵动组织的MM32F5270开发板评测活动,更多开发板试用活 ...
- 【MM32F5270开发板试用】 MindSDK使用测评
本篇文章来自极术社区与灵动组织的MM32F5270开发板评测活动,更多开发板试用活动请关注极术社区网站.作者:胖墩墩 一.前言: 非常感谢极术社区和灵动微电子开展的MM32F5270开发板试用申请活动 ...
- 【MM32F5270开发板试用】手势传感PAJ7620U2的智能家居应用
本篇文章来自极术社区与灵动组织的MM32F5270开发板评测活动,更多开发板试用活动请关注极术社区网站.作者:风云再起 一.序 很高兴能参加极术社区联合灵动微电子组织的[灵动MM32F5270开发板试 ...
- 【GD32F427开发板试用】5. SPI驱动TFTLCD屏幕
本篇文章来自极术社区与兆易创新组织的GD32F427开发板评测活动,更多开发板试用活动请关注极术社区网站.作者:hehung 之前发帖 [GD32F427开发板试用]1. 串口实现scanf输入控制L ...
- 【MM32F5270开发板试用】定制MicroPython及读取MPU6050数据到OLED1306
本篇文章来自极术社区与灵动组织的MM32F5270开发板评测活动,更多开发板试用活动请关注极术社区网站.作者:HonestQiao 前言 这次有幸获得MM32F5270开发板的试用,非常幸运. 收到板 ...
- 【MM32F5270开发板试用】移植Google Chrome小恐龙游戏到MM32F5270
本篇文章来自极术社区与灵动组织的MM32F5270开发板评测活动,更多开发板试用活动请关注极术社区网站.作者:曾是一颗薏米 一.项目背景 在几年前,Google 给 Chrome 浏览器加了一个有趣的 ...
- 【MM32F5270开发板试用】GPIO输入+EXTI外部中断例程demo试用
本篇文章来自极术社区与灵动组织的MM32F5270开发板评测活动,更多开发板试用活动请关注极术社区网站.作者:Zeee 前言: 首先,感谢灵动微电子与极术社区给予宝贵的试用机会.借助本次对Plus-F ...
最新文章
- linux网络配置答案,Linux网络配置与管理作业3答案.doc
- java练气期(1)----java高级(JDBC)
- 共享SQL语句减少硬解析
- 《UML大战需求分析》阅读笔记01
- 并发译文翻译计划(二)
- grid列的值格式化
- apache php提示下载,apache正在下载php文件而不是显示它们。
- 因打印日志而引发的故障
- 手机问卷调查报告 html,使用手机问卷调查报告
- flink-sqlclient报错
- 大专学历计算机专业可以积分,持有大专紧缺急需专业可直接申请上海居住证积分?...
- ACL中的permit/deny与traffic policy中behavior的permit/deny之间是什么关系?
- 吴忌寒入选福布斯2019最年轻亿万富豪榜;黑客已将价值近千万EOS偷跑 | 1分钟链圈...
- 【Aviator】(二)应用实战
- Android系统开发:GMS包移植
- mysql中in条件使用字符串
- linux系统vmd软件如何使用,VMD使用
- 树莓派系统安装步骤——免费工具包资源
- NetCore配置详解(1)
- 公司注册资本认缴和实缴有什么区别,你了解多少?
热门文章
- 如何给视频添加特效?快速制作特效视频
- Vue F01 -- keyframe、transform详情与实例
- 两种方式识别“传统”图片验证码
- oncontextmenu简单使用方法,以及在js函数中失效的问题
- linux驱动开发笔记 一 基本流程
- 正泰电表采集 Modbus 数据接入 ThingsCloud 物联网云平台
- c语言装逼编程,教你用C语言写一个好玩的万年历,必备的装逼神器
- 【Spring】AOP面向切面编程(Spring4和Spring5区别)
- CSAPP实验之Bomb Lab详解
- 微信支付首创“先享后付”保险模式 司乘没交钱就可享受高速保险服务