STM32实现1.8寸液晶屏 LCD SPI串口显示屏模块 TFT彩屏(标准库和HAL库实现)

目录

一、所选模块

液晶模块选择(淘宝上均有售卖)

模块引脚

二、嵌入式单片机型号

三、接线表设计

四、开发环境版本说明

五、标准库实现

六、HAL库实现

七、完整工程(内含标准库和HAL库源码)

代码链接


一、所选模块

液晶模块选择(淘宝上均有售卖)

1.8寸液晶屏 LCD SPI串口显示屏模块 TFT彩屏

模块引脚

二、嵌入式单片机型号

本博客选用的单片机型号:STM32F103C8T6

该款单片机应用就多,相对性价比较高。

三、接线表设计

由于液晶模块采用的是SPI通信,但这里均使用模拟SPI的方式进行通信,实现液晶显示(后面博客会使用STM32自带的SPI功能实现数据传输)。

TFT真彩屏 液晶模块 STM32F103C8T6
GND 电源地
VCC 接5V或3.3v电源
SCL PA6(SCL)
SDA PA7(SDA)
RES PB0
DC PB1
CS PB10 
BL PB11

因为液晶模块主要用于显示功能,而且是模拟SPI通信,这里的所以的IO口均设置成推挽输出模式。引脚接线是依据需要修改的,但需要大家修改完全,不然不能成功。

四、开发环境版本说明

标准库的开发环境:

HAL库开发环境:

STMCUBEMX、KEIL5

五、标准库实现

由于工程文件较多,只给出部分核心代码,供大家参考,博文最后会有全套代码给大家。

main.c

#include "stm32f10x.h"
#include "delay.h"
#include "QDTFT_demo.h"
#include "Lcd_Driver.h"
#include "GUI.h"
#include "stdio.h"
#include "string.h"


int main(void)
{
  SystemInit();	//System init.
  delay_init(72);//Delay init.
	Lcd_Init();
	LCD_BL_SET;//通过IO控制背光亮		
	
  while(1)
  {  		
		QDTFT_Test_Demo();
  }

}

Lcd_Driver.c

//	 
//本程序只供学习使用,未经作者许可,不得用于其它任何用途
//中景园电子
//店铺地址:http://shop73023976.taobao.com/?spm=2013.1.0.0.M4PqC2
//
//  文 件 名   : main.c
//  版 本 号   : v2.0
//  作    者   : HuangKai
//  生成日期   : 2014-0101
//  最近修改   : 
//  功能描述   : 1.8寸LCD 4接口演示例程(STM32系列)
/******************************************************************************
//本程序适用与STM32F103C8
//              GND   电源地
//              VCC   接5V或3.3v电源
//              SCL   接PA6(SCL)
//              SDA   接PA7(SDA)
//              RES   接PB0
//              DC    接PB1
//              CS    接PB10 
//							BL		接PB11
*******************************************************************************/
// 修改
### 使用SPI口驱动TFT LCD显示屏 尽管提供的参考资料主要讨论了通过FSMC口来控制TFT LCD显示屏[^1],这里将介绍如何使用SPI实现相同的功能。SPI(Serial Peripheral Interface)是一种同步串行通信协议,在嵌入式系统中广泛用于连微控制器其他外围设备。 #### SPI口简介 SPI通常由四条信号线组成:MOSI(Master Out Slave In)、MISO(Master In Slave Out)、SCK(Serial Clock),以及SS/CS(Slave Select)。对于大多数TFT LCD模块来说,仅需使用其中三条线——即MOSI、SCKCS;而有些情况下还需要额外的数据命令选择线DC(Data/Command select line)重置线RESET。 #### TFT LCDSTM32SPI线方式 根据常见的引脚定义[^2],可以得出如下表所示的标准SPI法: | 功能 | 描述 | STM32 GPIO | |------|------------|-----------| | GND | 地 | 地 | | VCC | 供电电压 | 3.3V | | MOSI | 主发送 | PA7 (SPI1) | | SCLK | 同步时钟 | PA5 (SPI1) | | CS | 片选信号 | PA4 | | DC | 数据/指令选择 | PA3 | | RESET| 复位信号 | PA2 | 请注意实际应用中的具体型号可能有所不同,因此建议查阅所使用的特定TFT LCD数据手册确认具体的管脚分配。 #### 初始化设置及配置 为了使能SPI外设并正确配置它以适配TFT LCD的操作需求,下面给出了一段C语言代码片段作为参考: ```c #include "stm32f1xx_hal.h" // 定义SPI句柄结构体实例化对象 extern SPI_HandleTypeDef hspi1; void MX_SPI1_Init(void){ /* USER CODE BEGIN SPI1_Init 0 */ /* USER CODE END SPI1_Init 0 */ hspi1.Instance = SPI1; hspi1.Init.Mode = SPI_MODE_MASTER; // 设置为主模式 hspi1.Init.Direction = SPI_DIRECTION_2LINES;// 双向传输方向 hspi1.Init.DataSize = SPI_DATASIZE_8BIT; // 数据大小为一字节(8bit) hspi1.Init.CLKPolarity = SPI_POLARITY_LOW; // 时钟极性低电平有效 hspi1.Init.CLKPhase = SPI_PHASE_1EDGE; // 第一沿采样 hspi1.Init.NSS = SPI_NSS_SOFT; // 软件管理NSS信号 hspi1.Init.BaudRatePrescaler = SPI_BAUDRATEPRESCALER_16; // 波特率预分频器设定 hspi1.Init.FirstBit = SPI_FIRSTBIT_MSB; // MSB先传 HAL_SPI_Init(&hspi1); // 初始化SPI } /** * @brief 发送单字节到LCD * @param data 待发送的数据 */ static void spi_write_byte(uint8_t data){ while(HAL_SPI_GetState(&hspi1)!=HAL_SPI_STATE_READY); HAL_GPIO_WritePin(GPIOA,GPIO_PIN_4,GPIO_PIN_RESET);//拉低片选 HAL_SPI_Transmit(&hspi1,&data,sizeof(data),HAL_MAX_DELAY); HAL_GPIO_WritePin(GPIOA,GPIO_PIN_4,GPIO_PIN_SET); //恢复高阻态 } ``` 这段程序展示了如何初始化SPI端口,并提供了一个简单的函数`spi_write_byte()`用来向TFT LCD写入单一字符。这只是一个基础框架,完整的文件会包含更多功能比如读取状态寄存器、执行各种显示操作等。
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小材大用

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值