蓝牙BLE芯片PHY6222之SPI驱动ST7789

 

蓝牙BLE芯片PHY6222之SPI驱动ST7789

 

显示效果

在这里插入图片描述

环境

1.PHY6222开发板
2.SDK3.1.1----example\ble_peripheral\lcd_demo
3.硬件接线

#define PIN_LCD_BL_EN				GPIO_P02//背光
#define PIN_LCD_SPI_SCS				GPIO_P23//片选
#define PIN_LCD_RST					GPIO_P24//复位
#define PIN_LCD_RS					GPIO_P25//数据、命令
#define PIN_LCD_SPI_SDO				GPIO_P32//MOSI
#define PIN_LCD_SPI_SDI				GPIO_P01//MISO
#define PIN_LCD_SPI_SCK				GPIO_P34//时钟

SPI初始化

void  reg_spi_init(hal_spi_t*  spi_ptr,uint32 speed, GPIO_Pin_e sck_pin,GPIO_Pin_e ssn_pin,GPIO_Pin_e miso_pin,GPIO_Pin_e mosi_pin, SPI_SCMOD_e scmod,SPI_TMOD_e tmod)
{
   hal_clk_gate_enable((MODULE_e)(MOD_SPI0 + spi_ptr->spi_index));
   hal_spi_pin_init(spi_ptr,sck_pin,ssn_pin,miso_pin,mosi_pin);
   hal_spi_master_init(spi_ptr,speed,scmod, tmod);
   spi_int_disable(spi_ptr);  
}

ST7789初始化

//背光上拉输出,写0保持
#define LCD_BL_INIT()	\
	do { \
		hal_gpio_pin_init(PIN_LCD_BL_EN, GPIO_OUTPUT); \
		hal_gpio_pull_set(PIN_LCD_BL_EN, STRONG_PULL_UP); \
		hal_gpio_write(PIN_LCD_BL_EN,0);\
		hal_gpioretention_register(PIN_LCD_BL_EN);\
	} while (0)
	
//数据,命令脚上拉输出,写1保持
#define LCD_RS_INIT()	\
	do { \
		hal_gpio_cfg_analog_io(PIN_LCD_RS,Bit_DISABLE); \
		hal_gpio_pin_init(PIN_LCD_RS, GPIO_OUTPUT); \
		hal_gpio_pull_set(PIN_LCD_RS, STRONG_PULL_UP); \
		hal_gpio_fast_write(PIN_LCD_RS,1); \
		hal_gpioretention_register(PIN_LCD_RS);\
	} while (0)
//复位脚上拉输出,写1保持
#define LCD_RST_INIT()	\
	do { \
		hal_gpio_cfg_analog_io(PIN_LCD_RST,Bit_DISABLE); \
		hal_gpio_pin_init(PIN_LCD_RST, GPIO_OUTPUT); \
		hal_gpio_pull_set(PIN_LCD_RST, STRONG_PULL_UP); \
		hal_gpio_fast_write(PIN_LCD_RST,1); \
		hal_gpioretention_register(PIN_LCD_RST);\
	} 
//片选脚上拉输出,写1保持
#define LCD_SPI_CS_INIT()	\
	do { \
		hal_gpio_cfg_analog_io(PIN_LCD_SPI_SCS,Bit_DISABLE); \
		hal_gpio_pin_init(PIN_LCD_SPI_SCS, GPIO_OUTPUT); \
		hal_gpio_pull_set(PIN_LCD_SPI_SCS, STRONG_PULL_UP); \
		EFLASH_SPI_CS_INIT(); \
		EFLASH_SPI_CS_HIGH(); \
		hal_gpioretention_register(PIN_LCD_SPI_SCS);\
	} while (0)
#define SW_SPI_SCL_SET_OUTPUT() 	hal_gpio_pin_init(PIN_LCD_SPI_SCK, GPIO_OUTPUT);

//软件SPI获取st7789ID
get_lcd_drv_id();

//初始化屏幕
static const unsigned char __attribute__((aligned (4))) init_cmd_hsd7789[] = {

	0xFF, 0x36, // Send CMD 0x36
		0xA0,       //   ºáÆÁ
    0xFF, 0x3A,
		0x05,
    0xFF, 0xB2, // Send CMD 0xB2
		0x0C, 0x0C, 0x00, 0x33, 0x33, // Send DATA 0x0c, 0x0c, 0x00, 0x33, 0x33
    0xFF, 0xB7,
		0x35,
    0xFF, 0xBB,
		0x19,
    0xFF, 0xC0,
		0x2c,
    0xFF, 0xC2,
		0x01,
    0xFF, 0xC3,
    0x12,
    0xFF, 0xC4,
    0x20,
    0xFF, 0xC6,
    0x0F,
    0xFF, 0xD0,
    0xA4, 0xA1,	
    0xFF, 0xE0,
    0xD0,0x04,0x0D,0x11,0x13,0x2B,0x3F,0x54,0x4C,0x18,0x0D,0x0B,0x1F,0x23,
    0xFF, 0xE1,
    0xD0,0x04,0x0C,0x11,0x13,0x2C,0x3F,0x44,0x51,0x2F,0x1F,0x1F,0x20,0x23,
    0xFF, 0x21, 
    0xFF, 0x11, 		
    0xFF, 0x29,
};

显示图片文字

//打开st7789
static const unsigned char __attribute__((aligned (4))) on_cmd_hsd7789[] = {
	0xff, 0x11,
	//0xfe, 120,	
	0xff, 0x29,
	//0xfe, 10,
};
//设置背景色
void lcd_fill_dat(uint8 x, uint8 y, uint8 w, uint8 h, uint16 dat)
{
	uint32 len =  w * h;	
	lcd_set_region(x, y, w, h);	
	LCD_SPI_CS_LOW();
    write_color(dat,len);	
	LCD_SPI_CS_HIGH();
}
//显示图片
void LCD_ShowPicture(uint16 x1,uint16 y1,uint16 x2,uint16 y2)
{
	int i;
	  lcd_set_region(x1,y1,x2,y2);
	LCD_SPI_CS_LOW();
		for(i=0;i<1600;i++)
	  { 	
			wr_data(image[i*2+1]);	 //使用取模把图片放在一个数组
			wr_data(image[i*2]);			
	  }		
		delay_us(10);
		LCD_SPI_CS_HIGH();		
}

demo传送门
提取码:j4ny

posted on 2026-07-16 15:02  &大飞  阅读(2)  评论(0)    收藏  举报

导航