你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

STM32G030F6P6基于HAL库模拟SPI驱动1.8寸TFT LCD屏幕

[复制链接]
STMCU小助手 发布时间:2022-11-27 22:00
1 硬件介绍
1.1硬件模块介绍
      系统硬件主要STM32G030F6P6最小系统开发板、ST-LINK V2程序下载调试器和1.8‘ TFT LCD液晶屏,驱动芯片为ST7735。
微信图片_20221126220342.jpg
1.2LCD端口含义
SPI接口的LCD引脚有8脚,如图所示.其中GND和VCC是液晶的电源引脚,VCC接3.3V。SCL和SDA分别为SPI的时钟信号线和数据线。RES为LCD的复位信号,可以有STM32控制其复位。DC为数据/命令选择端,低电平写命令,高电平写数据。CS为液晶屏片选信号,低电平使能;BL为背光信号,低电平关闭背光。
3 W9 C# O0 @. T* L$ `
微信图片_20221126220339.png
! t+ I8 r1 @( Z% y
1.3LCD与STM32连接
最小系统板原理图如下图,LCD与STM32接线如下。
        LCD_VCC---->H1的3脚VCC_3V3
! |. R. e4 f) k7 A% e
        LCD_GND--->H1的2脚GND
0 R. J1 f; f- f$ d4 c/ U
        LCD_SCL---->H2的12脚----->STM32的PA4
        LCD_SDA---->H2的11脚----->STM32的PA5
9 {# z# l  N, a, j
        LCD_RES---->H2的10脚----->STM32的PA6
        LCD_DC---->H2的9脚----->STM32的PA71 B( ?  X  s/ Q4 C& }1 ]+ G' z
        LCD_CS---->H2的8脚----->STM32的PA8
        LCD_BL---->H2的7脚----->STM32的PA11
& h  X- H7 l" R6 x! `6 ~1 f
微信图片_20221126220335.png

, s8 f! f* z+ I( t' o2 c
2 如何利用STM32G030F6P6 驱动SPI LCD显示屏
- |) B4 P) a5 r- T- h. c
2.1*Cub配置基本工程
     首先利用CubeMX工具进行基本配置,时钟采用芯片内部高速时钟,所有用到的IO全部配置推免输出模式,配置如下图所示。
微信图片_20221126220327.png
微信图片_20221126220323.png
2.2 *LCD液晶屏驱动程序*
  LCD液晶屏SPI驱动程序是基于合宙1.8'TFTLCD标准库函数SPI示例程序修改的。标准库函数例程和本案例完整代码工程获取方式为公众号回复SPI LCD驱动获取下载地址。
      修改内容:
      (1)修改lcd_init.h、lcd_init.c、lcd.h和lcd.c,将四个文件中u8改为uint8_t,u16改为uint16_t,u32改为uint32_t.
     (2)删除lcd.h中的#include "sys.h",删除lcd_init.h中的#include "delay.h"
       (3)修改lcd_init.c和lcd.c中的delay_ms(100)为HAL_Delay(100);
      (4)修改lcd_init.h中对LCD端口定义的置为和复位操作,为HAL库操作。
