ART PI在RT-Thread Studio上开发体验

本文分享了在RT-Thread Studio中使用ART PI进行开发的体验,包括PWM配置、驱动ILI9488 LCD屏和配置LVGL GUI。在PWM配置时遇到STM32H7xx_HAL_conf.h的TIM未开启问题,LCD驱动则相对顺畅,但LVGL配置出现异常,最终通过对比社区代码解决问题。虽然RT-Thread Studio提供了便捷的底层驱动配置,但仍有完善空间。
摘要由CSDN通过智能技术生成

ART PI与RTThread

ART是基于STM32H750XB设计的一块板子,自带STLINK且将串口合并在同一个typeC口上,烧录和运行观察都很方便。而作为RTThread社区运营的产物,在RTT官方开发工具RT-Thread Studio里有专门的配套待遇。接下来就讲一下个人的使用体验。

PWM配置体验

拿到一块板子第一任务当然是点个灯,而在RT-Thread Studio里可以看到ART官方团队早就准备好了相关的预设配置,只需要点击或者手动去配置相关标志位定义即可使用
在这里插入图片描述
然而美中不足的是,尽管现在不需要再手动添加初始化的相关代码,但在stm32h7xx_hal_conf.h里的TIM相关定义没有随着设置开启而开启,还是处于注释状态,当时折腾了半天才发现没有启动TIM。
在这里插入图片描述

驱动LCD(ili9488)

ART官方推出了一款ili9488驱动的屏幕也是使用SPI驱动的,理论上只需要配置一下即可使用,且官方也推送了社区内相关适配文章
按照文章作者的说法,使用ART配置LCD只需要简简单单的在设置中打开对应的开关即可使用,而在最新的1.3.0版本中,可以明显感觉到相比较文章发布时的使用有了一定程度的优化。
在这里插入图片描述
如SPI2的初始化代码官方配置好了,不需要再去cubeMX配置然后复制粘贴修改,以及当时官方的LCD默认打开是并口配置,与自家SPI屏幕冲突,现在的话,以及是对应的SPI而不是并口。
在这里插入图片描述

配置LVGL

配置完屏幕后,只是运行屏幕测试并不能满足,接着就需要进行进阶的配置。例如来个GUI,官方有专门配置好的LVGL设置,原本配置完屏幕这么顺利后,个人对接下来配置LVGL的预期就是跟上面一样打开开关编译下载查看即可。
但是跟着配置屏幕的博主进行同样的LVGL配置发现。
在这里插入图片描述
出现了“跑飞”的情况,而在LVGL移植文章中也有人遇到了类似的情况,一开始我的解决方向也是跟作者在下面评论区回答的分辨率问题,而在我多次修改后,问题并没有解决,在社区内寻找一番后,得到了作者当时的代码源码。
文本比较
通过比较发现了当时的源码与最新版本代码的不同之处。运行旧版本的代码,屏幕顺利跑起来。
附上源码:

#include "littlevgl2rtt.h"
#include "lvgl.h"
static rt_device_t device;
static struct rt_device_graphic_info info;
static struct rt_messagequeue *input_mq;
static int _lv_init = 0;
static lv_disp_drv_t disp_drv;
static lv_disp_buf_t disp_buf;
static void color_to16_maybe(lv_color16_t *dst, lv_color_t *src)
{
   
#if (LV_COLOR_DEPTH == 16)
    dst->full = src->full;
#else
    dst->ch.blue = src->ch.blue;
    dst->ch.green = src->ch.green;
    dst->ch.red = src->ch.red;
#endif
}
/* Todo: add gpu */
static void lcd_fb_flush(lv_disp_drv_t *disp_drv, const lv_area_t *area, lv_color_t *color_p)
{
   
    int x1, x2, y1, y2;
    x1 = area->x1;
    x2 = area->x2;
    y1 = area->y1;
    y2 = area->y2;
    /*Return if the area is out the screen*/
    if (x2 < 0)
        return;
    if (y2 < 0)
        return;
    if (x1 > info.width - 1)
        return;
    if (y1 > info.height - 1)
        return;
    /*Truncate the area to the screen*/
    int32_t act_x1 = x1 < 0 ? 0 : x1;
    int32_t act_y1 = y1 < 0 ? 0 : y1;
    int32_t act_x2 = x2 > info.width - 1 ? info.width - 1 : x2;
    int32_t act_y2 = y2 > info.height - 1 ? info.height - 1 : y2;
    uint32_t x;
    uint32_t y;
    long int location = 0;
    /* 8 bit per pixel */
    if (info.bits_per_pixel == 8)
    {
   
        uint8_t *fbp8 = (uint8_t *)info.framebuffer;
        //TODO color convert maybe
        fo
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值