STM32F103ZET6+TFTLCD实现亮屏——1

工程思路

利用1个GPIO控制背光,在利用FSMC去控制TFTCLCD的控制引脚和数据引脚

FSMC是什么

STM32中的FSMC(Flexible Static Memory Controller,灵活静态存储器控制器)是一个硬件模块,它允许微控制器与外部存储器接口,以便进行数据交换。FSMC特别适用于与LCD控制器、NOR和NAND闪存、SRAM等静态存储器的接口。

FSMC的主要特点包括:

  1. 支持多种存储器类型:FSMC可以配置为与不同类型的存储器接口,包括异步SRAM、异步NOR闪存、异步PSRAM、同步NOR闪存、1T/2T同步SRAM、NAND闪存和PC卡(PCMCIA)。

  2. 灵活的时序控制:FSMC提供了对存储器读写操作的时序控制,可以根据不同的存储器速度和类型进行调整。

  3. 地址映射:FSMC允许将外部存储器的地址映射到STM32的地址空间中,使得外部存储器可以像内部存储器一样被访问。

  4. 数据线和地址线的复用:FSMC可以使用STM32的GPIO引脚作为数据线和地址线,以减少所需的引脚数量。

  5. 支持多种数据宽度:FSMC支持8位、16位和32位的数据宽度,可以根据存储器的接口和数据总线宽度进行配置。

在STM32微控制器中,FSMC通常用于LCD显示驱动,因为LCD控制器需要大量的数据带宽来刷新屏幕。通过使用FSMC,STM32可以高效地管理LCD显示内存,从而实现流畅的图像显示。

FSMC结构

除公共引脚其他三组为存储类型

为什么使用FSMC去控制TFTLCD

1.减轻MCU内核的工作负担

2.方便设置与管理

FSMC其引脚经过设置其引脚的作用与TFTLCD的作用可以一 一对应,从而不用去一个一个的去设置GPIO

stm32与TFTLCD接线关系

如何设置STM32 Cube MX

1设置外部时钟

点击RCC

将HSE  和  LSE  设置如下图设置

进入时钟树选择外部时钟将频率设置为最高(如下图)

2设置GPIO为高电平输出

根据原理图找到和背光连接的GPIO设置输出高电平

3再回到配置页面找到FSMC

在进入FSMC配置

下图中选择引脚      选项作用为片选(用于使能或禁用芯片)==TFTLCD中的cs

根据电路板选择对应的

我选的

第二项   为存储器的类型

选择

第三项控制引脚的选择 

        // 控制发送或接收的是数据还是指令==TFTLCD的RS引脚用于区分发送到LCD模块的数据是命令(指令)还是数据   //根据原理图选择对应的引脚

第四项   数据引脚   选择使用几引脚进行数据通行  因为TFTLCD是使用16引脚的所以选择16bits

之后的项目名字位置和编写环境此处省略

即可生成代码

代码的设置与编写

1导入TFTLCD驱动代码

1-1右键新建组

1-2在工程文件中新建文件夹放入驱动文件

1-3在右键新建的组,导入刚才的文件

选中在add就添加完成

1-4导入驱动文件目录

点击如图

在进入c/c++再点击下图中的图底   ....  位置

在点击有黄色标的位置添加驱动目录

会弹出  条框  +  ...  点击...   选择文件

 在OK回到编辑页面

2代码的编写

1在主文件中添加头文件  #include "lcd.h"

2在main函数中初始化LCD//可进入lcd.h文件中查看有哪些函数,也可以看原理编写自己的函数

在主函数中写入如下代码可以使屏幕点亮显示蓝色

    LCD_Init();//初始化LCDHAL_GPIO_WritePin(GPIOB,GPIO_PIN_0,1);//打开背光LCD_Clear(BLUE);//清屏显示蓝色

显示更有趣的可以参考lcd.h自行编写

主函数全代码

