STM32F103使用硬件SPI+缓冲区的模式刷新硬件显示模块

news2024/9/22 1:23:17

上次讲到使用全屏做一个缓冲区,因为cpuRAM空间不足,无法实现,想办法使用一行作为一个缓冲区的模式:
老的全屏刷新程序:

void LCD_Fill(uint16_t xsta,uint16_t ysta,uint16_t xend,uint16_t yend,uint16_t color)
{          
	uint16_t i,j;
	LCD_Address_Set(xsta,ysta,xend-1,yend-1);//设置显示范围
	for(i=ysta;i<yend;i++)
	{													   	 	
		for(j=xsta;j<xend;j++)
		{
			LCD_WR_DATA(color);
		}
	} 					  	    
}

修改后的程序:

uint8_t line[480];
void LCD_Fill_new(uint16_t xsta,uint16_t ysta,uint16_t xend,uint16_t yend,uint16_t color)
{
	uint16_t i,j,h;
	LCD_Address_Set(xsta,ysta,xend-1,yend-1);//设置显示范围
	for(i=ysta;i<yend;i++)
	{
		for(j=xsta;j<xend;j++)
		{
			//LCD_WR_DATA(color);
			line[2*j] = color>>8;
			line[2*j+1] = color;
		}
		//HAL_Delay(1);
		//HAL_SPI_Transmit(&hspi1, &line, xend*2, 0x00);			//再考虑区域问题
		while(HAL_SPI_GetState(&hspi1)==HAL_SPI_STATE_BUSY_TX);    	//等待SPI发送完成
		HAL_SPI_Transmit_DMA(&hspi1, &line, xend*2);				//再考虑区域问题

	}
}

一行是240个点,每个点是2个字节来表示RGB,所以使用了480个字节的缓冲区作为一行;显示刷新率大大提高了,原来是肉眼空间的从上往下刷新一次到了一闪就是一个整屏,可以通过波形计算,现在的整屏刷新只需要50多mS:
在这里插入图片描述
一行480个字节的刷新时间是302uS
在这里插入图片描述
整个屏幕的刷新时间是48mS

在这里插入图片描述
每个字节的时间是1.377uS,更重要的是每个字节之间都是不浪费时间的。
别的写字符之类的函数还在想办法解决如果利用缓冲区提高显示刷新速度。

修改程序后,显示器的刷新率从1秒多刷一整屏,到了48mS刷一整屏,还只用了1行作为缓冲区。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1365801.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

3.2 MAPPING THREADS TO MULTIDIMENSIONAL DATA

1D、2D或3D线程组织的选择通常基于数据的性质。图片是2D像素阵列。使用由2D块组成的2D网格通常可以方便地处理图片中的像素。图3.2显示了处理7662图片P的这种安排&#xff08;水平或x方向为76像素&#xff0c;垂直或y方向为62像素&#xff09;。假设我们决定使用16 x 16块&…

桌面图标变成白色文件?学会这4个方法,轻松解决!

“不知道为什么&#xff0c;我有些文件夹直接保存在电脑桌面了&#xff0c;但是今天查看的时候却发现它们变成了白色的文件。有什么方法可以解决这个问题吗&#xff1f;” 在使用电脑时&#xff0c;可能由于各种原因&#xff0c;会出现桌面图标变成白色文件的情况。这不仅会让用…

听GPT 讲Rust源代码--compiler(36)

File: rust/compiler/rustc_middle/src/mir/graphviz.rs 在Rust源代码中&#xff0c;rust/compiler/rustc_middle/src/mir/graphviz.rs文件的作用是生成MIR&#xff08;Mid-level Intermediate Representation&#xff09;的图形可视化表示。MIR是Rust编译器中间表示的一种形式…

如何解决海量数据的问题

近年来&#xff0c;高并发、分布式以及大数据成了后端开发者绕不开的话题&#xff0c;招聘软件上几呼都写着有高并发、大数据等项目经历优先时。很多人实际项目往往都是 CRUD&#xff0c;也没机会接触到这些场景啊。 但是&#xff0c;有位伟人曾经说过&#xff1a;没有条件&am…

九、HTML头部<head>

一、HTML头部<head> 1、<title>- 定义了HTML文档的标题 使用 <title> 标签定义HTML文档的标题 <!DOCTYPE html> <html><head><meta charset"utf-8"><title>我的 HTML 的第一页</title> </head><b…

ant-design-vue的日期组件a-range-picker赋值的问题

在使用ant-design-vue的日期组件时&#xff0c;总是会碰到赋值问题&#xff0c;习惯性的赋值就是直接给日期组件的变量赋值字符串类型&#xff0c;如下 // html部分 <a-range-picker v-model"dateValue" :format"YYYY-MM-DD"/> // js部分 data() {r…

2024年大数据不完全预测

人工智能的进步可能是2024年的主要推动力&#xff0c;也凸显出大数据的挑战——如何存储、管理、管理和使用大数据——从未如此紧迫。&#xff0c;因为如果作为基石的数据失控&#xff0c;人工智能就没有意义了。当然反之亦然。 人工智能的进步可能是2024年的主要推动力&#…

1999-2022年上市公司微观企业劳动生产率数据(原始数据+计算代码+处理结果)

