你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。
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$ \ 1.3lcd与stm32连接 最小系统板原理图如下图,lcd与stm32接线如下。 lcd_vcc---->h1的3脚vcc_3v3 lcd_gnd--->h1的2脚gnd% m7 _6 a; s6 z. {- h# g lcd_scl---->h2的12脚----->stm32的pa4 lcd_sda---->h2的11脚----->stm32的pa5 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 f2 如何利用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库操作。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 #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 #else #define lcd_w 160 #define lcd_h 128 #endif //-----------------lcd端口定义---------------- #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); #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 0 w$ r/ d- k# z/ q6 _$ c 3 测试 在使用lcd屏显示之前,要先进行初始化,调用lac_init()函数,在main函数中添加如下代码。 o) n/ u) @6 x2 z( {$ c* p 调用lcd_fill背景填充函数,将背景色设为黑色。测试一下液晶屏显示字符函数、画圆形函数和浮点数字显示函数。关于这些函数的功能说明在lcd.c中都有介绍,这就不再详细介绍。下图是测试代码实际显示效果。 转载自:mcu学习笔记 |
spi lcd驱动