1.69寸SPI接口240*280TFT液晶显示模块使用硬件SPI,并提高全屏刷新率的方法探讨

本文主要是介绍1.69寸SPI接口240*280TFT液晶显示模块使用硬件SPI,并提高全屏刷新率的方法探讨,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

1.69寸SPI接口240*280TFT液晶显示模块,卖家提供了GPIO模拟SPI功能,我移植到了freertos,并点亮了屏幕,接下来是进行硬件SPI的程序修改:
上次还讲到了关于CS管脚的选通信号,再GPIO口的初始化的时候设置为高电平,在液晶显示模块初始化的时候拉低电平,使改显示模块被有效选通:

void LCD_Init(void)
{//LCD_GPIO_Init();//初始化GPIO//尤其是CS管脚,开始的电平必须是高电平,下拉产生选通信号,要特别注意。LCD_RES_Clr();		//复位 感觉不是很重要HAL_Delay(100);LCD_RES_Set();HAL_Delay(100);LCD_BLK_Set();		//打开背光HAL_Delay(100);LCD_CS_Clr();		//============CS只要放一次就可以=====后面的程序不用处理CS管脚======//************* Start Initial Sequence **********//LCD_WR_REG(0x11); //Sleep outHAL_Delay(100);//************* Start Initial Sequence **********//LCD_WR_REG(0x36);if(USE_HORIZONTAL==0)LCD_WR_DATA8(0x00);else if(USE_HORIZONTAL==1)LCD_WR_DATA8(0xC0);else if(USE_HORIZONTAL==2)LCD_WR_DATA8(0x70);else LCD_WR_DATA8(0xA0);LCD_WR_REG(0x3A);LCD_WR_DATA8(0x05);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);LCD_WR_REG(0xBB);LCD_WR_DATA8(0x32); //Vcom=1.35VLCD_WR_REG(0xC2);LCD_WR_DATA8(0x01);LCD_WR_REG(0xC3);LCD_WR_DATA8(0x15); //GVDD=4.8V  颜色深度LCD_WR_REG(0xC4);LCD_WR_DATA8(0x20); //VDV, 0x20:0vLCD_WR_REG(0xC6);LCD_WR_DATA8(0x0F); //0x0F:60HzLCD_WR_REG(0xD0);LCD_WR_DATA8(0xA4);LCD_WR_DATA8(0xA1);LCD_WR_REG(0xE0);LCD_WR_DATA8(0xD0);LCD_WR_DATA8(0x08);LCD_WR_DATA8(0x0E);LCD_WR_DATA8(0x09);LCD_WR_DATA8(0x09);LCD_WR_DATA8(0x05);LCD_WR_DATA8(0x31);LCD_WR_DATA8(0x33);LCD_WR_DATA8(0x48);LCD_WR_DATA8(0x17);LCD_WR_DATA8(0x14);LCD_WR_DATA8(0x15);LCD_WR_DATA8(0x31);LCD_WR_DATA8(0x34);LCD_WR_REG(0xE1);LCD_WR_DATA8(0xD0);LCD_WR_DATA8(0x08);LCD_WR_DATA8(0x0E);LCD_WR_DATA8(0x09);LCD_WR_DATA8(0x09);LCD_WR_DATA8(0x15);LCD_WR_DATA8(0x31);LCD_WR_DATA8(0x33);LCD_WR_DATA8(0x48);LCD_WR_DATA8(0x17);LCD_WR_DATA8(0x14);LCD_WR_DATA8(0x15);LCD_WR_DATA8(0x31);LCD_WR_DATA8(0x34);LCD_WR_REG(0x21);LCD_WR_REG(0x29);
} 

经过测试,的确CS只要在开机的时候是高电平,液晶模块初始化的时候拉一次低电平选通模组一次就够了,后续不用再次变化CS管脚。

stm32CUBEIDE硬件配置的时候打开spi功能
在这里插入图片描述

液晶显示模块只接收数据,不需要向主机发送数据,所以只要单方向传输就可以。
在这里插入图片描述
配置DMA传输,提高传输效率。

void LCD_Writ_Bus(uint8_t dat)
{	uint8_t i;//LCD_CS_Clr();		//只要初始化拉一次就可以//HAL_SPI_Transmit_DMA(&hspi1, &dat, 1);HAL_SPI_Transmit(&hspi1, &dat, 1, 0x0F);		
//	for(i=0;i<8;i++)
//	{
//		LCD_SCLK_Clr();
//		if(dat & 0x80)
//		{
//		   LCD_MOSI_Set();
//		}
//		else
//		{
//		   LCD_MOSI_Clr();
//		}
//		LCD_SCLK_Set();
//		dat<<=1;
//	}//LCD_CS_Set();
}

