0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

探索 Kunlun Pi | 基于匠芯创D13x系列开发板分享(二)

匠芯创ArtInChip 2025-11-18 18:11 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

作者ID:jf_92517703

环境搭建


板卡实物

fcc4d64a-c466-11f0-8ce9-92fbcf53809c.png

首次编译烧写源码

下载源码:https://gitee.com/artinchip/luban-lite.git

VSCode 安装插件

fcd865de-c466-11f0-8ce9-92fbcf53809c.png

在VSCode打开源码

fce152a2-c466-11f0-8ce9-92fbcf53809c.png

在第一次编译之前必须清理下工程

fcf1a530-c466-11f0-8ce9-92fbcf53809c.png

下载烧写工具:

https://gitee.com/artinchip/tools,下载后安装。

fd00743e-c466-11f0-8ce9-92fbcf53809c.png

在VSCode安装插件后打开SDK目录

fd12f30c-c466-11f0-8ce9-92fbcf53809c.png

否则报错

fd23823a-c466-11f0-8ce9-92fbcf53809c.png

选择配置

fd34b0aa-c466-11f0-8ce9-92fbcf53809c.png

编译bootloader程序,选择配置。

fd4ec1de-c466-11f0-8ce9-92fbcf53809c.png

编译

fd5c09d4-c466-11f0-8ce9-92fbcf53809c.png

编译helloword程序,选择配置。

fd667ba8-c466-11f0-8ce9-92fbcf53809c.png

编译APP
fd73ac42-c466-11f0-8ce9-92fbcf53809c.png

烧录固件

先按住【BOOT】,然后按下【RESET】,AiBrun显示设置已连接选择生成的固件,点击【开始】,完成下载。fd83596c-c466-11f0-8ce9-92fbcf53809c.png

焊接调试串口

fd900428-c466-11f0-8ce9-92fbcf53809c.png

打开mobarxterm查看日志

fda474f8-c466-11f0-8ce9-92fbcf53809c.png

SDK应用程序入口

fdc51802-c466-11f0-8ce9-92fbcf53809c.png

修改RTT的main函数,循环打印输出计数。

application\rt-thread\helloworld\main.c

fdd032a0-c466-11f0-8ce9-92fbcf53809c.png

板卡初始化文件:target\d13x\kunlunpi88-nor\board.c

显示了软件版本【Version: Car1.2.3】,说明找到了板子的初始化文件【board.c】文件。

fde3789c-c466-11f0-8ce9-92fbcf53809c.png

板卡的配置文件:

target\d13x\common\Kconfig.board

target\configs\d13x_kunlunpi88-nor_rt-thread_helloworld_defconfig

KEY测试


使能gpio_key的测试程序

fdef0522-c466-11f0-8ce9-92fbcf53809c.png

修改了对应的配置文件

fdfce818-c466-11f0-8ce9-92fbcf53809c.png

根据配置添加编译

fe0ee6f8-c466-11f0-8ce9-92fbcf53809c.png

关联源码:

bsp\examples\test-gpio\test_gpio_key.c

fe1a538a-c466-11f0-8ce9-92fbcf53809c.png

fe290c5e-c466-11f0-8ce9-92fbcf53809c.png

LVGL-Music Demo


添加LVGL的Music示例Demo测试

要想直到helloword的程序到底运行的什么LVGL程序,首先查看运行的线程,发现存在LVGL线程。

fe32c6d6-c466-11f0-8ce9-92fbcf53809c.png

在VSCode中搜索【LVGL】线程的创建:packages\artinchip\lvgl-ui\lvgl_v9\lvgl\env_support\rt-thread\lv_rt_thread_port.c

在RT-Thread 环境中使用【scons】(即通过 ENV 工具链)编译时,会自动定义宏【__RTTHREAD__】

fe3de98a-c466-11f0-8ce9-92fbcf53809c.png

线程初始化位置:packages\artinchip\lvgl-ui\lv_demo.c

fe466e7a-c466-11f0-8ce9-92fbcf53809c.png

打开工程配置:scons --menuconfig

配置文件变化:target\configs\d13x_kunlunpi88-nor_rt-thread_helloworld_defconfig

fe542be6-c466-11f0-8ce9-92fbcf53809c.png

这就是出厂的demo入口【ui_init】

fe60b762-c466-11f0-8ce9-92fbcf53809c.png

【void lv_example_observer_2(void)】这个没有被调用,所以【void aic_ui_init()】就是入口:packages\artinchip\lvgl-ui\aic_ui.c

