首页 > 其他分享 >【TFT彩屏移植】STM32F4移植1.8寸TFT彩屏简明教程

【TFT彩屏移植】STM32F4移植1.8寸TFT彩屏简明教程

时间:2024-10-19 12:20:05浏览次数:9  
标签:文件 延时 BSRR LCD 彩屏 SysTick TFT 移植 define

目录

一.移植说明

二.移植

1.例程

        物理接口:

        延时函数:

         底层驱动文件:

        GUI界面文件:

        测试demo:

2.移植至F4

创建工程:

        调试接口选择SW:

        RCC中HSE选择外部晶振:

        GPIO配置不变:

        时钟树暂时仍固定72MHz:

导入文件:

修改文件:

前置:

!Lcd_Driver.h文件!

Lcd_Driver.c文件

GUI.h文件

GUI.c文件

GUITFT_demo.c文件

 向主函数中添加驱动文件

三.测试


一.移植说明

        笔者最近为了学习LVGL需要一块显示屏,由于选择了STM32F407VET6这款芯片来作为搭建框架的主要平台,于是需要移植一块显示屏到F4上。正好笔者手上有一块1.8寸TFT彩屏,便进行移植。

        笔者的这块屏幕是1.8寸 128*160 RGB,驱动为ST7735的TFT屏,如下:

二.移植

1.例程

        首先找厂家要了例程,例程里是F1的驱动程序:

        物理接口:

        可见例程为软件SPI驱动。

        延时函数:

#include "stm32f10x.h"
#include "delay.h" 
static u8  fac_us=0;//us延时倍乘数
static u16 fac_ms=0;//ms延时倍乘数
//初始化延迟函数
//SYSTICK的时钟固定为HCLK时钟的1/8
//SYSCLK:系统时钟
void delay_init(u8 SYSCLK)
{
	SysTick->CTRL&=0xfffffffb;//bit2清空,选择外部时钟
	fac_us=SYSCLK/8;//HCLK/8		    
	fac_ms=(u16)fac_us*1000;
}
//延时nms
//注意nms的范围
//SysTick->LOAD为24位寄存器,所以,最大延时为:
//nms<=0xffffff*8*1000/SYSCLK
//SYSCLK单位为Hz,nms单位为ms
//对72M条件下,nms<=1864 
void delay_ms(u16 nms)
{	 		  	  
	u32 temp;		   
	SysTick->LOAD=(u32)nms*fac_ms;//时间加载(SysTick->LOAD为24bit)
	SysTick->VAL =0x00;           //清空计数器
	SysTick->CTRL=0x01 ;          //开始倒数  
	do
	{
		temp=SysTick->CTRL;
	}
	while(temp&0x01&&!(temp&(1<<16)));//等待时间到达   
	SysTick->CTRL=0x00;       //关闭计数器
	SysTick->VAL =0X00;       //清空计数器	  	    
}   
//延时nus
//nus为要延时的us数.		    								   
void delay_us(u32 nus)
{		
	u32 temp;	    	 
	SysTick->LOAD=nus*fac_us; //时间加载	  		 
	SysTick->VAL=0x00;        //清空计数器
	SysTick->CTRL=0x01 ;      //开始倒数 	 
	do
	{
		temp=SysTick->CTRL;
	}
	while(temp&0x01&&!(temp&(1<<16)));//等待时间到达   
	SysTick->CTRL=0x00;       //关闭计数器
	SysTick->VAL =0X00;       //清空计数器	 
}

这个延时函数是很经典的写法,详解可见:【总结】单片机重点知识总结记录(存储管理+STM32滴答定时器)-CSDN博客

         底层驱动文件:

这个文件包含GPIO初始化以及软件SPI时序的实现。

        GUI界面文件:

主要是实现UI界面的功能函数。

        测试demo:

2.移植至F4

创建工程:

        笔者选择使用CubeMX创建工程,Hal库开发:

        调试接口选择SW:

        RCC中HSE选择外部晶振:

        GPIO配置不变:

        时钟树暂时仍固定72MHz:

然后生成工程即可。

导入文件:

在工程文件夹中创建一个LCD文件夹复制例程文件至此:

头文件路径添加LCD文件夹:

修改文件:

前置:

向所有.h文件(用了u8,u16,u32的)中添加以下定义:

#ifndef u8
#define u8 uint8_t
#endif

#ifndef u16
#define u16 uint16_t
#endif

#ifndef u32
#define u32 uint32_t
#endif
!Lcd_Driver.h文件!

这个文件很重要。

添加#include "stdint.h"头文件,并

将以上宏定义都改为:

//液晶控制口置1操作语句宏定义

#define	LCD_SCL_SET  	LCD_CTRLA->BSRR=LCD_SCL     
#define	LCD_SDA_SET  	LCD_CTRLA->BSRR=LCD_SDA    
#define	LCD_CS_SET  	LCD_CTRLA->BSRR=LCD_CS 
    
#define	LCD_LED_SET  	LCD_CTRLB->BSRR=LCD_LED   
#define	LCD_RS_SET  	LCD_CTRLB->BSRR=LCD_RS 
#define	LCD_RST_SET  	LCD_CTRLB->BSRR=LCD_RST
//液晶控制口置0操作语句宏定义

#define	LCD_SCL_CLR  	LCD_CTRLA->BSRR = (uint32_t)LCD_SCL << 16U  
#define	LCD_SDA_CLR  	LCD_CTRLA->BSRR = (uint32_t)LCD_SDA << 16U   
#define	LCD_CS_CLR  	LCD_CTRLA->BSRR = (uint32_t)LCD_CS << 16U  
                        
