ESP32S3学习——spi_lcd_ILI9341

esp32课设记录(二)lcd屏显示文字与照片 ​用image2lcd软件,配置如图: 取模软件链接: 链接: 百度网盘 请输入提取码 提取码: 1234 可以先用这张测试图片测试,我是网上下载了一个三原色图并且加了个圈,只要这张图所有颜色显示对了,结果包对的!!!! 我在图片显示这边卡了很久很久,最后发现是大端小端的问题,这个一定要注意!!!! 小技巧:当图片一直颜色不对的时候,可以排列组合n种图片显示方式,比如rgb/bgr,大端/小端等等,每隔1s切换一次,最后看第几次显示 ​ 阅读详情
AI摘要

该代码示例展示了如何使用ESP32的SPI主设备接口与LCD交互,实现一个动画效果。主要涉及SPI配置、LCD驱动和初始化命令,以及使用DMA进行数据传输以提高效率。代码中包含了ILI9341和ST7789V两种LCD的初始化命令,并通过预传输回调函数控制D/C线的状态。

芯片:esp32

开发环境:espidfv4.4

一、例程分析

1)readme中并没有很多信息,解码jpg后显示,经过计算显示一个动画效果,分析了spi配置和lcd驱动,解码部分没看明白

2)spi相关头文件:

  • \ #include "driver/spi_master.h"

  • \ #include "driver/gpio.h"

3)实现效果:一个动图

/* SPI Master example

   This example code is in the Public Domain (or CC0 licensed, at your option.)

   Unless required by applicable law or agreed to in writing, this
   software is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR
   CONDITIONS OF ANY KIND, either express or implied.
*/
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "freertos/FreeRTOS.h"
#include "freertos/task.h"
#include "esp_system.h"
#include "driver/spi_master.h"
#include "driver/gpio.h"

#include "pretty_effect.h"

/*
 This code displays some fancy graphics on the 320x240 LCD on an ESP-WROVER_KIT board.
 This example demonstrates the use of both spi_device_transmit as well as
 spi_device_queue_trans/spi_device_get_trans_result and pre-transmit callbacks.

 Some info about the ILI9341/ST7789V: It has an C/D line, which is connected to a GPIO here. It expects this
 line to be low for a command and high for data. We use a pre-transmit callback here to control that
 line: every transaction has as the user-definable argument the needed state of the D/C line and just
 before the transaction is sent, the callback will set this line to the correct state.
*/


#define LCD_HOST    HSPI_HOST

#define PIN_NUM_MISO 25
#define PIN_NUM_MOSI 23
#define PIN_NUM_CLK  19
#define PIN_NUM_CS   22

#define PIN_NUM_DC   21
#define PIN_NUM_RST  18
#define PIN_NUM_BCKL 5



//To speed up transfers, every SPI transfer sends a bunch of lines. This define specifies how many. More means more memory use,
//but less overhead for setting up / finishing transfers. Make sure 240 is dividable by this.
//为了加速传输,每个spi传输都发送一些线,这定义了数量,更多意味着更多的内存
//但是用于传输和完成传输的开销跟梢,确保240可以被整除
#define PARALLEL_LINES 16

/*
 The LCD needs a bunch of command/argument values to be initialized. They are stored in this struct.
*/
// 屏幕信息结构体,命令和数据结构体
typedef struct {
    uint8_t cmd;
    uint8_t data[16];
    uint8_t databytes; //No of data in data; bit 7 = delay after set; 0xFF = end of cmds.
} lcd_init_cmd_t;

typedef enum {
    LCD_TYPE_ILI = 1,
    LCD_TYPE_ST,
    LCD_TYPE_MAX,
} type_lcd_t;

