1 硬件介绍 1.1硬件模块介绍 系统硬件主要STM32G030F6P6最小系统开发板、ST-LINK V2程序下载调试器和1.8‘ TFT LCD液晶屏,驱动芯片为ST7735。 1.2LCD端口含义 SPI接口的LCD引脚有8脚,如图所示.其中GND和VCC是液晶的电源引脚,VCC接3.3V。SCL和SDA分别为SPI的时钟信号线和数据线。RES为LCD的复位信号,可以有STM32控制其复位。DC为数据/命令选择端,低电平写命令,高电平写数据。CS为液晶屏片选信号,低电平使能;BL为背光信号,低电平关闭背光。 1.3LCD与STM32连接 最小系统板原理图如下图,LCD与STM32接线如下。 LCD_VCC---->H1的3脚VCC_3V3 LCD_GND--->H1的2脚GND LCD_SCL---->H2的12脚----->STM32的PA4 LCD_SDA---->H2的11脚----->STM32的PA5) ?% U5 \3 y* D8 s. F LCD_RES---->H2的10脚----->STM32的PA6 LCD_DC---->H2的9脚----->STM32的PA7# s4 T% O$ J2 L0 g4 j0 y LCD_CS---->H2的8脚----->STM32的PA8 LCD_BL---->H2的7脚----->STM32的PA11 1 w: k% m" f* a# O9 E* O5 H2 如何利用STM32G030F6P6 驱动SPI LCD显示屏 2.1*Cub配置基本工程 首先利用CubeMX工具进行基本配置,时钟采用芯片内部高速时钟,所有用到的IO全部配置推免输出模式,配置如下图所示。 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库操作。4 H# V9 u2 h% [8 {. K a (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 3 A2 m0 K7 t0 P- y. Y7 S#include "main.h" ! g. X7 G9 b! C5 d+ `6 y#define USE_HORIZONTAL 1 //设置横屏或者竖屏显示 0或1为竖屏 2或3为横屏 ( q9 T0 E6 }2 V: ]#if USE_HORIZONTAL==0||USE_HORIZONTAL==1 #define LCD_W 128 #define LCD_H 160 #else #define LCD_W 160 #define LCD_H 128 #endif //-----------------LCD端口定义---------------- . e4 K4 _( a( e! h. n {#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); #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); 2 A; h3 B: F" P1 i r; A( ^/ {#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); 7 I' l% `- J% h. h1 b#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); " T! q! }. R# K4 F9 K% W* i#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); 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 2 w# m2 P- g; a. h/ E2 n 3 测试 在使用LCD屏显示之前,要先进行初始化,调用LAC_Init()函数,在main函数中添加如下代码。 6 S' L9 c# B6 g _$ V) U: e. [' w( a9 B4 X) K 调用LCD_FILL背景填充函数,将背景色设为黑色。测试一下液晶屏显示字符函数、画圆形函数和浮点数字显示函数。关于这些函数的功能说明在LCD.C中都有介绍,这就不再详细介绍。下图是测试代码实际显示效果。 转载自:MCU学习笔记 |
X-NUCLEO-IKS4A1实现手势滑动
STM32G系列RS485自动收发控制以及自适应波特率实战
STM32G0系列ADC扫描序列模式解读
STM32固件库分享,超全系列整理
【经验分享】FPGA作为从机与STM32进行SPI协议通信---Verilog实现
【管管推荐】STM32经验分享篇
STM32的CAN FD位定时设置注意事项
基于STM32将移植 SBSFU 到 STM32G070过程分享
基于STM32G030 RAM不够用经验分享
STM32G070在OLED上移植U8G2单色GUI
SPI LCD驱动