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

相关文章

golang1.23版本之前 Timer Reset方法无法正确使用

《golang1.23版本之前TimerReset方法无法正确使用》在Go1.23之前,使用`time.Reset`函数时需要先调用`Stop`并明确从timer的channel中抽取出东西,以避... 目录golang1.23 之前 Reset ​到底有什么问题golang1.23 之前到底应该如何正确的

Vue项目中Element UI组件未注册的问题原因及解决方法

《Vue项目中ElementUI组件未注册的问题原因及解决方法》在Vue项目中使用ElementUI组件库时,开发者可能会遇到一些常见问题,例如组件未正确注册导致的警告或错误,本文将详细探讨这些问题... 目录引言一、问题背景1.1 错误信息分析1.2 问题原因二、解决方法2.1 全局引入 Element

Python调用另一个py文件并传递参数常见的方法及其应用场景

《Python调用另一个py文件并传递参数常见的方法及其应用场景》:本文主要介绍在Python中调用另一个py文件并传递参数的几种常见方法,包括使用import语句、exec函数、subproce... 目录前言1. 使用import语句1.1 基本用法1.2 导入特定函数1.3 处理文件路径2. 使用ex

详解Vue如何使用xlsx库导出Excel文件

《详解Vue如何使用xlsx库导出Excel文件》第三方库xlsx提供了强大的功能来处理Excel文件,它可以简化导出Excel文件这个过程,本文将为大家详细介绍一下它的具体使用,需要的小伙伴可以了解... 目录1. 安装依赖2. 创建vue组件3. 解释代码在Vue.js项目中导出Excel文件,使用第三

Linux alias的三种使用场景方式

《Linuxalias的三种使用场景方式》文章介绍了Linux中`alias`命令的三种使用场景:临时别名、用户级别别名和系统级别别名,临时别名仅在当前终端有效,用户级别别名在当前用户下所有终端有效... 目录linux alias三种使用场景一次性适用于当前用户全局生效,所有用户都可调用删除总结Linux

Oracle查询优化之高效实现仅查询前10条记录的方法与实践

《Oracle查询优化之高效实现仅查询前10条记录的方法与实践》:本文主要介绍Oracle查询优化之高效实现仅查询前10条记录的相关资料,包括使用ROWNUM、ROW_NUMBER()函数、FET... 目录1. 使用 ROWNUM 查询2. 使用 ROW_NUMBER() 函数3. 使用 FETCH FI

java图像识别工具类(ImageRecognitionUtils)使用实例详解

《java图像识别工具类(ImageRecognitionUtils)使用实例详解》:本文主要介绍如何在Java中使用OpenCV进行图像识别,包括图像加载、预处理、分类、人脸检测和特征提取等步骤... 目录前言1. 图像识别的背景与作用2. 设计目标3. 项目依赖4. 设计与实现 ImageRecogni

Git中恢复已删除分支的几种方法

《Git中恢复已删除分支的几种方法》:本文主要介绍在Git中恢复已删除分支的几种方法,包括查找提交记录、恢复分支、推送恢复的分支等步骤,文中通过代码介绍的非常详细,需要的朋友可以参考下... 目录1. 恢复本地删除的分支场景方法2. 恢复远程删除的分支场景方法3. 恢复未推送的本地删除分支场景方法4. 恢复

Python将大量遥感数据的值缩放指定倍数的方法(推荐)

《Python将大量遥感数据的值缩放指定倍数的方法(推荐)》本文介绍基于Python中的gdal模块,批量读取大量多波段遥感影像文件,分别对各波段数据加以数值处理,并将所得处理后数据保存为新的遥感影像... 本文介绍基于python中的gdal模块,批量读取大量多波段遥感影像文件,分别对各波段数据加以数值处

python管理工具之conda安装部署及使用详解

《python管理工具之conda安装部署及使用详解》这篇文章详细介绍了如何安装和使用conda来管理Python环境,它涵盖了从安装部署、镜像源配置到具体的conda使用方法,包括创建、激活、安装包... 目录pytpshheraerUhon管理工具:conda部署+使用一、安装部署1、 下载2、 安装3