fe72da0a-c466-11f0-8ce9-92fbcf53809c.png

在这里修改为【music】的demo

fe85bc10-c466-11f0-8ce9-92fbcf53809c.png

编译下载

fe9817fc-c466-11f0-8ce9-92fbcf53809c.png

打开内存和性能监视:packages\artinchip\lvgl-ui\lvgl_v9\lv_conf.h

fea3da56-c466-11f0-8ce9-92fbcf53809c.png

屏幕刷新帧率最低35帧,CPU使用最高50%。

feadbf12-c466-11f0-8ce9-92fbcf53809c.png

LVGL-自己添加APP


要自己定义自己的UI程序,我们自己仅仅需要实现【ui_init】函数即可,从官方的串口工具得到启发。

第一步

fec43454-c466-11f0-8ce9-92fbcf53809c.png

第二步

fed2ea94-c466-11f0-8ce9-92fbcf53809c.png

第三步

ff027476-c466-11f0-8ce9-92fbcf53809c.png

第四步

ff0df1fc-c466-11f0-8ce9-92fbcf53809c.png

那我自己做一个串口工具的UI试试

在【packages\artinchip\lvgl-ui\lv_demo.c】中添加源码,源码由通义千问完成。

#include"lvgl.h"#include"stdio.h"#include"string.h"// 全局控件句柄staticlv_obj_t*rx_textarea =NULL;staticlv_obj_t*tx_textarea =NULL;staticlv_obj_t*baud_dropdown =NULL;staticlv_obj_t*port_dropdown =NULL;staticlv_obj_t*hex_recv_checkbox =NULL;staticlv_obj_t*hex_send_checkbox =NULL;staticlv_obj_t*interval_textarea =NULL;staticlv_obj_t*auto_send_checkbox =NULL;// 模拟发送按钮回调staticvoidsend_btn_event_cb(lv_event_t*e){constchar*text =lv_textarea_get_text(tx_textarea);if(text &&strlen(text) >0) {// 模拟追加到接收区(实际应由 UART 中断处理)staticcharbuf[128];snprintf(buf,sizeof(buf),"Sent: %s\r\n", text);lv_textarea_add_text(rx_textarea, buf);// lv_textarea_cursor_end(rx_textarea); // 滚动到底部}}// 模拟打开串口按钮回调staticvoidopen_uart_btn_event_cb(lv_event_t*e){

charmsg[64];snprintf(msg,sizeof(msg),"Opened %s @ %sbps\r\n","com3","115200");lv_textarea_add_text(rx_textarea, msg);

// lv_textarea_cursor_end(rx_textarea);}// 创建串口调试助手 UIvoidcreate_uart_tool(void) {// 主容器:水平布局,左右分区lv_obj_t *main_cont =lv_obj_create(lv_screen_active());lv_obj_set_size(main_cont,LV_PCT(100),LV_PCT(100));lv_obj_set_layout(main_cont,LV_LAYOUT_FLEX);lv_obj_set_flex_flow(main_cont,LV_FLEX_FLOW_ROW);lv_obj_set_style_pad_all(main_cont,8,0);//lv_obj_set_style_bg_color(main_cont, lv_color_light_gray(), 0);

