首页 > 其他分享 >STM32入门教程:LCD触摸屏控制

STM32入门教程:LCD触摸屏控制

时间:2024-09-16 21:50:47浏览次数:16  
标签:引脚 入门教程 Init STM32 SPI LCD GPIO

STM32是一款广泛应用于嵌入式系统开发的微控制器系列,拥有强大的处理能力和丰富的外设接口。LCD触摸屏是一种通过触摸来控制显示内容的交互设备,常用于嵌入式系统中的人机交互界面。本教程将详细介绍如何使用STM32控制LCD触摸屏。

一、硬件准备 首先,我们需要准备以下硬件设备:

  1. STM32F系列开发板,例如STM32F103C8。
  2. LCD触摸屏模块,支持SPI通信协议。
  3. 连接线。

二、软件准备 为了编写和调试STM32的代码,我们需要准备以下软件工具:

  1. STM32CubeMX:用于配置STM32的引脚和外设。
  2. Keil MDK:用于编写、编译和调试嵌入式C程序。
  3. ST-Link驱动程序:用于与STM32开发板进行调试。

三、硬件连接 将LCD触摸屏模块与STM32开发板连接:

  1. 将LCD的VCC和GND引脚分别连接到STM32的3.3V和GND引脚。
  2. 将LCD的CLK、MISO、MOSI引脚分别连接到STM32的SPI1的SCK、MISO、MOSI引脚。
  3. 将LCD的CS引脚连接到STM32的GPIO引脚,作为片选信号。
  4. 将LCD的IRQ引脚连接到STM32的GPIO引脚,作为中断信号。

四、配置STM32

  1. 打开STM32CubeMX,创建一个新的工程。
  2. 选择对应的STM32型号,并选择SPI1和GPIO外设。
  3. 在Pinout & Configuration选项卡中,配置LCD触摸屏模块的引脚:
    • 将SCK引脚映射到SPI1的SCK引脚。
    • 将MISO引脚映射到SPI1的MISO引脚。
    • 将MOSI引脚映射到SPI1的MOSI引脚。
    • 将CS引脚映射到任意GPIO引脚。
    • 将IRQ引脚映射到任意GPIO引脚。
  4. 在Configuration选项卡中,配置SPI1的参数:
    • 选择SPI1的模式为主模式。
    • 选择SPI1的数据大小为8位。
    • 选择SPI1的时钟极性和相位。
    • 配置SPI1的速度。
  5. 在Configuration选项卡中,配置GPIO引脚的参数:
    • 将CS引脚配置为输出模式。
    • 将IRQ引脚配置为输入模式。
    • 启用IRQ引脚的中断功能。

五、编写代码 打开Keil MDK,创建一个新的C程序,并根据以下步骤编写代码:

  1. 包含必要的头文件:
#include "stm32f1xx_hal.h"
#include "stdio.h"

  1. 定义LCD触摸屏的片选和中断引脚:
#define LCD_CS_Pin      GPIO_PIN_2
#define LCD_CS_GPIO_Port    GPIOA
#define LCD_IRQ_Pin     GPIO_PIN_3
#define LCD_IRQ_GPIO_Port   GPIOA

  1. 定义SPI和GPIO的句柄:
SPI_HandleTypeDef hspi1;
GPIO_InitTypeDef GPIO_InitStruct;

  1. 初始化SPI和GPIO的配置:
void MX_SPI1_Init(void)
{
  /* SPI1 parameter configuration */
  hspi1.Instance = SPI1;
  hspi1.Init.Mode = SPI_MODE_MASTER;
  hspi1.Init.Direction = SPI_DIRECTION_2LINES;
  hspi1.Init.DataSize = SPI_DATASIZE_8BIT;
  hspi1.Init.CLKPolarity = SPI_POLARITY_LOW;
  hspi1.Init.CLKPhase = SPI_PHASE_1EDGE;
  hspi1.Init.NSS = SPI_NSS_SOFT;
  hspi1.Init.BaudRatePrescaler = SPI_BAUDRATEPRESCALER_2;
  hspi1.Init.FirstBit = SPI_FIRSTBIT_MSB;
  hspi1.Init.TIMode = SPI_TIMODE_DISABLE;
  hspi1.Init.CRCCalculation = SPI_CRCCALCULATION_DISABLE;
  hspi1.Init.CRCPolynomial = 10;
  if (HAL_SPI_Init(&hspi1) != HAL_OK)
  {
    Error_Handler();
  }
  
  /* GPIO Ports Clock Enable */
  __HAL_RCC_GPIOA_CLK_ENABLE();
}

  1. 初始化GPIO的配置:
void MX_GPIO_Init(void)
{
  GPIO_InitStruct.Pin = LCD_CS_Pin | LCD_IRQ_Pin;
  GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
  GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
  HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
}

  1. 实现中断回调函数,用于处理LCD触摸屏的中断:
void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin)
{
  if (GPIO_Pin == LCD_IRQ_Pin)
  {
    // 处理LCD触摸屏的中断
  }
}

  1. 实现主函数,在主函数中初始化SPI和GPIO,并进入主循环:
