当前位置: 首页 > news >正文

【开源】STM32HAL库驱动ST7789_240240(硬件SPI+软件SPI) - 少年

项目说明

最近调试了一款1.3寸的ST7789的液晶显示屏,主要使用的是STM32HAL库和中景元电子提供的库函数,使用软件SPI和硬件SPI分别成功的驱动了显示屏。这篇文章分享一下在使用过程中遇到的问题。
下面是实际的效果,使用的是面包板。

项目免费获取方式见文章末尾。

image

代码移植

主要提供了一个接口函数的部分。需要根据自己实际单片机的操作函数来修改这些引脚的变化方式。如果打开了软件SPI,需要把LCD_USE_SOFT_SPI 置1,而且是HAL库的话,需要使用CubeMx把硬件SPI去掉,然后初始化引脚为普通的输入输出模式。软件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_SPIRxData = soft_spi_read_write_byte(&soft_spi,TxData);	#elseHAL_SPI_TransmitReceive(&hspi1,&TxData,&RxData,1, 100);  #endifreturn RxData;
}/**************** 用户处理区域  end ******************/

移植BUG

使用过程中,我使用软件SPI的时候,模式0和1都不行,调到模式2才可以,使用硬件SPI的时候,多种模式都可以,除了模式3不行,这让我比较困惑,如果有人能告诉我原因,欢迎评论区留言。还有就是,如果你驱动不成功,尝试一下换一下SPI的模式。就是CPOL和CPHA这两个参数的设置值。还有就是,中景元电子不同屏幕牌子好像初始化的方式不太一样。可以淘宝看看你的属于哪一款。

项目开源链接

关注VX公众号少年潜行,回复 C002 即可获取网盘链接,内容无加密。有问题最好公众号后台询问,博客不一定能及时看到。

http://www.jsqmd.com/news/455678/

相关文章:

  • Qwen3-VL-2B快速入门:3个步骤搭建你的第一个视觉理解AI应用
  • Apex Legends智能压枪系统技术解析:从原理到实践
  • python基于Python的热门微博数据可视化分析(源码+文档+调试+讲解)
  • GLM-4.6V-Flash-WEB网页推理打不开?5步排查法,新手必看
  • Qwen3-VL-8B AI聊天系统Web版:5分钟一键部署,小白也能搭建自己的图文对话助手
  • ENSP模拟器与AI结合:网络实验的智能革命
  • python基于Python的广东旅游数据分析(源码+文档+调试+讲解)
  • Qwen3-ASR-1.7B应用场景:法律庭审录音转文字+关键语种切换标记
  • 3大突破重构Apex射击体验:智能压枪宏实现精准控制与多场景适配
  • 快速原型验证:用快马平台十分钟搭建min(公益版)待办事项应用
  • python基于Hadoop的租房数据分析系统的设计与实现(源码+LW+调试文档+讲解等)
  • OFA视觉问答模型惊艳效果:‘Which animal is larger, the cat or the dog?’比较类问题
  • 电商系统API测试实战:Postman最佳实践
  • 专业级AI人像生成:BEYOND REALITY Z-Image效果展示,告别塑料皮肤
  • NEURAL MASK 移动端适配探索:研究在Android设备上部署轻量化版本的可行性
  • 老Mac无法升级最新系统?OpenCore Legacy Patcher实用指南让旧设备焕发新生
  • PaddlePaddle-v3.3保姆级部署教程:5分钟搞定深度学习环境,小白也能快速上手
  • 鸣潮自动化工具:3大突破解放双手的游戏辅助解决方案
  • 大数据微服务:Eureka的注册表缓存机制详解
  • Qwen3-ForcedAligner与Claude Code Skills的对比分析
  • Oracle 19C安装避坑指南:从镜像解压到配置只读Home的完整流程
  • 华为OD机考双机位C卷 - 路口最短时间问题 (Java Python JS GO C++ C)
  • ACADO实战:5步搞定MPC代码生成与车辆控制(附避坑指南)
  • Nanbeige 4.1-3B 物体检测新思路:借鉴YOLO思想优化视觉描述生成
  • 造相-Z-Image-Turbo LoRA参数详解:lora_scale强度调节与显存平衡技巧
  • Kook Zimage真实幻想Turbo多场景实战:小说封面/游戏角色/壁纸生成
  • 华为OD机考双机位C卷 - 仿LISP运算 (Java)
  • Youtu-VL-4B-Instruct作品集:姿态估计API返回MPII标准kpt格式的实测截图
  • OFA图像描述模型GitHub开源项目实战:复现与贡献指南
  • 通达信数据获取革新:mootdx突破式金融数据分析解决方案