// ========== 左侧:控制面板 ==========lv_obj_t*left_panel =lv_obj_create(main_cont);lv_obj_set_width(left_panel,160);lv_obj_set_height(left_panel,LV_PCT(100));lv_obj_set_layout(left_panel, LV_LAYOUT_FLEX);lv_obj_set_flex_flow(left_panel, LV_FLEX_FLOW_COLUMN);lv_obj_set_style_pad_row(left_panel,8,0);// 串口端口lv_obj_t*label =lv_label_create(left_panel);lv_label_set_text(label,"Port:");port_dropdown =lv_dropdown_create(left_panel);lv_dropdown_set_options(port_dropdown,"UART0\nUART1\nUART2\nUART3");// 波特率label =lv_label_create(left_panel);lv_label_set_text(label,"Baudrate:");baud_dropdown =lv_dropdown_create(left_panel);lv_dropdown_set_options(baud_dropdown,"9600\n19200\n38400\n57600\n115200");lv_dropdown_set_selected(baud_dropdown,4); // 默认 115200// 打开串口按钮lv_obj_t*open_btn =lv_button_create(left_panel);lv_obj_set_width(open_btn,LV_PCT(100));lv_obj_add_event_cb(open_btn, open_uart_btn_event_cb, LV_EVENT_CLICKED,NULL);lv_obj_t*btn_label =lv_label_create(open_btn);lv_label_set_text(btn_label,"Open UART");lv_obj_center(btn_label);// HEX 显示hex_recv_checkbox =lv_checkbox_create(left_panel);lv_checkbox_set_text(hex_recv_checkbox,"Hex Display");// HEX 发送hex_send_checkbox =lv_checkbox_create(left_panel);lv_checkbox_set_text(hex_send_checkbox,"Hex Send");// 发送间隔label =lv_label_create(left_panel);lv_label_set_text(label,"Interval (ms):");interval_textarea =lv_textarea_create(left_panel);lv_textarea_set_text(interval_textarea,"1000");lv_textarea_set_one_line(interval_textarea,true);lv_textarea_set_max_length(interval_textarea,8);lv_obj_set_height(interval_textarea,30);// 自动发送auto_send_checkbox =lv_checkbox_create(left_panel);lv_checkbox_set_text(auto_send_checkbox,"Auto Send");// 发送按钮lv_obj_t*send_btn =lv_button_create(left_panel);lv_obj_set_width(send_btn,LV_PCT(100));lv_obj_add_event_cb(send_btn, send_btn_event_cb, LV_EVENT_CLICKED,NULL);btn_label =lv_label_create(send_btn);lv_label_set_text(btn_label,"Send");lv_obj_center(btn_label);// ========== 右侧:接收/发送区 ==========lv_obj_t*right_panel =lv_obj_create(main_cont);lv_obj_set_flex_grow(right_panel,1);lv_obj_set_height(right_panel,LV_PCT(100));lv_obj_set_flex_flow(right_panel, LV_FLEX_FLOW_COLUMN);lv_obj_set_layout(right_panel, LV_LAYOUT_FLEX);lv_obj_set_style_pad_row(right_panel,8,0);// 接收区label =lv_label_create(right_panel);lv_label_set_text(label,"Received Data:");lv_obj_set_style_margin_bottom(label,4,0);rx_textarea =lv_textarea_create(right_panel);lv_obj_set_flex_grow(rx_textarea,1);lv_textarea_set_placeholder_text(rx_textarea,"Waiting for data...");//lv_obj_clear_flag(rx_textarea, LV_OBJ_FLAG_EDITABLE); // 只读lv_obj_set_style_bg_color(rx_textarea,lv_color_white(),0);lv_obj_set_style_text_color(rx_textarea,lv_color_black(),0);// 发送区label =lv_label_create(right_panel);lv_label_set_text(label,"Transmit Data:");lv_obj_set_style_margin_bottom(label,4,0);tx_textarea =lv_textarea_create(right_panel);lv_obj_set_flex_grow(tx_textarea,1);lv_textarea_set_placeholder_text(tx_textarea,"Enter data to send...");lv_obj_set_style_bg_color(tx_textarea,lv_color_white(),0);lv_obj_set_style_text_color(tx_textarea,lv_color_black(),0);// 可选:设置默认字体(防止文字太小)lv_obj_set_style_text_font(lv_screen_active(), &lv_font_montserrat_14,0);}

ff20d312-c466-11f0-8ce9-92fbcf53809c.png

ff322b44-c466-11f0-8ce9-92fbcf53809c.png

LVGL-使用AIUIBuilder开发


使用AIUIBuilder开发LVGL程序值得点赞,页面绘制、资源管理一次解决,安逸啊!

使用AIUIBuilder

scons --menuconfig

打开工程配置

ff3ec138-c466-11f0-8ce9-92fbcf53809c.png

先设计一个简单的demo

ff47ed08-c466-11f0-8ce9-92fbcf53809c.png

将生成的【ui_builder】下的文件全部拷贝到工程目录【packages\artinchip\lvgl-ui\aic_demo\ui_builder】。

首次拷贝可能需要拷贝【lv_conf_custom.h】文件,因为拷贝了这个文件导致整个LVGL源码会重新编译,因为【lv_conf.h】包含了它,在【lv_conf_custom.h】文件在没有改变就不要拷贝这个文件。

运行结果

ff553bb6-c466-11f0-8ce9-92fbcf53809c.png

字库和图片资源测试

ff644f3e-c466-11f0-8ce9-92fbcf53809c.png

字体生成

ff6eb596-c466-11f0-8ce9-92fbcf53809c.png

还可以添加各种字体文件

ff7a0f22-c466-11f0-8ce9-92fbcf53809c.png

图片资源的使用

ff89c188-c466-11f0-8ce9-92fbcf53809c.png

测试结果

ff92a6ae-c466-11f0-8ce9-92fbcf53809c.png