#define	LCD_LED_CLR  	LCD_CTRLB->BSRR = (uint32_t)LCD_LED << 16U    
#define	LCD_RST_CLR  	LCD_CTRLB->BSRR = (uint32_t)LCD_RST << 16U    
#define	LCD_RS_CLR  	LCD_CTRLB->BSRR = (uint32_t)LCD_RS << 16U

至于原因在这里不过多赘述,详情参考:【总结】单片机重点知识总结记录(存储管理+STM32滴答定时器)-CSDN博客

Lcd_Driver.c文件

中添加F4的头文件,去掉delay.h;初始化函数可以全部注释掉(因为我们已经在CubeMX中配置过相应的GPIO了);同时把文件中所有delay_ms()改成相应的HAL_Delay():

GUI.h文件

添加#include "stdint.h"

GUI.c文件

添加F4头文件,并替换延时函数为HAL_Delay():

GUITFT_demo.c文件

添加头文件,并修改延时函数,同时所有的测试字符串使用强制转换为指针类型,如下:

 向主函数中添加驱动文件

三.测试

在主函数中添加demo函数测试:

while (1)
  {
		QDTFT_Test_Demo();
	  
    /* USER CODE END WHILE */

    /* USER CODE BEGIN 3 */
  }

 编译下载:

 !!!成功!!!

标签:文件,延时,BSRR,LCD,彩屏,SysTick,TFT,移植,define
From: https://blog.csdn.net/2203_75993546/article/details/142887928

相关文章

  • docker以及nvidia-docker的安装、移植以及使用案例
    详细描述docker、nvidia-docker的安装步骤,通过案例描述docker的基本使用命令,包含docker创建、移植、加载等。文档真实案例编写,亲测可用,傻瓜式教程,直接复制即可成功安装。默认已经安装显卡驱动。一、docker的安装#由于apt官方库里的docker版本可能比较旧,所以先卸载可能......
  • 使用Tftpd32工具数据互传是一种什么体验?SSD201/202D开发板演示,深圳触觉智能嵌入式方
    本文介绍了Tftpd32工具的使用方法,在我们使用开发板过程中常常需要将电脑与开发板文件相互传输,在有网络(电脑和开发板要在同一个网段)的时候就可以通过Tftpd32工具进行文件传输。本次使用的是触觉智能的PurplePiR1双网口开发板演示,搭载了SigmaStarSSD201/SSD202D芯片,类树莓派设计,......
  • GD32F303移植FreeRTOS-Plus-CLI
    FreeRTOS移植好是没有命令行交互的,刚好系统提供了相关的代码,那么就方便多了。示例基于FreeRTOS-Kernel-9.0.0.zip,再次之前需要把系统移植完毕。移植FreeRTOS-Plus-CLI需要干好几件事串口初始化串口终端服务函数添加自己定制的命令下面讲添加哪些文件新建一个分组,放CLI相......
  • ESP32移植Openharmony设备开发---(1)环境搭建
    第一章环境搭建1.下载ubuntu创建虚拟机内存分配建议8G硬盘大于200G                                                                下载ubuntu20.04复制特征码打开迅雷即可下载5F5E8848426......
  • ESP32移植Openharmony设备开发---(3)任务调度
    任务调度官方文档:OpenAtomOpenHarmony基本概念从系统角度看,任务是竞争系统资源的最小运行单元。任务可以使用或等待CPU、使用内存空间等系统资源,各任务的运行相互独立。OpenHarmonyLiteOS-M的任务模块可以给用户提供多个任务,实现任务间的切换,帮助用户管理业务程序流程。......
  • 自定义DFS,DFT,DTFT函数并比较关系
    一、DFS(离散傅里叶级数)functiony=DFS(x,L)N=length(x);xi=[x;zeros(L-N,1)]; y=zeros(1,L);fork=1:Lsum=0; forn=1:Lsum=sum+xi(n)*exp(-2j*pi*k*n/L); end y(k)=sum; end end 二、DFT(离散傅里叶变换) functiony=DFT(x,L)N......
  • 【嵌入式裸机开发】基于stm32的照相机(OV7670摄像头、STM32、TFTLCD)
    基于STM32的照相机准备工作最终效果一、下位机1、主函数2、OV7670初始化二、上位机1、控制拍照2、接收图片数据准备工作一、硬件及片上资源:1,串口1(波特率:921600,PA9/PA10通过usb转ttl连接电脑,或者其他方法)上传图片数据至上位机2,串口2(波特率:115200,PA2/PA3......
  • 向带有BLE从机的代码中移植BackupOTA备份升级
    目录Backup升级方式,涉及到头/源文件的修改,代码改动量相比Onlyupdata升级方式来讲要更大。Backup升级的优点:升级无需跳转,通过基于24年9月9日的CH592EVT移植后的APP层工程见链接:通过网盘分享的文件:592Peripheral_Extract_BackupOTA.zip链接:https://pan.baidu.com/s/17lTmvSdYH......
  • Github_以太网开源项目verilog-ethernet代码阅读与移植(五)
    实验背景在(四)中介绍了Github开源项目verilog-ethernet的移植思路,以及对MII接口和数据链路层等功能的仿真,下面介绍数据的跨时钟域传输,以太网数据传输过程和网络层数据传输相关的移植。实验内容数据的跨时钟域传输处理,以太网数据传输过程和网络层数据传输模块介绍与仿真。......
  • 在新ARM板上移植U-Boot和Linux指南
    序言从支持一个定制板子在U-Boot和Linux中的过程中得到经验以一个带有知名SoC(i.MX6)且IP已经得到支持的板子为例,这次讨论几乎不涉及编码技能,更多地聚焦在U-Boot部分一般原则如果您有您的BSP(板级支持包)的源代码,请编译并运行BSP以:验证您正在工作的IP(知识产权/硬件模块)能......