瑞昱rtl8762芯片通过SPI控制st7789,从而实现LCD显示

本文介绍了如何使用瑞昱rtl8762芯片通过SPI接口控制st7789液晶显示屏,详细阐述了引脚分布、GPIO初始化、SPI结构体配置和st7789的初始化步骤。在初始化过程中,注意IO口的控制方式和SPI的配置,以避免显示问题。建议在调试时使用示波器或逻辑分析仪辅助分析波形。
摘要由CSDN通过智能技术生成


本人还在学习、摸索这款芯片,如有错误之处,欢迎指出。

1、引脚分布

引脚名称 引脚编号
SCK P2_6
MOSI P0_4
RESET P0_0
D\C P0_1
EN(未使用) P4_1

2、代码添加

1)引脚宏定义

	#define LCD_SPI                 SPI0
	#define LCD_SCK_PIN             P2_6                                //< lcd 时钟线
	#define LCD_MOSI_PIN            P0_4                                //< lcd 数据线(单向传输)
	#define LCD_DC_PIN              P0_1                                //< lcd 数据\命令控制线
	#define LCD_RESET_PIN           P0_0                                //< lcd 复位
	#define LCD_EN_PIN              P4_1                                //< lcd 使能

2)初始化GPIO

初始化GPIO分为两组,1组为spi的引脚初始化,1组为普通IO的引脚初始化。

/**
  * @brief  :引脚初始化
  * @param  :NULL
  * @retval :NULL
  */
void st7789_gpio_init(void)
{
   
    //spi
    Pad_Config(LCD_SCK_PIN,  PAD_PINMUX_MODE, PAD_IS_PWRON, PAD_PULL_UP, PAD_OUT_ENABLE,
               PAD_OUT_HIGH);
    Pad_Config(LCD_MOSI_PIN, PAD_PINMUX_MODE, PAD_IS_PWRON, PAD_PULL_UP, PAD_OUT_ENABLE,
               PAD_OUT_HIGH);

    Pinmux_Deinit(LCD_SCK_PIN);
    Pinmux_Deinit(LCD_MOSI_PIN);

    Pinmux_Config(LCD_SCK_PIN,  SPI0_CLK_MASTER);
    Pinmux_Config(LCD_MOSI_PIN, SPI0_MO_MASTER);
    
    //gpio
    Pad_Config(LCD_DC_PIN,    PAD_SW_MODE, PAD_IS_PWRON, PAD_PULL_NONE, PAD_OUT_ENABLE,
               PAD_OUT_LOW);
    Pad_Config(LCD_RESET_PIN, PAD_SW_MODE, PAD_IS_PWRON, PAD_PULL_NONE, PAD_OUT_ENABLE,
               PAD_OUT_LOW);
    Pad_Config(LCD_EN_PIN,    PAD_SW_MODE, PAD_IS_PWRON, PAD_PULL_NONE, PAD_OUT_ENABLE,
               PAD_OUT_LOW);

    Pinmux_Config(LCD_DC_PIN,    DWGPIO);
    Pinmux_Config(LCD_RESET_PIN, DWGPIO);
    Pinmux_Config(LCD_EN_PIN,    DWGPIO);
}

3)配置SPI结构体

此处无需配置GPIO的结构体。

void driver_lcd_init(void)
{
   
    //spi
    RCC_PeriphClockCmd(APBPeriph_SPI0, APBPeriph_SPI0_CLOCK, ENABLE);

    SPI_InitTypeDef  SPI_InitStruct;
    SPI_StructInit(&SPI_InitStruct);

    SPI_InitStruct.SPI_Direction         = SPI_Direction_TxOnly;	//< 仅MOSI,从机不发送数据
    SPI_InitStruct.SPI_Mode              = SPI_Mode_Master;			//< 主机模式
    SPI_InitStruct.SPI_DataSize          = SPI_DataSize_8b;			//< 数据长度为8位
    SPI_InitStruct.SPI_CPOL              = SPI_CPOL_High;           //< 时钟空闲时的电平
    SPI_InitStruct.SPI_CPHA              = SPI_CPHA_2Edge;          //< 捕获第2个时钟沿(既下升沿)
    SPI_InitStruct.SPI_BaudRatePrescaler = 8;
    SPI_Init(SPI0, &SPI_InitStruct);
    SPI_Cmd(SPI0,  ENABLE);
}

4)初始化st7789

根据不同的驱动芯片进行初始化,该代码段以st7789为例。

值得注意的是:使用以下函数无法正常控制IO口,所以换成配置的方式来控制。

GPIO_WriteBit(GPIO_PIN_OUTPUT, (BitAction)(1));

这里操作IO口的方式为配置成IO的方式,即以下代码:

#define GPIO_WRITE_BIT(PINx,level)      Pad_Config(PINx, PAD_SW_MODE, PAD_IS_PWRON, \
                                            		PAD_PULL_NONE, PAD_OUT_ENABLE, level);

以下为st7789初始化代码:
driver_lcd.c

#include <
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值