嵌入式开发-STM32硬件SPI驱动TFT屏

这次用到的TFT屏

在这里插入图片描述

现在的TFT屏幕已经很便宜了,65536色屏幕,2.8英寸,分辨率320X240的液晶屏才20元,我为了图省事,多配了一个转接板12元,共32元包邮到家,真是香。
上面这个是这次用到的2.8寸TFT屏幕(20元),下面的是0.96寸OLED屏(10元),可见尺寸的巨大差别。当然OLED屏的优势是省电,在手持设备上是首选。
在这里插入图片描述

这个屏幕是SPI接口,最少4线驱动,分别是MOSI数据,CLK时钟,CS片选,DC数据/指令切换,还有2根线可选,是RESET和背光,复位可以用电阻电容上电时拉一下跳变即可,背光可以一直接高电平,也可以用PWM控制亮度。

CubeMX设置

CubeMX教程见这里:嵌入式开发–CubeMX使用入门教程
MCU是STM32H750VBT6,用的是SPI1接口,其他是常规设置,
在这里插入图片描述
支持的最高时钟频率,液晶屏厂家没有给出,ILI9341芯片手册上是这样说的
在这里插入图片描述

最高频率是6.35MHz,但要注意的是这是点频率,而我们在CubeMX中设置并不是这个,而是SPI的时钟频率,每个点是8位,所以这个频率要乘以8才是我们要的,5.35*8=50.8MHz,实测25M没有问题。27.5M花屏,30M以上无显示,可能是我用的杜邦线比较长信号衰减大。
具体设置如下:

在这里插入图片描述

代码编写

厂家只提供了F103系列的软件驱动GPIO来模拟SPI时序的代码,效率太低,于是改用硬件SPI,代码做了一些修改。
显示效果如下,16点阵字库:
在这里插入图片描述

增加的内容

增加了24点阵字库,常用的12或16字库太小了,看着费劲。
下图是24点阵的显示效果
在这里插入图片描述

需要注意问题

这个液晶屏是65536色,或者叫65K色,颜色格式是RGB565,传送数据时,正序和倒序的不同,会导致红蓝颠倒,通过改变大小端的设置,可以修正。理论上ILI9341应该有相关的寄存器设置,懒得去仔细查手册了,直接改的SPI设置搞定。如果有知道的,麻烦告知一下,十分感谢。

代码下载

