STM32-LCD液晶屏(ILI9341)

2024-05-14 10:12
文章标签 stm32 液晶屏 lcd ili9341

本文主要是介绍STM32-LCD液晶屏(ILI9341),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

MCU:STM32F103VET6

开发环境:STM32CubeMX+MDK5

目录

STM32液晶屏LCD(ILI9341)

LCD液晶显示

液晶控制原理

ILI9341液晶控制器简介

8080写时序

8080读时序

FSMC模拟8080时序

液晶屏的信号线

STM32CubeMX配置FSMC

测试部分

知识点分析


STM32液晶屏LCD(ILI9341)

本文章使用STM32F103VET6,野火指南者的3.2寸电阻屏,进行学习。

LCD液晶显示

针对野火指南者配套资料:3.2寸 LCD电阻屏,屏幕里自带ILI9341液晶控制器芯片,该控制器芯片中存在GRAM(即显存)。该液晶控制器使用8080接口与单片机通讯,液晶面板引出来的FPC信号线为8080接口,单片机把要显示的数据通过引出的8080接口发送到液晶控制器,要显示的数据存储到它内部的显存中,然后液晶控制器不断把显存的内容刷新到液晶面板,显示内容。

还有个电阻触摸屏的控制器XPT2046,实际上是一个ADC芯片,通过检测电压值来计算触摸坐标。

液晶屏的每个像素点都是数据,在实际应用中需要把每个像素点的数据缓存起来,再传输给液晶屏,一般会使用SRAM和SDRAM性质的存储器,而这些专门用于存储显示数据的存储器,被称为显存。显存一般至少要能存储一帧显示数据,如分辨率为800*480的液晶屏,若使用RGB888格式显示,一帧数据大小 = 3 * 800 * 480 = 1152000字节;若使用RGB565格式显示,一帧数据大小 = 2 * 800 * 480 = 768000字节。

一般来说,外置的液晶控制器会自带显存,而像STM32F429等集成液晶控制器的芯片可使用内部SRAM或外扩SDRAM用于显存空间。

液晶控制原理

因为控制液晶面板需要比较多的资源,所以大部分低级微处理器都不能直接控制液晶面板,需要额外配套一个专用液晶控制器来处理显示过程,外部微控制器只要把它希望显示的数据直接交给液晶控制器即可。而不带液晶控制器的PCB底板,只有小部分的电源管理电路,液晶面板的信号线与外部微控制器相连,直接控制。

STM32F429系列的芯片不需要额外的液晶控制器,即它把专用液晶控制器的功能集成到STM32F429芯片内部了,节省了额外的控制器成本。而STM32F1系列的芯片由于没有继承液晶控制器到芯片内部,所以只能驱动只带控制器的屏幕。

ILI9341液晶控制器简介

内部结构复杂。芯片中含有GRAM(即显存),GRAM中每个存储单元都对应液晶面板的一个像素点。通过液晶控制器内部各种模块共同作用把GRAM存储单元的数据转化为液晶面板的控制信号,使像素点呈现特定的颜色,而像素点组合起来则成为了一幅完整的图像。

ILI9341液晶控制器根据自身的IM[3:0]信号线电平决定了它与MCU的通讯方式支持SPI、8080通讯方式。野火指南者中固定搭配8080(内部硬件电路处理)使用16根数据线的RGB565格式。即当IM[3:0]=0x8时,MCU接口模式为8080 MCU 16-bit bus interface II

8080写时序

8080读时序

FSMC模拟8080时序

因为8080时序与FSMC(SRAM,NorFlash等)时序类似,所以只需将ILI9341液晶控制器当成一个存储器来使用。这样STM32就可以通过FSMC外设与ILI9341液晶控制器通信。

Tips:

        百度上都是使用NorFlash的FSMC模式B时序模拟8080时序,但是其实SRAM的FSMC模式A时序模拟8080时序也是可行的。如果有读者有详细的说法可以在评论区更详细的展开

液晶屏的信号线

FSCM_D[15:0]:数据信号。

FSMC_NE1:片选信号,低电平有效。

FSMC_NOE:读数据信号,低电平有效。

FSMC_NWE:写数据信号,低电平有效。

FSMC_RS:数据/命令信号。

        高电平时,D[15:0]表示的是数据(RGB像素数据或命令数据)

        低电平时,D[15:0]表示的是控制命令

LCD_RST:复位信号,低电平有效。

LCD_BL:背光信号,低电平有效。

LCD_TP:用于触摸屏的,它们是直接连接到xpt2046(触摸控制芯片),此处不讲。