/* USER CODE BEGIN Header */
/********************************************************************************* @file           : main.c* @brief          : Main program body******************************************************************************* @attention** Copyright (c) 2024 STMicroelectronics.* All rights reserved.** This software is licensed under terms that can be found in the LICENSE file* in the root directory of this software component.* If no LICENSE file comes with this software, it is provided AS-IS.********************************************************************************/
/* USER CODE END Header */
/* Includes ------------------------------------------------------------------*/
#include "main.h"
#include "gpio.h"
#include "fsmc.h"/* Private includes ----------------------------------------------------------*/
/* USER CODE BEGIN Includes */
#include "lcd.h"
/* USER CODE END Includes *//* Private typedef -----------------------------------------------------------*/
/* USER CODE BEGIN PTD *//* USER CODE END PTD *//* Private define ------------------------------------------------------------*/
/* USER CODE BEGIN PD *//* USER CODE END PD *//* Private macro -------------------------------------------------------------*/
/* USER CODE BEGIN PM *//* USER CODE END PM *//* Private variables ---------------------------------------------------------*//* USER CODE BEGIN PV *//* USER CODE END PV *//* Private function prototypes -----------------------------------------------*/
void SystemClock_Config(void);
/* USER CODE BEGIN PFP *//* USER CODE END PFP *//* Private user code ---------------------------------------------------------*/
/* USER CODE BEGIN 0 *//* USER CODE END 0 *//*** @brief  The application entry point.* @retval int*/
int main(void)
{/* USER CODE BEGIN 1 *//* USER CODE END 1 *//* MCU Configuration--------------------------------------------------------*//* Reset of all peripherals, Initializes the Flash interface and the Systick. */HAL_Init();/* USER CODE BEGIN Init *//* USER CODE END Init *//* Configure the system clock */SystemClock_Config();/* USER CODE BEGIN SysInit *//* USER CODE END SysInit *//* Initialize all configured peripherals */MX_GPIO_Init();MX_FSMC_Init();/* USER CODE BEGIN 2 */LCD_Init();//初始化LCD//POINT_COLOR =RED;//设置画笔的默认颜色HAL_GPIO_WritePin(GPIOB,GPIO_PIN_0,1);//打开背光LCD_Clear(BLUE);/* USER CODE END 2 *//* Infinite loop *//* USER CODE BEGIN WHILE */while (1){/* USER CODE END WHILE *//* USER CODE BEGIN 3 */}/* USER CODE END 3 */
}/*** @brief System Clock Configuration* @retval None*/
void SystemClock_Config(void)
{RCC_OscInitTypeDef RCC_OscInitStruct = {0};RCC_ClkInitTypeDef RCC_ClkInitStruct = {0};/** Initializes the RCC Oscillators according to the specified parameters* in the RCC_OscInitTypeDef structure.*/RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSE;RCC_OscInitStruct.HSEState = RCC_HSE_ON;RCC_OscInitStruct.HSEPredivValue = RCC_HSE_PREDIV_DIV1;RCC_OscInitStruct.HSIState = RCC_HSI_ON;RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON;RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_HSE;RCC_OscInitStruct.PLL.PLLMUL = RCC_PLL_MUL9;if (HAL_RCC_OscConfig(&RCC_OscInitStruct) != HAL_OK){Error_Handler();}/** Initializes the CPU, AHB and APB buses clocks*/RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_HCLK|RCC_CLOCKTYPE_SYSCLK|RCC_CLOCKTYPE_PCLK1|RCC_CLOCKTYPE_PCLK2;RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_PLLCLK;RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1;RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV2;RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV1;if (HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_2) != HAL_OK){Error_Handler();}
}/* USER CODE BEGIN 4 *//* USER CODE END 4 *//*** @brief  This function is executed in case of error occurrence.* @retval None*/
void Error_Handler(void)
{/* USER CODE BEGIN Error_Handler_Debug *//* User can add his own implementation to report the HAL error return state */__disable_irq();while (1){}/* USER CODE END Error_Handler_Debug */
}#ifdef  USE_FULL_ASSERT
/*** @brief  Reports the name of the source file and the source line number*         where the assert_param error has occurred.* @param  file: pointer to the source file name* @param  line: assert_param error line source number* @retval None*/
void assert_failed(uint8_t *file, uint32_t line)
{/* USER CODE BEGIN 6 *//* User can add his own implementation to report the file name and line number,ex: printf("Wrong parameters value: file %s on line %d\r\n", file, line) *//* USER CODE END 6 */
}
#endif /* USE_FULL_ASSERT */

项目文件可在此账号的资源中心下载,免费 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/643353.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

实验七 智能手机互联网程序设计(微信程序方向)实验报告

请编写一个用户登录界面&#xff0c;提示输入账号和密码进行登录&#xff0c;要求在输入后登陆框显示为绿色&#xff1b; 二、实验步骤与结果&#xff08;给出对应的代码或运行结果截图&#xff09; index.wxml <view class"content"> <view class"a…