代码可以在这里下载:嵌入式开发,STM32H750VBT6用硬件SPI方式驱动TFT液晶屏

  • 6
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
#include "system.h" #include "SysTick.h" #include "led.h" #include "usart.h" #include "tftlcd.h" #include "dht11.h" #include "ds18b20.h" u8 temp; u8 humi; u8 temp_buf[3],humi_buf[3]; void data_pros() //Êý¾Ý´¦Àíº¯Êý { DHT11_Read_Data(&temp;,&humi;); temp_buf[0]=temp/10+0x30; temp_buf[1]=temp+0x30; temp_buf[2]='\0'; humi_buf[0]=humi/10+0x30; humi_buf[1]=humi+0x30; humi_buf[2]='\0'; } int main() { u8 i=0; u8 temper; SysTick_Init(168); NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2); //ÖжÏÓÅÏȼ¶·Ö×é ·Ö2×é LED_Init(); USART1_Init(9600); TFTLCD_Init(); //LCD³õʼ»¯ FRONT_COLOR=BLACK; LCD_ShowString(10,10,tftlcd_data.width,tftlcd_data.height,16,"PRECHIN STM32F4"); LCD_ShowString(10,30,tftlcd_data.width,tftlcd_data.height,16,"www.prechin.net"); LCD_ShowString(10,50,tftlcd_data.width,tftlcd_data.height,16,"DHT11 Test"); LCD_ShowString(10,100,tftlcd_data.width,tftlcd_data.height,16,"Temp: C"); LCD_ShowString(10,130,tftlcd_data.width,tftlcd_data.height,16,"Humi: %RH"); FRONT_COLOR=RED; while(DHT11_Init()) //¼ì²âDS18B20ÊÇ·ñ´¿ÔÚ { LCD_ShowString(130,50,tftlcd_data.width,tftlcd_data.height,16,"Error "); delay_ms(500); } LCD_ShowString(130,50,tftlcd_data.width,tftlcd_data.height,16,"Success"); while(1) { i++; if(iP==0) { temper=DS18B20_GetTemperture(); led1=!led1; data_pros(); //¶ÁÈ¡Ò»´ÎDHT11Êý¾Ý×îÉÙÒª´óÓÚ100ms } LCD_ShowString(55,100,tftlcd_data.width,tftlcd_data.height,16,temp_buf); LCD_ShowString(55,130,tftlcd_data.width,tftlcd_data.height,16,humi_buf); LCD_ShowNum(55,160,temper,8,12); delay_ms(10); } }
### 回答1: STM32H750VBT6是一款由STMicroelectronics推出的高性能微控制器。要驱动TFT液晶显示器,我们需要完成以下几个步骤: 1.准备硬件:首先,我们需要连接TFT液晶显示器到STM32H750VBT6微控制器。通常情况下,TFT显示器会通过并行接口或SPI接口与微控制器进行连接。因此,确保正确地连接了TFT显示器与微控制器的对应引脚。 2.配置引脚:接下来,我们需要在STM32H750VBT6上配置相关引脚。根据TFT显示器的接口类型,选择合适的GPIO引脚,将其配置为相应的功能模式,以便与TFT显示器进行通信。 3.编写驱动程序:使用STM32H750VBT6的开发工具,如STM32CubeIDE等,编写驱动程序。驱动程序的作用是通过控制引脚的状态和发送相应的命令和数据,与TFT显示器进行通信,以实现数据的显示和控制。 4.初始化配置:在驱动程序中,需要进行初始化配置,包括设置TFT显示器的分辨率、像素格式、时钟频率等。此外,还需要配置TFT显示器的驱动模式、背光控制等。 5.绘制图像:一旦驱动程序成功配置,就可以使用相关接口函数进行图像的绘制。通过在驱动程序中调用相应的API函数,可以实现在TFT显示器上显示文本、图形和图像等。 6.调试和优化:在显示过程中,可能会出现一些问题,如图像显示不正确、颜色失真等。在这种情况下,我们需要对驱动程序进行调试和优化,以确保TFT显示器正常工作。 总而言之,驱动TFT液晶显示器需要正确连接硬件、配置引脚,编写驱动程序并进行初始化配置,最后通过调试和优化确保正常显示。通过以上步骤,我们可以实现STM32H750VBT6对TFT显示器的驱动。 ### 回答2: 要驱动TFT(薄膜晶体管)显示,我们可以使用STM32H750VBT6微控制器。首先,我们需要设置GPIO引脚和时钟,并初始化LCD控制器。然后,我们可以通过编程来配置FSMC控制器,该控制器可用于驱动外部存储器,包括TFT。 在配置FSMC控制器之后,我们需要根据TFT的规格来设置参数,例如颜色模式、像素分辨率等。这些参数可以通过命令和数据写入LCD控制器的寄存器来配置。根据TFT的接口类型(如RGB、SPI等),我们需要相应地设置数据传输方式。 一旦配置完成,我们可以通过向LCD控制器发送像素数据来显示图像。这涉及将图像数据写入FSMC外部存储器接口,并设置控制信号以选择TFT的特定像素。为了获得平滑的图像过渡和动态效果,我们可以使用双缓冲技术来存储多个图像帧。 此外,为了增加用户交互性,我们可以将触摸TFT结合使用。通过配置STM32的触摸控制器,并连接触摸传感器,我们可以实现触摸输入功能。 总结起来,驱动TFT显示需要完成以下步骤: 1. 设置GPIO引脚和时钟,并初始化LCD控制器。 2. 配置FSMC控制器,包括设置参数和数据传输方式。 3. 通过向LCD控制器发送像素数据来显示图像。 4. 使用双缓冲技术以获得平滑的图像过渡和动态效果。 5. 结合触摸控制器和传感器以实现触摸输入功能。 以上是对于使用STM32H750VBT6驱动TFT的基本步骤,具体的实现可能会因特定的TFT型号和应用需求而有所区别。实施时应参考相关技术文档和资料,并根据具体情况进行适当的调整和优化。 ### 回答3: 要驱动STM32H750VBT6控制器上的TFT液晶显示,需要进行以下步骤: 1. 硬件连接:将TFT液晶的引脚与STM32H750VBT6控制器的引脚连接。按照液晶的规格书,连接液晶的数据总线(像RGB、SPI、I2C等)、控制信号(像时钟、复位、使能等)。确保连接的引脚是正确的,并且按照正确的电气特性连接。 2. 初始化控制器:通过配置控制器的寄存器和设置寄存器的值,来初始化控制器。这些寄存器包括控制显示区域、像素格式、像素时钟、控制信号等。根据液晶显示的规格,设置控制器的寄存器为合适的值。 3. 数据写入:通过控制器的数据总线(像RGB、SPI、I2C等)向液晶发送数据。这些数据包括要显示的图像的像素值、控制信号等。可以通过控制器的寄存器设置像素颜色、显示坐标等。 4. 刷新显示:在液晶上显示图像之前,需要将数据刷新到幕上。这可以通过控制器的寄存器来触发刷新操作。控制器将根据设置的寄存器值,将数据从内存写入液晶中的显示RAM。 5. 控制幕显示:如果需要,控制器可以设置液晶的亮度、对比度等显示参数。这些参数可以通过控制器的寄存器来设置,以满足显示要求。 通过上述步骤,可以将STM32H750VBT6控制器连接并驱动TFT液晶显示,实现图像的显示功能。但是具体的驱动代码会根据使用的液晶显示的类型和控制器的规格书来编写。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值