stm32g030f6p6基于hal库模拟spi驱动1.8寸tft lcd屏幕 -pg电子直营网

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

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。
1.2lcd端口含义
spi接口的lcd引脚有8脚,如图所示.其中gnd和vcc是液晶的电源引脚,vcc接3.3v。scl和sda分别为spi的时钟信号线和数据线。res为lcd的复位信号,可以有stm32控制其复位。dc为数据/命令选择端,低电平写命令,高电平写数据。cs为液晶屏片选信号,低电平使能;bl为背光信号,低电平关闭背光。
* ?7 j3 s2 a9 b, e% x( f$ \

8 d  d- z. u; l: j" j! `, c/ p
1.3lcd与stm32连接
最小系统板原理图如下图,lcd与stm32接线如下。
        lcd_vcc---->h1的3脚vcc_3v3
" d  t5 w# @* x z
        lcd_gnd--->h1的2脚gnd% m7 _6 a; s6 z. {- h# g
        lcd_scl---->h2的12脚----->stm32的pa4
        lcd_sda---->h2的11脚----->stm32的pa5
# r6 c5 s) p: }: x
        lcd_res---->h2的10脚----->stm32的pa6
        lcd_dc---->h2的9脚----->stm32的pa74 ~& `# x- p1 v7 m9 n
        lcd_cs---->h2的8脚----->stm32的pa8
        lcd_bl---->h2的7脚----->stm32的pa11
, l; s# }% ^6 x; {5 p0 b0 f
- {7 y5 e, g1 s" x- x3 o6 z
2 如何利用stm32g030f6p6 驱动spi lcd显示屏
1 h9 }3 e- n& q. u, l* c: k2 _
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库操作。7 ?8 ]! @  _7 c- b* h
      (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

/ h6 h: m: }5 v- [/ e8 e2 a0 x
#include "main.h"
( f4 a& c0 y. c$ }0 r: ]4 i
#define use_horizontal 1  //设置横屏或者竖屏显示 0或1为竖屏 2或3为横屏
, l- ]3 a" f' `: `
#if use_horizontal==0||use_horizontal==1
#define lcd_w 128
#define lcd_h 160

, m9 v9 w& @" z) ] i& p5 e) z
#else
#define lcd_w 160
#define lcd_h 128
#endif

& r) y' m* d9 s7 m- j
//-----------------lcd端口定义----------------

, g* s& g r4 v7 w
#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);
" b7 b6 `$ ?# w2 o- c" b. q5 p
#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);
1 r; s% k2 d% g
#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);
3 a d8 ~% b) t- g
#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);

9 a  q8 m% |7 g* a5 s: p4 d
#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);

# h5 l/ v. q/ _' ^; \% k2 w
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
0 w$ r/ d- k# z/ q6 _$ c
3 测试
在使用lcd屏显示之前,要先进行初始化,调用lac_init()函数,在main函数中添加如下代码。
o) n/ u) @6 x2 z( {$ c* p
7 d$ x& d3 t1 h) u# h9 o

4 k i: m9 \0 m8 p. ~4 z
      调用lcd_fill背景填充函数,将背景色设为黑色。测试一下液晶屏显示字符函数、画圆形函数和浮点数字显示函数。关于这些函数的功能说明在lcd.c中都有介绍,这就不再详细介绍。下图是测试代码实际显示效果。

  g8 w k8 g* u& p
转载自:mcu学习笔记
p, b( n% v _) u! p) x# j8 d
发布时间:2022-11-27 22:00
1个回答
回答时间:2024-3-30 16:00:02

spi lcd驱动

关于意法半导体
联系pg电子有官方网站吗试玩
隐私策略
关注pg电子直营网
微信公众号
手机版
网站地图