快速入门ESP32——移植LVGL(保姆级教程)

相关文章
快速入门ESP32——开发环境配置Arduino IDE
快速入门ESP32——开发环境配置PlatformIO IDE
快速入门ESP32—— platformIO添加开源库和自己的开发库
快速入门ESP32—— 解决platformIO添加开源库下载失败的问题
快速入门ESP32——点亮你的第一个LCD屏幕



前言

 在上一期我们移植了TFT_eSPI库成功点亮了LCD,本期就教大家怎么在platform上移植LVGL。 温馨提醒:请确保你的LCD能正常使用快速入门ESP32——点亮你的第一个LCD屏幕
 我的硬件是:ESP32S3+1.69LCD(无触摸),


一、下载LVGL库

  • 下载
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

二、修改配置

1、修改lv_conf.h配置

  • 将lv_conf_template.h文件要重命名为lv_conf.h
    在这里插入图片描述
  • 使能 v_conf.h文件
    在这里插入图片描述
  • 使能获取ESP32内部时钟,这样就不用单独提供心跳包了。(PS:在stm32中我们是通过定时器中断来提供心跳)
    在这里插入图片描述
  • 使能demo例程(在后面我们要使用到这个demo来测试)
    在这里插入图片描述

2、移动demo文件

  • 在platform中不会直接识别得到demo文件中的路径。所以我们需要将demo文件移动到src文件中
    在这里插入图片描述

3、修改LVGL Arduino 例程

  • 将arduino.ino文件全部复制到main,cpp中
    在这里插入图片描述
    在这里插入图片描述
  • 我们不能自己用这个例程,需要做一下修改

修改后main.cpp


#include <lvgl.h>
#include <TFT_eSPI.h>
#include "demos/lv_demos.h"


static const uint16_t screenWidth  = 240;//屏幕分辨率
static const uint16_t screenHeight = 280;

static lv_disp_draw_buf_t draw_buf;
static lv_color_t buf[ screenWidth * screenHeight ];

TFT_eSPI tft = TFT_eSPI(screenWidth, screenHeight); /* TFT instance */

/* Display flushing */
void my_disp_flush( lv_disp_drv_t *disp_drv, const lv_area_t *area, lv_color_t *color_p )
{
    uint32_t w = ( area->x2 - area->x1 + 1 );
    uint32_t h = ( area->y2 - area->y1 + 1 );

    tft.startWrite();
    tft.setAddrWindow( area->x1, area->y1, w, h );
    tft.pushColors( ( uint16_t * )&color_p->full, w * h, true );
    tft.endWrite();

    lv_disp_flush_ready( disp_drv );
}

void setup()
{
    Serial.begin( 115200 ); /* prepare for possible serial debug */
    Serial.println( "I am LVGL_Arduino" );

    lv_init();
    tft.begin();          /* TFT init */
    tft.setRotation( 3 ); /* Landscape orientation, flipped */

    lv_disp_draw_buf_init( &draw_buf, buf, NULL, screenWidth * screenHeight );
    /*Initialize the display*/
    static lv_disp_drv_t disp_drv;
    lv_disp_drv_init( &disp_drv );
    /*Change the following line to your display resolution*/
    disp_drv.hor_res = screenHeight;
    disp_drv.ver_res = screenWidth;
    disp_drv.flush_cb = my_disp_flush;
    disp_drv.draw_buf = &draw_buf;
    lv_disp_drv_register( &disp_drv );

    lv_demo_benchmark();          // OK

    Serial.println( "Setup done" );
}

void loop()
{
    lv_timer_handler(); /* let the GUI do its work */
    delay( 5 );
}


三、下载验证

  • 将程序下载到我们开发板中,查看效果
    在这里插入图片描述

四、错误修改指南

  • 要是下载到开发板中,屏幕没有一点反应。请确认移植TFT_eSPI后屏幕是否能正常显示
  • 下载若是花屏,查看分辨率是否设置正常还有缓存空间开辟是否太小
    在这里插入图片描述
    在这里插入图片描述

快速入门ESP32——移植LVGL(保姆级教程)

### ADS127L11与STM32驱动程序实现方法 #### 一、硬件连接说明 为了使ADS127L11能够正常工作并与STM32进行通信,需按照特定的方式连接两者之间的信号线。通常情况下,SPI接口用于此目的,具体连线包括但不限于CS(片选)、DIN(数据输入)、DOUT(数据输出)以及SCLK(时钟)。此外,还需要注意电源和地线的正确连接。 #### 二、软件初始化设置 针对STM32平台,在启动阶段应对SPI外设完成必要的参数设定,比如波特率、模式选择等。这部分可通过STM32CubeMX工具自动生成基础代码框架,之后再根据实际需求调整细节部分[^3]。 ```c // 初始化SPI配置结构体并调用HAL库函数完成初始化过程 static void MX_SPI1_Init(void) { hspi1.Instance = SPI1; hspi1.Init.Mode = SPI_MODE_MASTER; // 设置为主设备模式 hspi1.Init.Direction = SPI_DIRECTION_2LINES; // 双向传输方向 hspi1.Init.DataSize = SPI_DATASIZE_8BIT; // 数据大小为8位 hspi1.Init.CLKPolarity = SPI_POLARITY_LOW; // SCLK空闲状态低电平 hspi1.Init.CLKPhase = SPI_PHASE_1EDGE; // 第一个边沿采样 hspi1.Init.NSS = SPI_NSS_SOFT; // 软件控制NSS引脚 hspi1.Init.BaudRatePrescaler = SPI_BAUDRATEPRESCALER_16; // 波特率预分频系数 hspi1.Init.FirstBit = SPI_FIRSTBIT_MSB; // MSB先发送/接收 HAL_SPI_Init(&hspi1); } ``` #### 三、读取ADC转换结果 当准备就绪后,可以编写专门的功能函数用来获取来自ADS127L11的数据帧,并将其解析成有意义的信息形式——即电压值。考虑到该器件支持高速连续测量特性,建议采用DMA机制优化性能表现,减少CPU占用时间。 ```c uint32_t Read_ADC_Value(void){ uint8_t rx_buffer[3]; // 创建缓冲区存储接收到的数据 /* 启动一次完整的单通道读周期 */ HAL_GPIO_WritePin(CS_PORT, CS_PIN, GPIO_PIN_RESET); // 拉低CS激活从机 HAL_SPI_TransmitReceive_DMA(&hspi1, NULL, rx_buffer, 3); // 使用DMA方式收发数据包 while (__HAL_SPI_GET_FLAG(&hspi1, SPI_FLAG_TXE) != RESET){} // 等待直到发送完毕 HAL_GPIO_WritePin(CS_PORT, CS_PIN, GPIO_PIN_SET); // 结束通讯释放总线使用权 /* 将三个字节拼合成最终的结果 */ return ((rx_buffer[0]<<16)|(rx_buffer[1]<<8)|rx_buffer[2]); } float Convert_to_Voltage(uint32_t raw_data){ const float VREF = 2.5f; // 设定参考电压值 return (raw_data * VREF / pow(2, 24)); // 计算真实物理量表示法下的电压数值 } ``` #### 四、处理流程概述 整个系统的运作逻辑大致如下:首先由主机发出指令触发ADC内部开始新一轮的模数变换动作;随后等待一段时间让其充分稳定下来;接着利用上述提到的方法提取最新产生的样本点;最后经过简单的数学运算得到对应的模拟电信号强度描述。
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值