TFT屏幕使用(CUBEMX+SPI)

news/2025/1/11 7:09:26/

目  录

1.SPI

2.SPI+DMA


1.SPI

        使用SPI通信协议的器件有很多,这里以TFT屏驱动为ST7735为例。

        设置SPI,因为我使用的是STM32F107ZGT的板子所以我的SPI 速度能达到 42M,还需要设置其它的控制引脚。         

         引脚设置如下所示。

/*GPIO的宏定义*/
#define LCD_RES_Clr()  HAL_GPIO_WritePin(RES_GPIO_Port,RES_Pin,GPIO_PIN_RESET)//RES
#define LCD_RES_Set()  HAL_GPIO_WritePin(RES_GPIO_Port,RES_Pin,GPIO_PIN_SET)#define LCD_DC_Clr()   HAL_GPIO_WritePin(DC_GPIO_Port,DC_Pin,GPIO_PIN_RESET)//DC
#define LCD_DC_Set()   HAL_GPIO_WritePin(DC_GPIO_Port,DC_Pin,GPIO_PIN_SET)#define LCD_CS_Clr()   HAL_GPIO_WritePin(CS_GPIO_Port,CS_Pin,GPIO_PIN_RESET)//CS
#define LCD_CS_Set()   HAL_GPIO_WritePin(CS_GPIO_Port,CS_Pin,GPIO_PIN_SET)#define LCD_BLK_Clr()  HAL_GPIO_WritePin(BLK_GPIO_Port,BLK_Pin,GPIO_PIN_RESET)//BLK
#define LCD_BLK_Set()  HAL_GPIO_WritePin(BLK_GPIO_Port,BLK_Pin,GPIO_PIN_SET)

        在购买时我们都可以在淘宝商家处获得一份资料,但是商家提供的资料不一定是用HAL库的,我们需要做的只是修改底层的SPI函数就行,上层的函数都是基于这个基础之上实现的,也就是将模拟SPI移植到HAL库。

void LCD_Writ_Bus(uint8_t dat) 
{LCD_CS_Clr();HAL_SPI_Transmit(&hspi1, &dat, 1,10);LCD_CS_Set);
}
void LCD_WR_DATA8(uint8_t dat)
{LCD_DC_Set();//写数据LCD_Writ_Bus(dat);
}
void LCD_WR_DATA(uint16_t dat)
{LCD_DC_Set();//写数据LCD_Writ_Bus(dat>>8);LCD_Writ_Bus(dat);
}
void LCD_WR_REG(uint8_t dat)
{LCD_DC_Clr();//写命令LCD_Writ_Bus(dat);LCD_DC_Set();//写数据
}

         最后在测试的时候,通过先初始化LCD,在通过下面函数进行全屏颜色显示。

/******************************************************************************函数说明:在指定区域填充颜色入口数据:xsta,ysta   起始坐标xend,yend   终止坐标color       要填充的颜色返回值:  无
******************************************************************************/
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);}}                     
}

        在主函数添加以下函数。 

        注意,需要按照自己LCD尺寸来设置,同样的在初始化时也需要修改。 

         LCD_Fill(0,0,128,160,WHITE);

2.SPI+DMA 

         DMA的使用也很简单。只需要在DMA Setting中设置一下即可,一定要打开中断

void LCD_Writ_Bus(uint8_t dat)

{

        LCD_CS_Clr();  

        HAL_SPI_Transmit_DMA(&hspi1, &dat, 1);

        LCD_CS_Set);

}

         只需要将函数修改为dma即可。


http://www.ppmy.cn/news/905186.html

相关文章

OLED TFT屏幕相关

文章目录 0.tft espi1.oled1.1 字体4.2 模拟spi oled4.3 IIC oled 2ips tft 0.tft espi 镜像设置 1.oled 1.1 字体 1206-----1608-------2412 4.2 模拟spi oled 我用阿里云盘分享了「OLED」&#xff0c;你可以不限速下载&#x1f680; 复制这段内容打开「阿里云盘」App 即…

ESP32开发板连接TFT屏幕

前言 esp32连接tft屏幕踩了很多坑&#xff0c;也查阅了很多资料&#xff0c;这里简单总结一下&#xff0c;希望能为像我一样的小白排一下坑。 ESP32的引脚 关于esp32的引脚功能&#xff0c;官方给出的文档写的比较多&#xff0c;官方文档如下&#xff1a; ESP32WROOM32技术指…

树莓派SPI连接TFT屏幕

背景 在我们使用树莓派做开发的时候&#xff0c;有些场景下需要屏幕显示&#xff0c;可以选择HDMI屏幕&#xff0c;也可以选择SPI接口的屏幕。HDMI屏幕驱动简单&#xff0c;即插即用&#xff0c;但是成本高&#xff0c;相比较SPI屏幕硬件成本低&#xff0c;GPIO插座连接方便&a…

面试之可重复读是否可以解决幻读

可重复读&#xff08;repeatable read&#xff09;定义:一个事务执行过程中看到的数据&#xff0c;总是跟这个事务在启动时看到的数据时是一致的。 不过理论上 是会出现幻读的&#xff0c;简单的来说幻读指的是当用户读取某一范围的数据行时&#xff0c;另外一个事务又在该范围…

Android Glide同步阻塞方式submit获得Bitmap,kotlin

droid Glide同步阻塞方式submit获得Bitmap&#xff0c;kotlin 需要放入后台线程&#xff0c;不能在主线程。 Android Glide预加载preload ,kotlin_zhangphil的博客-CSDN博客【代码】Android Paging 3,kotlin&#xff08;1&#xff09;在实际的开发中&#xff0c;虽然Glide解决了…

数据库结业项目作业(LOL数据库系统)

项目所用到的有Spring Boot , mysql&#xff0c;jdbc&#xff0c;myBatis&#xff0c;workbench&#xff0c;swagger-ui&#xff0c;druid 因为刚开始学习spring boot不久&#xff0c;对springmvc的机制还不太了解&#xff0c;借用swagger-ui的界面&#xff0c;本身只实现后端的…

lol相关的开源项目!好玩学习两不误!

大家好&#xff0c;我是【开源君】&#xff0c;分享好玩的项目&#xff0c;挖掘开源的价值。 今天给大家分享的开源项目的是**【lol】。** 项目介绍 英雄联盟这个游戏大家都不陌生吧&#xff0c;开源君今天发现一个好玩的开源项目&#xff0c;这是一个基于JavaWeb的英雄联盟的…

lolapp.php,微信小程序 LOL 英雄的开发介绍

这篇文章主要介绍了微信小程序 LOL 英雄介绍开发的相关资料,需要的朋友可以参考下 最近微信小程序炒得火热,就跟成都的这个房价一样.昨天我也尝试了一下,做了一个自己的英雄列表.今天将自己的制作过程记录于此. 1.下载微信开发者工具 官网链接:https://mp.weixin.qq.com/debug/…