1999-2022年上市公司微观企业劳动生产率数据&#xff08;原始数据计算代码处理结果&#xff09; 1、时间&#xff1a;1999-2022年 2、来源&#xff1a;原始数据整理自csmar 3、指标&#xff1a;证券代码&#xff0c;证券简称、员工人数&#xff0c;营业收入 4、范围&#x…

C++ 学习系列 -- tuple 原理

一 可变参数模板 variadic template 前面的章节 C 学习系列 -- 模板 template-CSDN博客 我们介绍了 c 中的模板概念&#xff0c;本章则在其基础上介绍了新的概念 可变参数模板 variadic template &#xff0c;顾名思义&#xff0c;可变参数模板意思为模板参数的类型与数量是变…

浅谈智能照明系统调试阶段节能方案的探究与产品选型

贾丽丽 安科瑞电气股份有限公司 上海嘉定 201801 【摘要】针对当今智能照明系统调试完成前能源浪费的问题&#xff0c;本文结合工程案例&#xff0c;分析研究了智能照明系统调试阶段的节能方法&#xff0c;提出了采用时间控制器来解决能源及人工浪费等问题的方式。实践证明&a…

微众区块链观察节点的架构和原理 | 科普时间

践行区块链公共精神&#xff0c;实现更好的公众开放与监督&#xff01;2023年12月&#xff0c;微众区块链观察节点正式面向公众开放接入功能。从开放日起&#xff0c;陆续有多个观察节点在各地运行&#xff0c;同步区块链数据&#xff0c;运行区块链浏览器观察检视数据&#xf…

Kafka(六)消费者

目录 Kafka消费者1 配置消费者bootstrap.serversgroup.idkey.deserializervalue.deserializergroup.instance.idfetch.min.bytes1fetch.max.wait.msfetch.max.bytes57671680 (55 mebibytes)max.poll.record500max.partition.fetch.bytessession.timeout.ms45000 (45 seconds)he…

【STM32】STM32学习笔记-DMA数据转运+AD多通道(24)

00. 目录 文章目录 00. 目录01. DMA简介02. DMA相关API2.1 DMA_Init2.2 DMA_InitTypeDef2.3 DMA_Cmd2.4 DMA_SetCurrDataCounter2.5 DMA_GetFlagStatus2.6 DMA_ClearFlag 03. DMA数据单通道接线图04. DMA数据单通道示例05. DMA数据多通道接线图06. DMA数据多通道示例一07. DMA数…

STM32(HAL库) CubeMX+Keil5 建立工程

STM32&#xff08;HAL库&#xff09; CubeMXKeil5 建立工程 目标选择 菜单栏 File 新建工程打开工程退出软件 Window 输出窗口的开启软件字体设置 Help 软件帮助文档检查软件更新管理MCU 已存在工程&#xff08;Existing Projects&#xff09; 最近打开过的工程(Recent Open…

如何科学评价视频生成模型?AIGCBench:全面可扩展的视频生成任务基准来了!

AIGC领域正迅速发展&#xff0c;特别是在视频生成方面取得了显著进展。本文介绍了AIGCBench&#xff0c;这是一个首创的全面而可扩展的基准&#xff0c;旨在评估各种视频生成任务&#xff0c;主要关注图像到视频&#xff08;I2V&#xff09;生成。AIGCBench解决了现有基准的局限…

苹果显示连接iTunes是什么意思?你知道吗?答案来了!

相信使用苹果手机的小伙伴都听说过iTunes软件&#xff0c;但是可能还有小部分人不知道iTunes是什么&#xff0c;以及苹果设备上显示连接itunes是什么意思。对于使用iTunes进行数据备份、恢复等操作的用户来说&#xff0c;出现这个提示意味着您的苹果设备已经与电脑成功连接&…

vue-springboot基于java的实验室安全考试系统

本系统为用户而设计制作实验室安全考试系统&#xff0c;旨在实现实验室安全考试智能化、现代化管理。本实验室安全考试管理自动化系统的开发和研制的最终目的是将实验室安全考试的运作模式从手工记录数据转变为网络信息查询管理&#xff0c;从而为现代管理人员的使用提供更多的…

【Docker基础一】Docker安装Elasticsearch,Kibana,IK分词器

安装elasticsearch 下载镜像 查看版本&#xff1a;Elasticsearch Guide [8.11] | Elastic # 下载镜像 docker pull elasticsearch:7.17.16 # 查看镜像是否下载成功 docker images创建网络 因为需要部署kibana容器&#xff0c;要让es和kibana容器互联 # 创建一个网络&…

并发(10)

目录 61.ReentrantReadWriteLock底层读写状态如何设计的&#xff1f; 62.读锁和写锁的最大数量是多少&#xff1f; 63.本地线程计数器ThreadLocalHoldCounter是用来做什么的&#xff1f; 64.写锁的获取与释放是怎么实现的&#xff1f; 65.读锁的获取与释放是怎么实现的&…

【算法】递归算法理解(持续更新)

这里写目录标题 一、递归算法1、什么情况下可以使用递归&#xff1f;2、递归算法组成部分3、案例&#xff1a;求n的阶乘4、编写一个递归函数来计算列表包含的元素数。5、通过递归找到列表中最大的数字。6、通过递归的方式实现二分查找算法。 一、递归算法 递归&#xff08;Rec…