Docker容器:镜像与容器命令管理

目录 一、镜像管理命令 1、搜索镜像 2、获取镜像 3、镜像加速下载 4、查看下载的镜像文件信息 5、查看下载到本地的所有镜像 6、获取指定镜像的详细信息 7、为本地的镜像添加新的标签 8、删除镜像 8.1 删除指定的镜像 8.2 批量删除多个镜像 9、导出镜像与导入镜像 …

25计算机考研院校数据分析 | 上海交通大学

上海交通大学电子信息与电气工程学院成立于2001年12月&#xff0c;其前身可湖源至百年前的电机专科&#xff0c;具有中国电气工程师“摇篮”之美称。50年代根据学科发展需要分为电工与计算机科学系(三系)和电子工程系(四系)。1985年&#xff0c;三系和四系合并&#xff0c;成立…

(C语言入门)数组

目录 什么是数组&#xff1f; 数组&#xff1a; 数组的使用&#xff1a; 数组的初始化&#xff1a; 数组名&#xff1a; 数组案例&#xff1a; 一维数组的最大值&#xff1a; 一维数组的逆置&#xff1a; 数组和指针&#xff1a; 通过指针操作数组元素&#xff1a; …

Kibana安装部署(Linux)

Kibana是Elasticsearch的开源可视化工具&#xff0c;与存储在Elasticsearch中的数据进行交互。 1. 下载软件 这里使用的Elasticsearch的版本是7.12.0&#xff0c;所以kibana选择同样的7.12.0版本。 官网下载地址&#xff1a;https://www.elastic.co/cn/downloads/past-releas…

爱上JDK源码阅读-枚举类

在日常开发中&#xff0c;经常会用到枚举类。这篇文章主要探讨一下枚举类和普通类有什么区别&#xff0c;以及编译过程中偷偷做了什么事情。 知识点 枚举类的本质编译器对枚举类的改动 先看一段简单的枚举类代码&#xff1a; enum StatusType {ON(1) ,OFF(2);StatusType(int …

手机号码携号转网查询API接口是什么

手机号码携号转网查询API接口又叫运营商携号转网查询API接口&#xff0c;是指通过手机号精准查询该号码转网前及转网后所归属运营商。运营商携号转网查询API接口多用于营销场景&#xff0c;如运营商业务办理、客户信息查询、携号转网、电话营销等&#xff0c;接下来我们聊一聊怎…

什么是Spring Security?具有哪些功能?

本篇将带你快速了解什么是Spring Security&#xff0c;通过入门案例以及相关原理和类的分析让你快速入门。 一、概述 官网&#xff1a;https://spring.io/projects/spring-security Spring Security是一个Java框架&#xff0c;用于保护应用程序的安全性。它提供了一套全面的安全…

好看的混淆矩阵

网上绘制的混淆矩阵都不太满意。。。经过本人多次实验&#xff0c;如下混淆矩阵最为美观&#xff0c;特此记录 import matplotlib matplotlib.use(Agg) from matplotlib import rcParamsimport matplotlib.pyplot as plt import numpy as np# 给定混淆矩阵 cm np.array([[683…

5000字干货:如何通过社区驱动增长?挑战、认知、本质和六个步骤!

本来不少平台建立社区是为了给用户提供归属感,但在商业压力下,不得不开始做增长的运营。但不是说只是简单地“做增长”就可以的,归属感和增长,两者看起来相似,但生产流程却完全不同。这种情况下,我们需要怎么做? 2024年经济压力下,CEO向各社区负责人下达了一个目标:实…

解决“找不到MSVCP120.dll”或“MSVCP120.dll丢失”的错误方法

在计算机使用过程中&#xff0c;遇到诸如“找不到MSVCP120.dll”或“MSVCP120.dll丢失”的错误提示并不罕见。这类问题往往会导致某些应用程序无法正常运行&#xff0c;给用户带来困扰。本文旨在详细阐述MSVCP120.dll文件的重要性、其丢失的可能原因&#xff0c;以及解决方法&a…

力扣HOT100 - 543. 二叉树的直径

解题思路&#xff1a; class Solution {int ans;//记录节点数public int diameterOfBinaryTree(TreeNode root) {ans 1;depth(root);return ans - 1;//节点数减 1 就是路径长度}public int depth(TreeNode root) {if (root null) return 0;int l depth(root.left);int r de…