[开源]STM32驱动自制ST7789TFT 1.69寸屏幕模块

基于STM32HAL库驱动ST7789芯片,1.69寸 240*280 屏幕模块,软件开源

1.硬件介绍

本文使用于使用ST7789驱动芯片的1.69寸TFT屏幕,分辨率为240*280,使用SPI通信,支持背光调节

本文使用自制模块为例,原理图及模块实物图如下,只是多了两个按键,其他接口定义与模块一致

2.部署使用

使用软件:STM32CubeMX + Keil v5
硬件:STM32F103RET6 基于Boring TECH V3.9开发板
自制LCD模块
硬件连接:NSS>PB0, SCK>PA5, MOSI>PA7, BLK>PA1, RST>PC5, DC>PC4

第一部分:CubeMX配置

本文所使用工程已配置好时钟树和指示灯等,实现基本运行,由于不是纯小白教程,这部分不在赘述

1.配置SPI

首先开启SPI接口,本文使用SPI1,因为LCD屏幕只需要接收SPI数据,所有选择后将第一个红框中的Mode设置为只发送主机模式,NSS片选保持默认,稍后自定义设置片选接口,然后将下方两个红框处按图中选项修改,其他保持默认,完成SPI基本设置

配置GPIO

需要配置的GPIO有三个,分别是SPI的自定义片选脚,LCD的复位端口,LCD的DC控制端口

将三个GPIO都设置为推挽输出模式,其他选项默认,为方便程序调用,自定义用户标签为:
PB0 > LCD_CS
PC4 > LCD_DC
PC5 > LCD_RES

配置定时器

由硬件电路可知,该模块可以通过PWM占空比来调节屏幕亮度,本文使用TIM2 CH2作为PWM输出口

选中TIM2中的Channel2,将选项更改为PWM Generation CH2,设置为PWM模式
更改下方红色框内为 36-1和20000 将PWM频率设置为100Hz,最后打开自动重装载

如果使用裸机,本部设置完成后,直接点击生成代码
如果使用FreeRTOS,则需要如下图所示先创建LCD任务再生成代码

第二部分:Keli代码配置

1.代码移植

将lcd.c等5个文件移动到工程目录下,本文以\user\module为例,将lcd.c 和image.h添加到工程中,并在魔术棒C/C++中添加头文件路径

添加对应文件到工程

添加头文件路径

设置好后先编译检查,没有错误可以进到下一步,由于程序默认使用SPI1和TIM2,若前置步骤配置的是其他SPI和定时器或者是其他名称的用户标签则会报错,请在lcd.h中修改。

最后可以看到编译0错误0警告

2.1使用裸机(RTOS直接跳到下面的2.2)

初始化

在main包含头文件 lcd.h

在main.c中,main函数前进行初始化,运行LCD_Init()和PWM开启输出

  LCD_Init();  //LCD初始化
  HAL_Delay(100);
  HAL_TIM_PWM_Start(&htim2,TIM_CHANNEL_2); //启动背光PWM
调用使用

在需要使用的地方,调用lcd操作指令

  LCD_Fill(0,0,LCD_W, LCD_H,WHITE);  //填充全屏白色
  LCD_ShowPicture(0,100,204,132,gImage_xiaoba); //展示图片
  LCD_ShowString(20, 60,(uint8_t *)"[Kazami_Dunmi]", BLUE, WHITE, 24, 0);  //显示文字

2.2使用FreeRTOS

初始化

在main和freertos中包含头文件 lcd.h

在main.c中,OS初始化前(USER CODE BEGIN 2)进行初始化,运行LCD_Init()和PWM开启输出

  /* Initialize all configured peripherals */
  MX_GPIO_Init();
  MX_SPI1_Init();
  MX_TIM2_Init();
  /* USER CODE BEGIN 2 */
  
//在这里初始化
  LCD_Init();  //LCD初始化
  HAL_Delay(100);
  HAL_TIM_PWM_Start(&htim2,TIM_CHANNEL_2); //启动背光PWM
 
  /* USER CODE END 2 */

  /* Call init function for freertos objects (in freertos.c) */
  MX_FREERTOS_Init();

  /* Start scheduler */
  osKernelStart();
.......
调用使用

在freertos.c中,对应任务函数下调用

/* USER CODE END Header_LcdTask */
void LcdTask(void const * argument)
{
  /* USER CODE BEGIN LcdTask */
  /* Infinite loop */
    
    LCD_Fill(0,0,LCD_W, LCD_H,WHITE);  //填充全屏白色
    LCD_ShowPicture(0,100,204,132,gImage_xiaoba); //展示图片
    LCD_ShowString(20, 60,(uint8_t *)"[Kazami_Dunmi]", BLUE, WHITE, 24, 0);  //显示文字
    
  for(;;)
  {
    osDelay(1);
  }
  /* USER CODE END LcdTask */
}

查看效果

编译下载,查看LCD模块状态,发现小八就说明成功了

附件下载

后续更新

暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