int main(void)
{
  /* MCU Configuration */
  HAL_Init();
  
  /* Configure the system clock */
  SystemClock_Config();
  
  /* Initialize all configured peripherals */
  MX_GPIO_Init();
  MX_SPI1_Init();
  
  /* Infinite loop */
  while (1)
  {
    // 主循环
  }
}

六、调试和测试 将代码烧录到STM32开发板中,连接STM32和计算机,打开串口调试工具,通过串口打印信息来验证LCD触摸屏的控制功能是否正常。

七、总结 本教程介绍了如何使用STM32控制LCD触摸屏。通过配置STM32的SPI和GPIO,并编写相应的代码,我们可以实现对LCD触摸屏的控制。通过该教程,希望读者能够理解STM32控制LCD触摸屏的基本原理,并能够在具体的应用中灵活运用。

标签:引脚,入门教程,Init,STM32,SPI,LCD,GPIO
From: https://blog.csdn.net/2401_85258012/article/details/142291271

相关文章

  • 基于stm32排队系统完整代码分析(二)
    功能代码led1.c、灯#include"led.h"#include"sys.h"voidled_init(void){GPIO_InitTypeDefgpio_initstruct;__HAL_RCC_GPIOB_CLK_ENABLE();gpio_initstruct.Pin=GPIO_PIN_8|GPIO_PIN_9;gpio_initstruct.Mode=GPIO_......
  • STM32 如何通过ESP8266通信
    一、STM32与ESP8266简介(一)STM32简介是一款高性能、低功耗的微控制器,广泛应用于各种嵌入式系统中。它具有丰富的外设资源和强大的处理能力,能够满足不同应用场景的需求。在与ESP8266通信中,STM32可以作为主控制器,通过串口或其他通信接口与ESP8266进行数据交互,实现对ESP8266......
  • 串口通信-stm32
    【实验目的】深入理解串口协议和串口程序编制方法;【实验要求】1.学会编写串口通信程序2.能够使用按键控制通信消息的发送2.学会在两块开发板之间通信的方式【实验内容】1.将开发板和PC机串口连接,并通过串口线和另一块开发板连接;2.在发送开发板上按下发送键,则向目标开发......
  • (2)Proteus8.7添加STM32F103C6直接使用编译xxx.hex文件关键步骤
    1)新建工程中选项 2)Protues8.7支持芯片如下:3)点击STM32选择Keil编译生成的xxx.hex文件 4)使用virtualterminal显示串口信息。仿真状态,点击Debug菜单项,按图操作。 ......
  • cJSON-轻量级解析模块、字符串的神——编织STM32C8T6与阿里云信息传递的纽带
            编写方向:本人就不泛泛的编写一篇什么一文学会cJSON了,没什么突出点,也就我水水字数,你们看来看去也不懂,本人是从上阿里云传信息接触的cJSON的,我就此写一篇针对性的文章,希望对大家有用,后期我在其他方面用到还会继续更新。一、简介        cJSON是一个用C......
  • 使用micropython设计STM32蓝牙智能小车
    1、前言    最近在使用micropython来使用STM32F411CEU6TR,给我的感觉是:没有像使用c语言那样的自由,有一些引脚不能够自主设计,不触及底层代码,但是对于初学者来说非常友好,可操作性大大提高,各种代码的使用接近口语,方便使用。2、软件的使用    一个是MU,这个对于有......
  • 蓝桥杯-基于STM32G432RBT6的LCD进阶(LCD界面切换以及高亮显示界面)
    目录一、页面切换内容详解1.逻辑解释2.代码详解code.c(内含详细讲解)code.hmain.c3.效果图片展示​编辑二、页面选项高亮内容详解1.逻辑解释2.读入数据FIRST.第一种高亮类型code.c(内含代码详解)code.hmain.cSECOND.第二种高亮类型3.效果展示开源代码一、页......
  • stm32驱动HX711称重传感器 c++代码分享
    一、HX711模块介绍HX711模块是一种专门用于称重传感器的放大器模块。它的主要功能是将测得的微小电压信号放大到可以被微控制器读取的范围。HX711模块通常配合称重传感器一起使用,例如压力传感器、负载细胞等。它采用24位的模数转换器(ADC)来精确测量传感器的电压变化。HX711模块具......
  • STM32CubeIDE看门狗
    看门狗简介看门狗:本质是一个递减的计数器当程序有BUG或硬件问题导致的程序卡死或跑飞时,看门狗可及时复位程序作用:防止程序卡死或程序跑飞,保证系统的可靠性和稳定性STM32有独立看门狗(IWDG)和窗口看门狗(WWDG)两种类型独立看门狗:独立工作,对时间精度要求较低窗口看门狗:时间精......
  • ubuntu下stlink烧录stm32代码
    ubuntu下stlink烧录stm32代码,记录备忘0、环境一、下载stlink驱动 二、编译  三、安装stlink驱动 四、验证安装成功 usb口接stlink后,查到设备五、烧录 六、其它  ......