STM32CubeMX配置FSMC

常规配置不展开,配置主频为72MHz。记住额外配置引脚(推挽输出):PE1-LCD_RST、PD12-LCD_BL。

HCLK周期:HCLK配置为72MHz,即一个HCLK周期为1/72us = 13.8ns

13.8 * 26 = 358.8 > 355ns

13.8 * 1 = 13.8 > 10ns 

测试部分

添加工程主目录下添加UserCode文件夹,将野火《液晶显示》的bsp_ili9341.c、bsp_ili9341.h、fonts.c和fonts.h文件放入文件夹中。

ILI9341_Init函数中注释掉ILI9341_GPIO_Config();ILI9341_FSMC_Config();

然后main函数中调用ILI9341_Init();

然后在添加测试函数:LCD_Test();

Tips:需要把编译优化等级跳-O0或-O1才能正常显示。-O2会出现碎花屏,-O3会出现白屏。 

实验现象:

知识点分析

在FSMC中,Bank1一个存储块有4个区,每个区可以扩展SRAM或者NorFlash存储器,相当于一个Bank1可以扩展4个SRAM或者NorFlash存储器

实验中使用了FSNC_NE1作为片选引脚。即选择了FSMC的Bank1的第一区,地址范围是0x6000 0000 - 0x63FF FFFF

使用了D0~D15数据线,数据宽度16bit。即HADDR[25:1]与FSMC_A[24:0]对应连接,HADDR[0]未接。

        相当于:

                FSMC的地址为1时,对应HADDR的地址为10。

                FSMC的地址为10时,对应HADDR的地址为100。

        可发现,相对于FSMC地址,HADDR左移一位,即*2。

FSMC_A16接LCD的D/C引脚。

当A16高电平时,D[15:0]为数据。所以控制地址线A16输出1,则0x6000 0000 | (1<<17) = 0x6002 0000。这相当于数据地址

当A16低电平时,D[15:0]为命令。所以控制地址线A16输出0,则0x6000 0000 | (0<<17) = 0x6000 0000。这相当于命令地址

因此,

/***************************************************************************************
2^26 =0X0400 0000 = 64MB,每个 BANK 有4*64MB = 256MB
64MB:FSMC_Bank1_NORSRAM1:0X6000 0000 ~ 0X63FF FFFF
64MB:FSMC_Bank1_NORSRAM2:0X6400 0000 ~ 0X67FF FFFF
64MB:FSMC_Bank1_NORSRAM3:0X6800 0000 ~ 0X6BFF FFFF
64MB:FSMC_Bank1_NORSRAM4:0X6C00 0000 ~ 0X6FFF FFFF
****************************************************************************************//******************************* ILI9341 显示屏的 FSMC 参数定义 ***************************/
//FSMC_Bank1_NORSRAM用于LCD命令操作的地址
#define      FSMC_Addr_ILI9341_CMD         ( ( uint32_t ) 0x60000000 )//FSMC_Bank1_NORSRAM用于LCD数据操作的地址
#define      FSMC_Addr_ILI9341_DATA        ( ( uint32_t ) 0x60020000 )/*** @brief  向ILI9341写入命令* @param  usCmd :要写入的命令(寄存器地址)* @retval 无*/
void ILI9341_Write_Cmd(uint16_t usCmd)
{* (__IO uint16_t *)(FSMC_Addr_ILI9341_CMD) = usCmd;
}/*** @brief  向ILI9341写入数据* @param  usData :要写入的数据* @retval 无*/
void ILI9341_Write_Data(uint16_t usData)
{* (__IO uint16_t *)(FSMC_Addr_ILI9341_DATA) = usData;
}/*** @brief  从ILI9341读取数据* @param  无* @retval 读取到的数据*/
uint16_t ILI9341_Read_Data(void)
{return (* (__IO uint16_t *)(FSMC_Addr_ILI9341_DATA));
}

这篇关于STM32-LCD液晶屏(ILI9341)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/988457

相关文章

【STM32】SPI通信-软件与硬件读写SPI

SPI通信-软件与硬件读写SPI 软件SPI一、SPI通信协议1、SPI通信2、硬件电路3、移位示意图4、SPI时序基本单元(1)开始通信和结束通信(2)模式0---用的最多(3)模式1(4)模式2(5)模式3 5、SPI时序(1)写使能(2)指定地址写(3)指定地址读 二、W25Q64模块介绍1、W25Q64简介2、硬件电路3、W25Q64框图4、Flash操作注意事项软件SPI读写W2

STM32(十一):ADC数模转换器实验

