【开源】STM32HAL库驱动ST7789_240×240(硬件SPI+软件SPI)
/**************** 用户处理区域 Start *********************/
// 这部分处理自己写的时候可以分文件
#define LCD_DELAY_XMS(XMS) HAL_Delay(XMS)
#define LCD_USE_SOFT_SPI 0
/**
* @brief 初始化LCD相关引脚,以及初始化SPI,如果使能了软件spi需要初始化软件相关的引脚
* @param : [输入/出]
* @retval
**/
void lcd_spi_init()
{
// 使用的HAL库已经自己初始化了
}
/**
* @brief 设置RES引脚电平
* @param level : 电平 0低 1高
* @retval
**/
void lcd_res_set_level(uint8_t level)
{
if(0 == level)
{
HAL_GPIO_WritePin(LCD_RES_GPIO_Port,LCD_RES_Pin,GPIO_PIN_RESET);
}else if(1 == level)
{
HAL_GPIO_WritePin(LCD_RES_GPIO_Port,LCD_RES_Pin,GPIO_PIN_SET);
}
}
/**
* @brief 设置DC引脚电平
* @param level : 电平 0低 1高
* @retval
**/
void lcd_dc_set_level(uint8_t level)
{
if(0 == level)
{
HAL_GPIO_WritePin(LCD_DC_GPIO_Port,LCD_DC_Pin,GPIO_PIN_RESET);
}else if(1 == level)
{
HAL_GPIO_WritePin(LCD_DC_GPIO_Port,LCD_DC_Pin,GPIO_PIN_SET);
}
}
/**
* @brief 设置CS引脚电平
* @param level : 电平 0低 1高
* @retval
**/
void lcd_cs_set_level(uint8_t level)
{
if(0 == level)
{
}else if(1 == level)
{
}
}
/**
* @brief 设置BLK引脚电平
* @param level : 电平 0低 1高
* @retval
**/
void lcd_blk_set_level(uint8_t level)
{
if(0 == level)
{
HAL_GPIO_WritePin(LCD_BLK_GPIO_Port,LCD_BLK_Pin,GPIO_PIN_RESET);
}else if(1 == level)
{
HAL_GPIO_WritePin(LCD_BLK_GPIO_Port,LCD_BLK_Pin,GPIO_PIN_SET);
}
}
#if LCD_USE_SOFT_SPI
#include "bsp_soft_spi.h"
static void set_sck_level(uint8_t level)
{
if(0 == level){
HAL_GPIO_WritePin(SPI1_SCK_GPIO_Port,SPI1_SCK_Pin,GPIO_PIN_RESET);
}else{
HAL_GPIO_WritePin(SPI1_SCK_GPIO_Port,SPI1_SCK_Pin,GPIO_PIN_SET);
}
}
static void set_mosi_level(uint8_t level)
{
if(0 == level){
HAL_GPIO_WritePin(SPI1_MOSI_GPIO_Port,SPI1_MOSI_Pin,GPIO_PIN_RESET);
}else{
HAL_GPIO_WritePin(SPI1_MOSI_GPIO_Port,SPI1_MOSI_Pin,GPIO_PIN_SET);
}
}
static uint8_t get_miso_level( )
{
uint8_t level;
level = HAL_GPIO_ReadPin(SPI1_MISO_GPIO_Port,SPI1_MISO_Pin);
return level;
}
//定义软件SPI变量
soft_spi_t soft_spi = {
.spi_init = lcd_spi_init,
.set_spi_sck_level = set_sck_level,
.set_spi_mosi_level = set_mosi_level,
.spi_miso_read = get_miso_level,
.spi_mode= 2,
};
#else
#include "spi.h"
#endif
/**
* @brief lcd的SPI收发数据
* @param
* @retval
**/
uint8_t lcd_read_write_byte(uint8_t TxData)
{
uint8_t RxData;
#if LCD_USE_SOFT_SPI
RxData = soft_spi_read_write_byte(&soft_spi,TxData);
#else
HAL_SPI_TransmitReceive(&hspi1,&TxData,&RxData,1, 100);
#endif
return RxData;
}
/**************** 用户处理区域 end ******************/