STM32F411 标准库硬件SPI (硬件NSS/CS)驱动st7735--1.8寸TFT显示屏

2024-08-30 10:52

本文主要是介绍STM32F411 标准库硬件SPI (硬件NSS/CS)驱动st7735--1.8寸TFT显示屏,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

TFT的spi驱动文件 完整工程网盘放在末尾

#include "lcd_driver.h"static uint16_t SPI_TIMEOUT_UserCallback(uint8_t errorCode);//液晶IO初始化配置
void LCD_Driver_Init(void)
{SPI_InitTypeDef  SPI_InitStructure;GPIO_InitTypeDef GPIO_InitStructure;/* 使能 LCD_SPI 及GPIO 时钟 *//*!< SPI_LCD_SPI_CS_GPIO, SPI_LCD_SPI_MOSI_GPIO, SPI_LCD_SPI_MISO_GPIO,SPI_LCD_SPI_SCK_GPIO 时钟使能 */RCC_AHB1PeriphClockCmd (LCD_SPI_SCK_GPIO_CLK|LCD_SPI_MOSI_GPIO_CLK|LCD_CS_GPIO_CLK, ENABLE);/*!< SPI_LCD_SPI 时钟使能 */LCD_SPI_CLK_INIT(LCD_SPI_CLK, ENABLE);//设置引脚复用GPIO_PinAFConfig(LCD_SPI_SCK_GPIO_PORT,LCD_SPI_SCK_PINSOURCE,LCD_SPI_SCK_AF);  GPIO_PinAFConfig(LCD_SPI_MOSI_GPIO_PORT,LCD_SPI_MOSI_PINSOURCE,LCD_SPI_MOSI_AF); GPIO_PinAFConfig(LCD_CS_GPIO_PORT,LCD_SPI_CS_PINSOURCE,LCD_SPI_CS_AF); /*!< 配置 SPI_LCD_SPI 引脚: SCK */GPIO_InitStructure.GPIO_Pin = LCD_SPI_SCK_PIN;GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL;  GPIO_Init(LCD_SPI_SCK_GPIO_PORT, &GPIO_InitStructure);/*!< 配置 SPI_LCD_SPI 引脚: MOSI */GPIO_InitStructure.GPIO_Pin = LCD_SPI_MOSI_PIN;GPIO_Init(LCD_SPI_MOSI_GPIO_PORT, &GPIO_InitStructure);  /*!< 配置 SPI_LCD_SPI 引脚: CS */GPIO_InitStructure.GPIO_Pin = LCD_CS_PIN;GPIO_Init(LCD_CS_GPIO_PORT, &GPIO_InitStructure);GPIO_InitStructure.GPIO_Pin = LCD_DC_PIN;GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT;GPIO_Init(LCD_DC_GPIO_PORT, &GPIO_InitStructure);GPIO_InitStructure.GPIO_Pin = LCD_RES_PIN;GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT;GPIO_Init(LCD_RES_GPIO_PORT, &GPIO_InitStructure);GPIO_InitStructure.GPIO_Pin = LCD_BLK_PIN;GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT;GPIO_Init(LCD_BLK_GPIO_PORT, &GPIO_InitStructure);/* 停止信号 LCD: CS引脚高电平*///SPI_LCD_CS_HIGH();/* LCD_SPI 模式配置 */// LCD芯片 支持SPI模式0及模式3,据此设置CPOL CPHASPI_InitStructure.SPI_Direction = SPI_Direction_2Lines_FullDuplex;SPI_InitStructure.SPI_Mode = SPI_Mode_Master;SPI_InitStructure.SPI_DataSize = SPI_DataSize_8b;SPI_InitStructure.SPI_CPOL = SPI_CPOL_High;SPI_InitStructure.SPI_CPHA = SPI_CPHA_2Edge;SPI_InitStructure.SPI_NSS = SPI_NSS_Hard;SPI_InitStructure.SPI_BaudRatePrescaler = SPI_BaudRatePrescaler_2;SPI_InitStructure.SPI_FirstBit = SPI_FirstBit_MSB;SPI_InitStructure.SPI_CRCPolynomial = 7;SPI_Init(LCD_SPI, &SPI_InitStructure);/* 使能 LCD_SPI  */SPI_Cmd(LCD_SPI, ENABLE);SPI_SSOutputCmd(LCD_SPI,ENABLE);SPI_CalculateCRC(LCD_SPI,DISABLE);SPI_ClearFlag(LCD_SPI,SPI_FLAG_TXE);SPI_ClearFlag(LCD_SPI,SPI_FLAG_RXNE);
}//向SPI总线传输一个8位数据
void  SPI_WriteData(u8 Data)
{while(SPI_I2S_GetFlagStatus(LCD_SPI,SPI_I2S_FLAG_TXE)==RESET);SPI_SendData(LCD_SPI,Data);//	unsigned char i=0;
//	for(i=8;i>0;i--)
//	{
//		if(Data&0x80)	
//	  LCD_SDA_SET; //输出数据
//      else LCD_SDA_CLR;
//	   
//      LCD_SCL_CLR;       
//      LCD_SCL_SET;
//      Data<<=1; 
//	}
}//向液晶屏写一个8位指令
void Lcd_WriteIndex(u8 Index)
{//SPI 写命令时序开始SPI_LCD_CS_LOW();SPI_LCD_DC_LOW();SPI_WriteData(Index);SPI_LCD_CS_HIGH();
}//向液晶屏写一个8位数据
void Lcd_WriteData(u8 Data)
{SPI_LCD_CS_LOW();SPI_LCD_DC_HIGH();SPI_WriteData(Data);SPI_LCD_CS_HIGH();
}//向液晶屏写一个16位数据
void LCD_WriteData_16Bit(u16 Data)
{SPI_LCD_CS_LOW();SPI_LCD_DC_HIGH();SPI_WriteData(Data>>8); 	//写入高8位数据SPI_WriteData(Data); 		//写入低8位数据SPI_LCD_CS_HIGH();
}void Lcd_WriteReg(u8 Index,u8 Data)
{Lcd_WriteIndex(Index);Lcd_WriteData(Data);
}void Lcd_Reset(void)
{SPI_LCD_RES_LOW();delay_ms(100);SPI_LCD_RES_HIGH();delay_ms(50);
}//LCD Init For 1.44Inch LCD Panel with ST7735R.
void Lcd_Init(void)
{	LCD_Driver_Init();Lcd_Reset(); //Reset before LCD Init.//LCD Init For 1.44Inch LCD Panel with ST7735R.Lcd_WriteIndex(0x11);//Sleep exit delay_ms (120);//ST7735R Frame RateLcd_WriteIndex(0xB1); Lcd_WriteData(0x01); Lcd_WriteData(0x2C); Lcd_WriteData(0x2D); Lcd_WriteIndex(0xB2); Lcd_WriteData(0x01); Lcd_WriteData(0x2C); Lcd_WriteData(0x2D); Lcd_WriteIndex(0xB3); Lcd_WriteData(0x01); Lcd_WriteData(0x2C); Lcd_WriteData(0x2D); Lcd_WriteData(0x01); Lcd_WriteData(0x2C); Lcd_WriteData(0x2D); Lcd_WriteIndex(0xB4); //Column inversion Lcd_WriteData(0x07); //ST7735R Power SequenceLcd_WriteIndex(0xC0); Lcd_WriteData(0xA2); Lcd_WriteData(0x02); Lcd_WriteData(0x84); Lcd_WriteIndex(0xC1); Lcd_WriteData(0xC5); Lcd_WriteIndex(0xC2); Lcd_WriteData(0x0A); Lcd_WriteData(0x00); Lcd_WriteIndex(0xC3); Lcd_WriteData(0x8A); Lcd_WriteData(0x2A); Lcd_WriteIndex(0xC4); Lcd_WriteData(0x8A); Lcd_WriteData(0xEE); Lcd_WriteIndex(0xC5); //VCOM Lcd_WriteData(0x0E); Lcd_WriteIndex(0x36); //MX, MY, RGB mode Lcd_WriteData(0xC0); //ST7735R Gamma SequenceLcd_WriteIndex(0xe0); Lcd_WriteData(0x0f); Lcd_WriteData(0x1a); Lcd_WriteData(0x0f); Lcd_WriteData(0x18); Lcd_WriteData(0x2f); Lcd_WriteData(0x28); Lcd_WriteData(0x20); Lcd_WriteData(0x22); Lcd_WriteData(0x1f); Lcd_WriteData(0x1b); Lcd_WriteData(0x23); Lcd_WriteData(0x37); Lcd_WriteData(0x00); 	Lcd_WriteData(0x07); Lcd_WriteData(0x02); Lcd_WriteData(0x10); Lcd_WriteIndex(0xe1); Lcd_WriteData(0x0f); Lcd_WriteData(0x1b); Lcd_WriteData(0x0f); Lcd_WriteData(0x17); Lcd_WriteData(0x33); Lcd_WriteData(0x2c); Lcd_WriteData(0x29); Lcd_WriteData(0x2e); Lcd_WriteData(0x30); Lcd_WriteData(0x30); Lcd_WriteData(0x39); Lcd_WriteData(0x3f); Lcd_WriteData(0x00); Lcd_WriteData(0x07); Lcd_WriteData(0x03); Lcd_WriteData(0x10);  Lcd_WriteIndex(0x2a);Lcd_WriteData(0x00);Lcd_WriteData(0x00);Lcd_WriteData(0x00);Lcd_WriteData(0x7f);Lcd_WriteIndex(0x2b);Lcd_WriteData(0x00);Lcd_WriteData(0x00);Lcd_WriteData(0x00);Lcd_WriteData(0x9f);Lcd_WriteIndex(0xF0); //Enable test command  Lcd_WriteData(0x01); Lcd_WriteIndex(0xF6); //Disable ram power save mode Lcd_WriteData(0x00); Lcd_WriteIndex(0x3A); //65k mode Lcd_WriteData(0x05); Lcd_WriteIndex(0x29);//Display on	 
}/*************************************************
函数名:LCD_Set_Region
功能:设置lcd显示区域,在此区域写点数据自动换行
入口参数:xy起点和终点
返回值:无
*************************************************/
void Lcd_SetRegion(u16 x_start,u16 y_start,u16 x_end,u16 y_end)
{		Lcd_WriteIndex(0x2a);Lcd_WriteData(0x00);Lcd_WriteData(x_start);//Lcd_WriteData(x_start+2);Lcd_WriteData(0x00);Lcd_WriteData(x_end+2);Lcd_WriteIndex(0x2b);Lcd_WriteData(0x00);Lcd_WriteData(y_start+0);Lcd_WriteData(0x00);Lcd_WriteData(y_end+1);Lcd_WriteIndex(0x2c);}/*************************************************
函数名:LCD_Set_XY
功能:设置lcd显示起始点
入口参数:xy坐标
返回值:无
*************************************************/
void Lcd_SetXY(u16 x,u16 y)
{Lcd_SetRegion(x,y,x,y);
}/*************************************************
函数名:LCD_DrawPoint
功能:画一个点
入口参数:无
返回值:无
*************************************************/
void Gui_DrawPoint(u16 x,u16 y,u16 Data)
{Lcd_SetRegion(x,y,x+1,y+1);LCD_WriteData_16Bit(Data);}    /*****************************************函数功能:读TFT某一点的颜色                          出口参数:color  点颜色值                                 
******************************************/
unsigned int Lcd_ReadPoint(u16 x,u16 y)
{unsigned int Data;Lcd_SetXY(x,y);//Lcd_ReadData();//丢掉无用字节//Data=Lcd_ReadData();Lcd_WriteData(Data);return Data;
}
/*************************************************
函数名:Lcd_Clear
功能:全屏清屏函数
入口参数:填充颜色COLOR
返回值:无
*************************************************/
void Lcd_Clear(u16 Color)               
{	unsigned int i,m;Lcd_SetRegion(0,0,X_MAX_PIXEL-1,Y_MAX_PIXEL-1);Lcd_WriteIndex(0x2C);for(i=0;i<X_MAX_PIXEL;i++)for(m=0;m<Y_MAX_PIXEL;m++){	LCD_WriteData_16Bit(Color);}   
}
#ifndef _LCD_DRIVER_H
#define _LCD_DRIVER_H#include "main.h"#define X_MAX_PIXEL	        128
#define Y_MAX_PIXEL	        160
#define RED  	0xf800
#define GREEN	0x07e0
#define BLUE 	0x001f
#define WHITE	0xffff
#define BLACK	0x0000
#define YELLOW  0xFFE0
#define GRAY0   0xEF7D   	//灰色0 3165 00110 001011 00101
#define GRAY1   0x8410      	//灰色1      00000 000000 00000
#define GRAY2   0x4208      	//灰色2  1111111111011111
#define SPIT_FLAG_TIMEOUT         ((uint32_t)0x1000)/*SPI接口定义-开头****************************/
#define LCD_SPI                           SPI1
#define LCD_SPI_CLK                       RCC_APB2Periph_SPI1
#define LCD_SPI_CLK_INIT                  RCC_APB2PeriphClockCmd#define LCD_SPI_SCK_PIN                   GPIO_Pin_3                  
#define LCD_SPI_SCK_GPIO_PORT             GPIOB                       
#define LCD_SPI_SCK_GPIO_CLK              RCC_AHB1Periph_GPIOB
#define LCD_SPI_SCK_PINSOURCE             GPIO_PinSource3
#define LCD_SPI_SCK_AF                    GPIO_AF_SPI1#define LCD_SPI_MOSI_PIN                  GPIO_Pin_5                
#define LCD_SPI_MOSI_GPIO_PORT            GPIOB                     
#define LCD_SPI_MOSI_GPIO_CLK             RCC_AHB1Periph_GPIOB
#define LCD_SPI_MOSI_PINSOURCE            GPIO_PinSource5
#define LCD_SPI_MOSI_AF                   GPIO_AF_SPI1#define LCD_CS_PIN                        GPIO_Pin_15         
#define LCD_CS_GPIO_PORT                  GPIOA                     
#define LCD_CS_GPIO_CLK                   RCC_AHB1Periph_GPIOA
#define LCD_SPI_CS_PINSOURCE              GPIO_PinSource15
#define LCD_SPI_CS_AF                     GPIO_AF_SPI1#define LCD_DC_PIN                        GPIO_Pin_4         
#define LCD_DC_GPIO_PORT                  GPIOB                     
#define LCD_DC_GPIO_CLK                   RCC_AHB1Periph_GPIOB#define LCD_RES_PIN                       GPIO_Pin_11         
#define LCD_RES_GPIO_PORT                 GPIOA                     
#define LCD_RES_GPIO_CLK                  RCC_AHB1Periph_GPIOA#define LCD_BLK_PIN                       GPIO_Pin_12         
#define LCD_BLK_GPIO_PORT                 GPIOA                     
#define LCD_BLK_GPIO_CLK                  RCC_AHB1Periph_GPIOA#define SPI_LCD_CS_LOW()      {LCD_CS_GPIO_PORT->BSRRH=LCD_CS_PIN;}
#define SPI_LCD_CS_HIGH()     {LCD_CS_GPIO_PORT->BSRRL=LCD_CS_PIN;}#define SPI_LCD_DC_LOW()      {LCD_DC_GPIO_PORT->BSRRH=LCD_DC_PIN;}
#define SPI_LCD_DC_HIGH()     {LCD_DC_GPIO_PORT->BSRRL=LCD_DC_PIN;}#define SPI_LCD_RES_LOW()      {LCD_RES_GPIO_PORT->BSRRH=LCD_RES_PIN;}
#define SPI_LCD_RES_HIGH()     {LCD_RES_GPIO_PORT->BSRRL=LCD_RES_PIN;}#define SPI_LCD_BLK_LOW()      {LCD_BLK_GPIO_PORT->BSRRH=LCD_BLK_PIN;}
#define SPI_LCD_BLK_HIGH()     {LCD_BLK_GPIO_PORT->BSRRL=LCD_BLK_PIN;}#define SPI_LCD_CS_LOW()      SPI_Cmd(LCD_SPI,ENABLE)
#define SPI_LCD_CS_HIGH()     SPI_Cmd(LCD_SPI,DISABLE)void Lcd_Init(void);#endif

通过百度网盘分享的文件:STM32F411 标准库硬件SPI (硬件NSSCS)驱动st773...
链接:https://pan.baidu.com/s/1rzlFB43WuDtu6jm7bpFVSQ?pwd=t58t 
提取码:t58t 
--来自百度网盘超级会员V5的分享

这篇关于STM32F411 标准库硬件SPI (硬件NSS/CS)驱动st7735--1.8寸TFT显示屏的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1120616

相关文章

2. c#从不同cs的文件调用函数

1.文件目录如下: 2. Program.cs文件的主函数如下 using System;using System.Collections.Generic;using System.Linq;using System.Threading.Tasks;using System.Windows.Forms;namespace datasAnalysis{internal static

Linux_kernel驱动开发11

一、改回nfs方式挂载根文件系统         在产品将要上线之前,需要制作不同类型格式的根文件系统         在产品研发阶段,我们还是需要使用nfs的方式挂载根文件系统         优点:可以直接在上位机中修改文件系统内容,延长EMMC的寿命         【1】重启上位机nfs服务         sudo service nfs-kernel-server resta

【STM32】SPI通信-软件与硬件读写SPI

SPI通信-软件与硬件读写SPI 软件SPI一、SPI通信协议1、SPI通信2、硬件电路3、移位示意图4、SPI时序基本单元(1)开始通信和结束通信(2)模式0---用的最多(3)模式1(4)模式2(5)模式3 5、SPI时序(1)写使能(2)指定地址写(3)指定地址读 二、W25Q64模块介绍1、W25Q64简介2、硬件电路3、W25Q64框图4、Flash操作注意事项软件SPI读写W2

数据治理框架-ISO数据治理标准

引言 "数据治理"并不是一个新的概念,国内外有很多组织专注于数据治理理论和实践的研究。目前国际上,主要的数据治理框架有ISO数据治理标准、GDI数据治理框架、DAMA数据治理管理框架等。 ISO数据治理标准 改标准阐述了数据治理的标准、基本原则和数据治理模型,是一套完整的数据治理方法论。 ISO/IEC 38505标准的数据治理方法论的核心内容如下: 数据治理的目标:促进组织高效、合理地

C 标准库 - `<float.h>`

C 标准库 - <float.h> 概述 <float.h> 是 C 标准库中的一个头文件,它定义了与浮点数类型相关的宏。这些宏提供了关于浮点数的属性信息,如精度、最小和最大值、以及舍入误差等。这个头文件对于需要精确控制浮点数行为的程序非常有用,尤其是在数值计算和科学计算领域。 主要宏 <float.h> 中定义了许多宏,下面列举了一些主要的宏: FLT_RADIX:定义了浮点数的基数。

驱动(RK3588S)第七课时:单节点设备树

目录 需求一、设备树的概念1、设备树的后缀名:2、设备树的语法格式3、设备树的属性(重要)4、设备树格式举例 二、设备树所用函数1、如何在内核层种获取设备树节点:2、从设备树上获取 gpio 口的属性3、获取节点上的属性只针对于字符串属性的4、函数读取 np 结点中的 propname 属性的值,并将读取到的 u32 类型的值保存在 out_value 指向的内存中,函数的返回值表示读取到的

《C++标准库》读书笔记/第一天(C++新特性(1))

C++11新特性(1) 以auto完成类型自动推导 auto i=42; //以auto声明的变量,其类型会根据其初值被自动推倒出来,因此一定需要一个初始化操作; static auto a=0.19;//可以用额外限定符修饰 vector<string> v;  auto pos=v.begin();//如果类型很长或类型表达式复杂 auto很有用; auto l=[] (int

驱动安装注册表指令

HKCR: HKEY_CLASSES_ROOT HKCU: HKEY_CURRENT_USER HKLM: HKEY_LOCAL_MACHINE HKU: HEKY_USER HER: 相对根键

UMDF驱动安装

VS2013 + WDF8.1,UMDF驱动选择User Mode Driver,不要选User Mode Driver 2.0,否则Win7安装有问题,如图 另外,在驱动安装时不要忘记WUDFUpdate_<主版本号><次版本号>.dll文件,具体文件名在INF中查找。此文件可在WDF的安装目录中找到。注意:在WDF的安装目录中会有3个WUDFUpdate_xxx.dll文件,x86,x6

全倒装COB超微小间距LED显示屏的工艺技术,相比SMD小间距有何优势

全倒装COB(Chip On Board)超微小间距LED显示屏,在工艺技术上的革新,相较于传统的SMD(Surface Mount Device)小间距LED显示屏,展现出了多方面的显著优势。 首先,全倒装技术极大地提升了LED芯片的散热性能。通过将芯片直接焊接在基板上,减少了热阻,使得热量能够更快速地传导至基板并散发出去,有效避免了因高温导致的光衰和色彩偏移问题,从而保证了显示屏的长期稳定性