添加用户APP文件夹到构建系统


添加自己的APP代码

**修改SConscript文件,**修改此文件会导致整个工程重新编译

添加user_app目录及子目录:SConscript

user_app内部的SConscript文件都是一样的,复制于【application\rt-thread\helloworld\SConscript】,Kconfig都是空文件。

ff9ecae2-c466-11f0-8ce9-92fbcf53809c.png

ffa7566c-c466-11f0-8ce9-92fbcf53809c.png

**这个构建脚本大致意思是,**添加当前目录的c文件到构建系统,递归添加子目录的c文件到构建系统。

Import('RTT_ROOT')Import('rtconfig')frombuilding import *
cwd = GetCurrentDir()src = Glob('*.c')CPPPATH = [cwd, ]
CFLAGS =' -c -ffunction-sections'
group = DefineGroup('Applications', src, depend = [''], CPPPATH = CPPPATH, CFLAGS=CFLAGS)
list = os.listdir(cwd)foriteminlist: ifos.path.isfile(os.path.join(cwd, item,'SConscript')): group=group+ SConscript(os.path.join(item,'SConscript'))
Return('group')

application\user_app\helloworld\user_main.c

/* * Copyright (c) 2022-2024, ArtInChip Technology Co., Ltd * * SPDX-License-Identifier: Apache-2.0 * * Authors: weilin.peng@artinchip.com */
#include#ifdefRT_USING_ULOG#include#endif
rt_device_tg_serial;
intuser_app_entry(void){ log_i("INIT_APP_EXPORT Hello World!\n"); g_serial =rt_device_find("uart2");
if(!g_serial) { log_w("find %s failed!\n","uart2"); return-RT_ERROR; } rt_err_t ret =rt_device_open(g_serial, RT_DEVICE_OFLAG_RDWR | RT_DEVICE_FLAG_INT_RX); if(ret != RT_EOK) { log_w("open %s failed !\n","uart2"); return-RT_ERROR; }
return0;}INIT_APP_EXPORT(user_app_entry);

application\user_app\ui\ui.c

/* * Copyright (c) 2022-2024, ArtInChip Technology Co., Ltd * * SPDX-License-Identifier: Apache-2.0 * * Authors: weilin.peng@artinchip.com */
#include#ifdefRT_USING_ULOG#include#endif
externrt_device_tg_serial;voidscreen_button_1_custom_clicked(void){ char*msg ="Hello World!\n"; log_i("send:%s\n",msg); rt_device_write(g_serial,0, msg,strlen(msg));}

screen_button_1_custom_clicked这个是按键点击的重写函数,原本是弱定义。

ffb22af6-c466-11f0-8ce9-92fbcf53809c.png

测试结果

点击button串口发送hello word。

ffe4e7a2-c466-11f0-8ce9-92fbcf53809c.png

fff252fc-c466-11f0-8ce9-92fbcf53809c.png

以上内容来源:电子发烧友论坛

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 板卡
    +关注

    关注

    3

    文章

    178

    浏览量

    17515
  • 开发板
    +关注

    关注

    26

    文章

    6431

    浏览量

    121022
  • 匠芯创
    +关注

    关注

    0

    文章

    66

    浏览量

    222
