
使用 STM32F1xx 点亮 ST7735 屏幕
刚刚开始学 STM32,采用了 STM32CubeMX + Clion开发的组合,本来以为点亮一个 SPI 总线的屏幕会简单到爆,结果发现操作了一晚上也没成功点亮。除了代码问题,还有环境问题。
本文章相关文件在文末下载
接线
接线不多赘述,这里使用的硬件 SPI1 通道来驱动。在 CubeMX 中选择 SPI1,切换为 Half-Duplex Master 模式,把 Prescaler 放大,这里放大到了 x32.
右侧引脚图中已经标注出 SPI 总线需要用的端口

直接将屏幕上的时钟和数据线插好(SCK, SCL 各种缩写都有,这样的是时钟线。SDA、MISO 类似字样的是数据线)
接着,选择一些端口用于其他功能,这里我按开发板上顺序来插的,直接插上后在软件内把对应端口配置为 Output

到这里接线就结束了。需要单独注意一下时钟的设置和调试方式的设置


设置结束后,生成代码。
代码
我们打开项目后,导入 ST7735 相关的驱动程序。这里我找了好多个,基本都给我遇到了各种报错的问题。由于第一次学习这玩意,对功能还不是很熟悉,折腾了一晚上。。。
我们先添加相关驱动代码到 Inc 和 Src 中。把头文件 (.h) 都丢在 Inc 文件夹中,把代码实现 (.c) 都丢在 Src文件夹中。

最后项目结构应该是这个样子
在 main 函数中导入相关函数,初始化屏幕:
/* USER CODE BEGIN Includes */
#include <string.h>
#include "st7735.h"
#include "GFX_FUNCTIONS.h"
#include "fonts.h"
/* USER CODE END Includes */
我这里使用的 B11 端口作为背光,也可以直接接 3V3
/* USER CODE BEGIN 2 */
ST7735_Init();
// B11 - Backlight
HAL_GPIO_WritePin(GPIOB, GPIO_PIN_11, GPIO_PIN_SET);
/* USER CODE END 2 */
初始化后尝试调用他的文字函数
ST7735_FillScreen(ST7735_BLACK);
ST7735_WriteString(0, 0, "First Line", Font_7x10, ST7735_GREEN, ST7735_BLACK);
ST7735_WriteString(0, 3*10, "Second Line", Font_11x18, ST7735_GREEN, ST7735_BLACK);
ST7735_WriteString(0, 3*10+3*18, "Okay", Font_16x26, ST7735_GREEN, ST7735_BLACK);
这里三行都使用了不一样的字体,字体大小在名字上已经反映出来,所以我们手动处理坐标会更简单
到这里,屏幕本来可以轻松点亮了,毕竟都是用的人写好的驱动,但编译的时候出现类似报错:
‘BLACK’ undeclared (first use in this function) 403 | fillScreen(BLACK);
我们到相关文件去看,真不怪他报错,这里用的所有颜色,基本都没有正确定义。查找替换,手动替换掉 WHITE -> ST7735_WHITE,以此类推。结束后再次编译,一切正常,上传,重置,屏幕轻松点亮。
如果遇到报错是没有你所使用的函数,记得检查 CMakeLists 文件夹是否已经涵盖了你所添加的几个文件