修改传输数据的方式由模拟SPI到硬件SPI功能,使用DMA和不使用DMA都可以。
在这里插入图片描述
使用硬件SPI后本来想得很好可以大大提高刷新率,但实际并不是十分理想,从波形图可以看出,每次传输一个字节虽然通过时钟可以看出时间很短,但整个指令占用的时间可不小,需要.8.3uS,通过计算3202402*8.3来算最少还是需要1.3秒才能刷整个屏幕。

新的思路测试:
如果使用缓冲区的方法,通过计算3202402=153.6K字节,对于只有64kRAM的CPU显然是不合适的,想用一行作为一个缓冲区的做法来测试。

这篇关于1.69寸SPI接口240*280TFT液晶显示模块使用硬件SPI,并提高全屏刷新率的方法探讨的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/583475

相关文章

C++中初始化二维数组的几种常见方法

《C++中初始化二维数组的几种常见方法》本文详细介绍了在C++中初始化二维数组的不同方式,包括静态初始化、循环、全部为零、部分初始化、std::array和std::vector,以及std::vec... 目录1. 静态初始化2. 使用循环初始化3. 全部初始化为零4. 部分初始化5. 使用 std::a

如何将Python彻底卸载的三种方法

《如何将Python彻底卸载的三种方法》通常我们在一些软件的使用上有碰壁,第一反应就是卸载重装,所以有小伙伴就问我Python怎么卸载才能彻底卸载干净,今天这篇文章,小编就来教大家如何彻底卸载Pyth... 目录软件卸载①方法:②方法:③方法:清理相关文件夹软件卸载①方法:首先,在安装python时,下

电脑死机无反应怎么强制重启? 一文读懂方法及注意事项

《电脑死机无反应怎么强制重启?一文读懂方法及注意事项》在日常使用电脑的过程中,我们难免会遇到电脑无法正常启动的情况,本文将详细介绍几种常见的电脑强制开机方法,并探讨在强制开机后应注意的事项,以及如何... 在日常生活和工作中,我们经常会遇到电脑突然无反应的情况,这时候强制重启就成了解决问题的“救命稻草”。那

kali linux 无法登录root的问题及解决方法

《kalilinux无法登录root的问题及解决方法》:本文主要介绍kalilinux无法登录root的问题及解决方法,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,... 目录kali linux 无法登录root1、问题描述1.1、本地登录root1.2、ssh远程登录root2、

SpringMVC获取请求参数的方法

《SpringMVC获取请求参数的方法》:本文主要介绍SpringMVC获取请求参数的方法,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下... 目录1、通过ServletAPI获取2、通过控制器方法的形参获取请求参数3、@RequestParam4、@

shell编程之函数与数组的使用详解

《shell编程之函数与数组的使用详解》:本文主要介绍shell编程之函数与数组的使用,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录shell函数函数的用法俩个数求和系统资源监控并报警函数函数变量的作用范围函数的参数递归函数shell数组获取数组的长度读取某下的

使用Python开发一个带EPUB转换功能的Markdown编辑器

《使用Python开发一个带EPUB转换功能的Markdown编辑器》Markdown因其简单易用和强大的格式支持,成为了写作者、开发者及内容创作者的首选格式,本文将通过Python开发一个Markd... 目录应用概览代码结构与核心组件1. 初始化与布局 (__init__)2. 工具栏 (setup_t

Python中的魔术方法__new__详解

《Python中的魔术方法__new__详解》:本文主要介绍Python中的魔术方法__new__的使用,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、核心意义与机制1.1 构造过程原理1.2 与 __init__ 对比二、核心功能解析2.1 核心能力2.2

Python虚拟环境终极(含PyCharm的使用教程)

《Python虚拟环境终极(含PyCharm的使用教程)》:本文主要介绍Python虚拟环境终极(含PyCharm的使用教程),具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,... 目录一、为什么需要虚拟环境?二、虚拟环境创建方式对比三、命令行创建虚拟环境(venv)3.1 基础命令3

Python Transformer 库安装配置及使用方法

《PythonTransformer库安装配置及使用方法》HuggingFaceTransformers是自然语言处理(NLP)领域最流行的开源库之一,支持基于Transformer架构的预训练模... 目录python 中的 Transformer 库及使用方法一、库的概述二、安装与配置三、基础使用:Pi