AD单通道: 1.RCC开启GPIO和ADC时钟。配置ADCCLK分频器。 2.配置GPIO,把GPIO配置成模拟输入的模式。 3.配置多路开关,把左面通道接入到右面规则组列表里。 4.配置ADC转换器, 包括AD转换器和AD数据寄存器。单次转换,连续转换;扫描、非扫描;有几个通道,触发源是什么,数据对齐是左对齐还是右对齐。 5.ADC_CMD 开启ADC。 void RCC_AD

STM32内部闪存FLASH(内部ROM)、IAP

1 FLASH简介  1 利用程序存储器的剩余空间来保存掉电不丢失的用户数据 2 通过在程序中编程(IAP)实现程序的自我更新 (OTA) 3在线编程(ICP把整个程序都更新掉) 1 系统的Bootloader写死了,只能用串口下载到指定的位置,启动方式也不方便需要配置BOOT引脚触发启动  4 IAP(自己写的Bootloader,实现程序升级) 1 比如蓝牙转串口,

FreeRTOS-基本介绍和移植STM32

FreeRTOS-基本介绍和STM32移植 一、裸机开发和操作系统开发介绍二、任务调度和任务状态介绍2.1 任务调度2.1.1 抢占式调度2.1.2 时间片调度 2.2 任务状态 三、FreeRTOS源码和移植STM323.1 FreeRTOS源码3.2 FreeRTOS移植STM323.2.1 代码移植3.2.2 时钟中断配置 一、裸机开发和操作系统开发介绍 裸机:前后台系

寻迹模块TCRT5000的应用原理和功能实现(基于STM32)

目录 概述 1 认识TCRT5000 1.1 模块介绍 1.2 电气特性 2 系统应用 2.1 系统架构 2.2 STM32Cube创建工程 3 功能实现 3.1 代码实现 3.2 源代码文件 4 功能测试 4.1 检测黑线状态 4.2 未检测黑线状态 概述 本文主要介绍TCRT5000模块的使用原理,包括该模块的硬件实现方式,电路实现原理,还使用STM32类

STM32 ADC+DMA导致写FLASH失败

最近用STM32G070系列的ADC+DMA采样时,遇到了一些小坑记录一下; 一、ADC+DMA采样时进入死循环; 解决方法:ADC-dma死循环问题_stm32 adc dma死机-CSDN博客 将ADC的DMA中断调整为最高,且增大ADCHAL_ADC_Start_DMA(&hadc1, (uint32_t*)adc_buffer, ADC_Buffer_Size); 的ADC_Bu

基于stm32的河流检测系统-单片机毕业设计

文章目录 前言资料获取设计介绍功能介绍具体实现截图参考文献设计获取 前言 💗博主介绍:✌全网粉丝10W+,CSDN特邀作者、博客专家、CSDN新星计划导师,一名热衷于单片机技术探索与分享的博主、专注于 精通51/STM32/MSP430/AVR等单片机设计 主要对象是咱们电子相关专业的大学生,希望您们都共创辉煌!✌💗 👇🏻 精彩专栏 推荐订阅👇🏻 单片机设计精品

STM32的使用方法一

注:我采用的是STM32F103RC芯片、相应的电路图和STM32CubeIDE软件这是在STM32CubeIDE软件定义芯片后,所给的必要的代码逻辑,加上了注释 #include "main.h"/* Private variables ---------------------------------------------------------*//* Private function

STM32 HAL CAN通讯 实操

1、简介 相比于串口通讯,对于刚接触CAN通讯的小白来说,CAN通讯相对复杂,看各种视频、帖子理论,总是一知半解。本次通过傻瓜式操作,先实现CAN通讯的交互,以提高小白的信心,也便于自己复习观看。本次以STM32CubeMX进行初始化配置,通过Keil 5软件进行软件设计,通过CAN盒实现进行数据的交互。该流程实际以STM32F0、F1、F3、F4、F7实测好用(理论上都适用),这三种型号单片机

我在高职教STM32——准备HAL库工程模板(1)

新学期开学在即,又要给学生上 STM32 嵌入式课程了。这课上了多年了,一直用的都是标准库来开发,已经驾轻就熟了。人就是这样,有了自己熟悉的舒适圈,就很难做出改变,老师上课也是如此,排斥新课和不熟悉的内容。显然,STM32 的开发,HAL 库已是主流,自己其实也在使用,只不过更换库就意味着教学内容有很大变化,自己也就迟迟没有迈出调整这一步。现在,是时候做出变化了,笔者计划保持教学项