收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    探索 KunLun Pi | 基于D13x系列开发板分享(三)

    本次开箱的D133CBSKunLunPi开发板,正面配备了一块4.3寸的电容触摸屏,开机即用,系统内置主菜单和丰富的demo演示程序,方便用户快速体验各项功能。开发板开箱及介绍开发板
    的头像 发表于 11-19 09:10 5118次阅读
    <b class='flag-5'>探索</b> <b class='flag-5'>KunLun</b> <b class='flag-5'>Pi</b> | 基于<b class='flag-5'>匠</b><b class='flag-5'>芯</b><b class='flag-5'>创</b><b class='flag-5'>D13x</b><b class='flag-5'>系列</b><b class='flag-5'>开发板</b>分享(三)

    科技】D13X-DOC

    产品简介 D13x D13x 系列是一款高性能的工业级高清显示和智能控制 MCU,采用国产自主高算力 RISC-V 内核,配备强大的 2D 图形加速处理器, 内置自研 PNG/JPEG
    发表于 07-02 09:52

    【新品体验】D133CBS KunLun Pi开发板试用体验

    D133CBS RISC-V KunLun Pi V1.0 是一款基于
    发表于 07-15 17:16

    D133CBS RISC-V KunLun Pi V1.0开发板开发资料

    开发板简介 D13x 是 ArtInChip 一款基于 RISC-V 的高性能、国产自主、工业级全高清显示与智能控制 MCU,配备强大的 2D 图形加速处理器、 PNG 解码、JPEG 编解码引擎
    发表于 07-15 17:27

    D133CBS KunLun Pi开发板试用体验】《D133CBS RISC-V KunLun Pi 》 开箱及搭建vscode开发环境

    一、开箱概览 包装内容 打开包裹:D133CBS开发板 x1 板子的做工也是相当不错,惊
    发表于 09-04 22:33

    D133CBS KunLun Pi开发板试用体验】1、开发板开箱及介绍

    开箱 非常感谢ArtInChip 与电子发烧友论坛给的这次D133CBS KunLun Pi
    发表于 09-05 13:49

    D133CBS KunLun Pi开发板试用体验】2、SDK下载+环境搭建

    的luban-lite文件夹 在vscode的插件商店搜索:LubanLite,安装 左侧会出现的LOGO,点开它,就有了一堆快捷操作 创建项目 点击open project,可以按标签进行筛选
    发表于 09-05 19:33

    D133CBS KunLun Pi开发板试用体验】+环境搭建

    板卡实物 昆仑派KunLun Pi ArtInChipD133CBS工业级HMI
    发表于 09-10 17:01

    D133CBS KunLun Pi开发板试用体验】开箱评测

    D133CBS KunLun Pi开发板试用
    发表于 09-11 13:44

    D133CBS KunLun Pi开发板试用体验】介绍、环境搭建

    D133CBS KunLun Pi开发板试用
    发表于 09-17 10:35

    【免费试用】D133CBS KunLun Pi开发板试用体验

    D133CBSRISC-VKunLunPiV1.0是一款基于D13x芯片的人机交互应用开发板
    的头像 发表于 07-29 08:06 1429次阅读
    【免费试用】<b class='flag-5'>匠</b><b class='flag-5'>芯</b><b class='flag-5'>创</b><b class='flag-5'>D</b>133CBS <b class='flag-5'>KunLun</b> <b class='flag-5'>Pi</b><b class='flag-5'>开发板</b>试用体验

    D13x系列通过工业和信息化部重点实验室测试

    2025年8月,中国电子技术标准化研究院(电子标准院)作为集成电路测试与评价工业和信息化部重点实验室依托单位,完成了对RISC-V显示控制一体MCUD13x
    的头像 发表于 08-29 18:48 1379次阅读
    <b class='flag-5'>匠</b><b class='flag-5'>芯</b><b class='flag-5'>创</b><b class='flag-5'>D13x</b><b class='flag-5'>系列</b>通过工业和信息化部重点实验室测试

    赋能两轮车新国标 | D13x系列芯片为手机无线投屏与导航提供核心支持

    近日,推出基于D13x系列工业级显示控制芯片的两轮车无线投屏解决方案。该方案积极响应两轮车新国标智能化要求,以极高的性价比为核心优势,
    的头像 发表于 09-17 18:03 1038次阅读
    赋能两轮车新国标 | <b class='flag-5'>匠</b><b class='flag-5'>芯</b><b class='flag-5'>创</b><b class='flag-5'>D13x</b><b class='flag-5'>系列</b>芯片为手机无线投屏与导航提供核心支持

    探索KunLun Pi | 基于D13x系列开发板分享

    D133CBS做工相当不错,惊艳我了,接口非常多,还有触摸屏,同时还可以接DVP摄像头、喇叭、TF卡等重要外设。开箱及搭建VSCode开发环境外观检查:PCB无弯曲变形所有接口无氧化或损坏;元器件无
    的头像 发表于 11-17 18:05 1950次阅读
    <b class='flag-5'>探索</b><b class='flag-5'>KunLun</b> <b class='flag-5'>Pi</b> | 基于<b class='flag-5'>匠</b><b class='flag-5'>芯</b><b class='flag-5'>创</b><b class='flag-5'>D13x</b><b class='flag-5'>系列</b><b class='flag-5'>开发板</b>分享

    看得见的智慧生活 | D12x系列赋能多款小米旗舰新品

    力,D12x系列为用户带来了清晰、流畅、智能的交互体验。D12x系列工业级“点屏利器”
    的头像 发表于 04-16 17:10 958次阅读
    看得见的智慧生活 | <b class='flag-5'>匠</b><b class='flag-5'>芯</b><b class='flag-5'>创</b><b class='flag-5'>D12x</b><b class='flag-5'>系列</b>赋能多款小米旗舰新品