7 T4 y0 {3 P  e6 w
      (5)删除lcd_init.h中void LCD_GPIO_Init(void);//初始化GPIO声明以及lcd_init.c实现;因为初始化应在main函数中MX_GPIO_Init()实现。
通过以上5步SPI驱动就移植好了。改动最大的就是lcd_init.h,修改之后lcd_init.h的代码如下,完整代码回复SPI LCD驱动获取。
#ifndef __LCD_INIT_H
#define __LCD_INIT_H

. w5 K- ~2 v8 w8 h/ f
#include "main.h"
/ Y, D$ a  o1 C9 \) x. w+ Q) {, k: M5 v
#define USE_HORIZONTAL 1  //设置横屏或者竖屏显示 0或1为竖屏 2或3为横屏

8 [- O6 {# p( @7 S* ^( g
#if USE_HORIZONTAL==0||USE_HORIZONTAL==1
#define LCD_W 128
#define LCD_H 160

  t* T% J/ L. E4 I/ X- A
#else
#define LCD_W 160
#define LCD_H 128
#endif
2 P' o: K/ \- e1 N# I4 [
//-----------------LCD端口定义----------------

( ?3 E0 j, G0 U- l& D/ y
#define LCD_SCLK_Clr() HAL_GPIO_WritePin(GPIOA, LCD_SCL_Pin, GPIO_PIN_RESET);//SCL=SCLK
#define LCD_SCLK_Set() HAL_GPIO_WritePin(GPIOA, LCD_SCL_Pin, GPIO_PIN_SET);
" K  D# L& [2 n+ }5 a& M! c
#define LCD_MOSI_Clr() HAL_GPIO_WritePin(GPIOA, LCD_SDA_Pin, GPIO_PIN_RESET);//SDA=MOSI
#define LCD_MOSI_Set() HAL_GPIO_WritePin(GPIOA, LCD_SDA_Pin, GPIO_PIN_SET);
$ l8 M' P" d; i# `
#define LCD_RES_Clr()  HAL_GPIO_WritePin(GPIOA, LCD_RES_Pin, GPIO_PIN_RESET);//RES
#define LCD_RES_Set()  HAL_GPIO_WritePin(GPIOA, LCD_RES_Pin, GPIO_PIN_SET);
& K0 H: r6 A  r; U+ u
#define LCD_DC_Clr()   HAL_GPIO_WritePin(GPIOA, LCD_DC_Pin, GPIO_PIN_RESET);//DC
#define LCD_DC_Set()   HAL_GPIO_WritePin(GPIOA, LCD_DC_Pin, GPIO_PIN_SET);
      
#define LCD_CS_Clr()   HAL_GPIO_WritePin(GPIOA, LCD_CS_Pin, GPIO_PIN_RESET);//CS
#define LCD_CS_Set()   HAL_GPIO_WritePin(GPIOA, LCD_CS_Pin, GPIO_PIN_SET);
! @8 E! {" y9 N, G! J! R
#define LCD_BLK_Clr()  HAL_GPIO_WritePin(GPIOA, LCD_BL_Pin, GPIO_PIN_RESET);//BLK
#define LCD_BLK_Set()  HAL_GPIO_WritePin(GPIOA, LCD_BL_Pin, GPIO_PIN_SET);

. f1 ^6 d8 T! y. e6 ^
void LCD_GPIO_Init(void);//初始化GPIO
void LCD_Writ_Bus(uint8_t dat);//模拟SPI时序
void LCD_WR_DATA8(uint8_t dat);//写入一个字节
void LCD_WR_DATA(uint16_t dat);//写入两个字节
void LCD_WR_REG(uint8_t dat);//写入一个指令
void LCD_Address_Set(uint16_t x1,uint16_t y1,uint16_t x2,uint16_t y2);//设置坐标函数
void LCD_Init(void);//LCD初始化
#endif

7 ~8 V7 ~+ b3 O4 z* A+ O/ a- w
3 测试
在使用LCD屏显示之前,要先进行初始化,调用LAC_Init()函数,在main函数中添加如下代码。

# `& n) c% U4 \5 F1 K
微信图片_20221126220318.png
+ B$ [& I) L8 V' b* Z, v9 |, b/ y4 H

% S4 z2 G% }, G+ X; F7 S
      调用LCD_FILL背景填充函数,将背景色设为黑色。测试一下液晶屏显示字符函数、画圆形函数和浮点数字显示函数。关于这些函数的功能说明在LCD.C中都有介绍,这就不再详细介绍。下图是测试代码实际显示效果。
微信图片_20221126220313.jpg
/ a% @% ?6 u: _# ~# L( `+ S
转载自:MCU学习笔记
  O( V3 t1 P; o- ~/ t/ A+ o
赞 收藏 评论1 发布时间:2022-11-27 22:00

举报

1个回答
3182579662@qq.c 回答时间:2024-3-30 16:00:02

SPI LCD驱动

所属标签

相似技术帖

官网相关资源

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
人形机器人运动控制、感知与智能配电
半导体创新技术与应用方向
EE架构与软件定义汽车
12V/48V 汽车智能配电(SPD)
区域控制单元(ZCU)与分区架构
关注我们
st-img 微信公众号
st-img 手机版