【开源】STM32HAL库驱动ST7789_240×240(硬件SPI+软件SPI)

时间:2025-04-25 18:09:54
/**************** 用户处理区域 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 ******************/