//Place data into DRAM. Constant data gets placed into DROM by default, which is not accessible by DMA.
//将数据放到dram,常量数据默认情况会被放到drom,drom不可以使用dma
DRAM_ATTR static const lcd_init_cmd_t st_init_cmds[]={
    /* Memory Data Access Control, MX=MV=1, MY=ML=MH=0, RGB=0 */
    {0x36, {(1<<5)|(1<<6)}, 1},
    /* Interface Pixel Format, 16bits/pixel for RGB/MCU interface */
    {0x3A, {0x55}, 1},
    /* Porch Setting */
    {0xB2, {0x0c, 0x0c, 0x00, 0x33, 0x33}, 5},
    /* Gate Control, Vgh=13.65V, Vgl=-10.43V */
    {0xB7, {0x45}, 1},
    /* VCOM Setting, VCOM=1.175V */
    {0xBB, {0x2B}, 1},
    /* LCM Control, XOR: BGR, MX, MH */
    {0xC0, {0x2C}, 1},
    /* VDV and VRH Command Enable, enable=1 */
    {0xC2, {0x01, 0xff}, 2},
    /* VRH Set, Vap=4.4+... */
    {0xC3, {0x11}, 1},
    /* VDV Set, VDV=0 */
    {0xC4, {0x20}, 1},
    /* Frame Rate Control, 60Hz, inversion=0 */
    {0xC6, {0x0f}, 1},
    /* Power Control 1, AVDD=6.8V, AVCL=-4.8V, VDDS=2.3V */
    {0xD0, {0xA4, 0xA1}, 1},
    /* Positive Voltage Gamma Control */
    {0xE0, {0xD0, 0x00, 0x05, 0x0E, 0x15, 0x0D, 0x
用ESP学习单片机之Arduino_Esp-32s点亮2.8‘‘TFT LCD屏幕_ILI9341_SPI_240x320_V1.2 心力憔悴。。。。整了好几天才点亮,放弃了十几次吧。尝试了几十次终于亮了。。。。怀疑自己不存的,有点饿 阅读详情

相关推荐

ESP32S3与ILI9341 LCD屏LVGL移植实战:从零构建嵌入式GUI界面

本文详细介绍了如何在ESP32S3平台上移植LVGL图形库并驱动ILI9341 LCD屏幕,从硬件选型、开发环境配置到显示驱动实现和内存优化。通过实战案例讲解移植过程中的关键步骤和常见问题解决方案,帮助开发者快速构建嵌入式GUI界面。

h9j8k7l6m5n的博客 1097

ESP32 ILI9341 TFT驱动:基于ESP-IDF LCD Panel API的标准面板实现

ILI9341是一种广泛应用于嵌入式系统的18位RGB TFT LCD控制器,常用于2.4英寸240×320分辨率显示屏。其核心原理是通过SPI接口接收命令与像素数据,并由内部GRAM显存完成图像刷新。技术价值在于低硬件依赖、高时序鲁棒性及与主流GUI框架(如LVGL)的天然兼容性。典型应用场景涵盖工业HMI、IoT设备本地UI、便携式数据终端等人机交互界面。本文聚焦于符合ESP-IDF LCD Panel API规范的标准化驱动实现,深度解析SPI通信配置、初始化序列优化、RGB字节序适配(rgb_end

weixin_35756130的博客 627

基于ESP32S3SPI_LCD_TOUCH显示LVGL移植

ESP32IDF驱动LCD显示和触摸屏驱动实验

huishu1002的博客 952

PlatformIO基于ESP32S2的SPI软串口LCD屏调试

文章目录VSCode PlatformIO Arduino ESP32S2 SPI LCD 320*240一、准备工作二、测试1.全屏检测2.图形测试参考资料 VSCode PlatformIO Arduino ESP32S2 SPI LCD 320*240 SPI串口LCD屏使用较少的IO,适用于ESP32系列这种IO口不算太多的MCU。由于lcdwiki.com提供的案例程序包括Arduino,但是并不完全适用于ESP32,需要做小幅调整。以下以2.8寸SPI型号ILI9341为例。 一、准备工作

yaddi的博客 3658

【雕爷学编程】MicroPython手册之 ESP32-S3 3.2寸LCD显示屏(电阻触摸)

例如,需要根据LCD显示屏的分辨率和显示效果来选择合适的字体和图像大小,同时也需要根据硬件设备的性能和内存限制等因素来优化程序的运行效率和稳定性。在使用LCD显示屏时,需要注意引脚配置、分辨率和显示效果、触摸校准以及电源供应等方面的问题,以确保正确的通信和良好的用户体验。然后,我们初始化了触摸屏和LCD显示屏。使用machine.Pin()函数配置LCD显示屏引脚(例如CS引脚为GPIO 5,DC引脚为GPIO 4,RST引脚为GPIO 16,MOSI引脚为GPIO 23,CLK引脚为GPIO 18)。

雕爷学编程 2351

esp32单片机通过spi驱动LCD显示 (嵌入式开发 程序 )

esp32单片机通过spi驱动LCD显示 (嵌入式开发 程序 )

迈德威视相机调用( 基于 Linux系统+ OpenCV )

迈德威视相机调用( 基于 Linux系统+ OpenCV )前言一、登录迈德威视官网,下载官方SDK二、代码调用与视频帧处理( 基于 OpenCV )总结 前言     此博客记录了迈德威视工业相机在 Linux 系统下的代码调用及其环境配置,通过 OpenCV 对视频帧进行处理。   一、登录迈德威视官网,下载官方SDK      迈德威视官网 : http://www.mindvision.com.cn/     1. 进入官网后,在服务支持中选择软件下载。    2. 选择Linux系统S.

kkkkkk0729的博客 5680

营销反作弊之 异常行为分析模型(一),附带python代码

通过对用户行为进行深入的分析,识别出与常规模式不符的异常行为,可以有效检测并阻止虚假广告点击、刷单、点击欺诈等欺诈行为。本文将详细探讨营销反欺诈中异常行为分析的方法,介绍如何通过数据采集、清洗、行为建模与异常检测,准确识别潜在的欺诈行为,并提供 Python 实现代码示例。**监督学习 (Supervised Learning):**在标注数据的帮助下,训练机器学习模型使其能预测未知数据的结果。营销反欺诈异常行为分析的整体流程涉及多个环节,确保通过对用户行为的深入分析,及时识别潜在的欺诈行为。

viviwiky的博客 1230

【OpenAirInterface知识-3】OAI端到端部署之5G基站部署

在上一篇文章中已经完成了5G核心网的部署,本篇文章将介绍OAI 5G基站的部署过程。

起名字难上难的博客 3421

手把手教你用Trae配置Python开发环境(含Claude 3.5代码生成实战)

本文详细介绍了如何使用字节跳动推出的Trae智能开发环境配置Python开发环境,并实战演示了Claude 3.5代码生成功能。从环境准备到项目初始化,再到AI辅助编码和调试优化,全面展示了Trae在提升开发效率方面的强大能力,特别适合Python开发者快速搭建项目和解决复杂问题。

weixin_28309571的博客 977

GD32主程序跑飞?可能是BOOT0引脚惹的祸(附J-LINK调试实录)

本文针对GD32微控制器程序下载后无法运行的典型问题,深入剖析了BOOT0引脚配置对启动模式的关键影响。通过结合J-LINK调试器与KEIL MDK环境,详细演示了如何从程序跑飞现象(如PC指向0x1FFF Fxxx)定位到硬件层面的BOOT0引脚与VDD短路故障,并提供了系统的硬件排查步骤与设计预防建议。

d6e7f8的博客 704

Opencv2.4.9源码分析——HoughCircles

图形可以用一些参数进行表示,标准霍夫变换的原理就是把图像空间转换成参数空间(即霍夫空间),例如霍夫变换的直线检测就是在距离-角度空间内进行检测。圆可以表示成: (x-a)2+(y-b)2=r2                   (1) 其中a和b表示圆心坐标,r表示圆半径,因此霍夫变换的圆检测就是在这三个参数组成的三维空间内进行检测。 原则上,霍夫变换可以检测任何形状。但复杂的形状需要的

赵春江的专栏 3万+

大规模新闻聚合爬虫实战:Python爬取数百万新闻数据的完整指南

本文详细介绍了如何构建一个大规模新闻聚合爬虫,结合Python异步爬虫技术,实现高效、稳定的新闻数据采集。增加NLP模块对新闻内容做自动分类、情感分析。引入机器学习模型检测新闻真实性。使用分布式爬虫框架进一步提升规模。增加多媒体内容抓取与处理。

2201_76125261的博客 1554

Python入门实战:Python生物信息学编程基础

本文旨在为生物学背景的研究人员和对生物信息学感兴趣的程序员提供一个全面的Python生物信息学编程入门指南。我们将从Python基础知识开始,逐步深入到生物信息学特定的工具和技术,最终达到能够独立开发生物信息学分析程序的水平。Python编程基础生物信息学常用数据结构和算法DNA和蛋白质序列分析基因组数据处理生物信息学数据可视化Biopython库的使用实际项目案例背景介绍:概述文章目的、范围和预期读者核心概念与联系:介绍Python和生物信息学的基本概念。

AI架构师小马 1514

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

上一篇: ESP32S3学习——SPI
下一篇: ESP32S3学习——nvs_非易失性存储
HandBAI
博客等级 码龄5年 27粉丝 23原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值