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

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

3天内不再提示

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

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

扫码添加小助手

加入工程师交流群

作者ID:jf_81113435

匠芯创D133CBS做工相当不错,惊艳我了,接口非常多,还有触摸屏,同时还可以接DVP摄像头、喇叭、TF卡等重要外设。

开箱及搭建VSCode开发环境


外观检查:PCB无弯曲变形

所有接口无氧化或损坏;

元器件无松动或脱落。

f28e824a-c39c-11f0-8ce9-92fbcf53809c.png

上电测试

连接Type-C线到电脑USB口;

电源指示灯立即亮起(绿色);

通过数字示波器观察供电电压是否正常。

f2a2fa72-c39c-11f0-8ce9-92fbcf53809c.png

通过示波器观察到供电电压5V,MCU供电电压3.3V,1.1V供MCU CORE使用均正常。

开发流程:开发环境搭建流程

安装Luban-Lite SDK;

访问匠芯创官方资源中心(https://gitee.com/artinchip/luban-lite);

下载Luban-Lite SDK后压缩到D盘;

在VSCode下载插件Luban-Lite;

f2b1a234-c39c-11f0-8ce9-92fbcf53809c.png

把压缩的文件夹在VSCODE打开可以自动激活插件,选择匠芯创的图标;

点击【open project】,可以选择示例demo;

f2bd7f64-c39c-11f0-8ce9-92fbcf53809c.png

点击侧边栏的【Config Project】图标进行Menuconfig配置;

f2cb22d6-c39c-11f0-8ce9-92fbcf53809c.png

修改完成后,须点击【Save】保存配置后再点击【Close】;

点击侧边栏的【Build Project】图标进行编译,随后可以进行烧录SDK。

Luban-Lite SDK使用


编译固件并烧录

通过VSCode进行Luban-Lite SDK的编译,第一次编译过慢,请耐心等待。

f2d62cbc-c39c-11f0-8ce9-92fbcf53809c.png

只有显示Luban-Liteis built successful才是编译成功,过程较慢请耐心等待,编译完成后可以同VSCode进行烧录,但是我没有使用,我用另一种方式,采用AIburn软件进行软件烧录,这个软件也可在匠芯创官网下载,这里主要讲烧录方式,这是软件界面。

f2e4e932-c39c-11f0-8ce9-92fbcf53809c.png

通过文件图标可以选择镜像文件。

最后面这个img后缀文件就是镜像文件。

首先我们【按住】开发板上面的【BOOT按键】和【RST按键】,然后我们松开【RST按键】,一秒之后再松开【BOOT按键】,就能进入烧录模式!

f2ed6030-c39c-11f0-8ce9-92fbcf53809c.png

这样就可以烧录了,等待烧录完成,系统自动进入。

f2fd8abe-c39c-11f0-8ce9-92fbcf53809c.png

这是系统的所有页面,也是非常流畅,采用RTT实时操作系统,非常好的一个板子。

LVGL GPIO 按键

音频测试


板子有许多资源可以使用,通过阅读原理图可以使用这些硬件做项目。

通过这些电路结合实物,以下是这些demo进行演示图片。

这些都是LVGL demo演示,可以观察到这些demo的响应都非常及时,也说明了这款cpu的性能如何,这个板子也提供相当多的资料与示例demo可供开发者迅速上手开发,可以应用相当多领域,接下来我给硬件接上喇叭。

f307f904-c39c-11f0-8ce9-92fbcf53809c.png

通过1.25mm端子喇叭接入可以选择4欧或者8欧,接下来使用按键来开控制led等的亮灭。

f325de06-c39c-11f0-8ce9-92fbcf53809c.png

通过这两个图片我们可以看到,当按键按下LED亮起,手拿开LED灭。音质也是非常悦耳,没有任何卡顿没有任何卡顿,这个板子也是相当强大了。

串口使用


实验简介

我们使用USB-TTL模块连接【PD.4】和【PD.5】两个引脚,将引脚复用为【UART2】的功能,实现串口双向的收发不定长数据!f33907ce-c39c-11f0-8ce9-92fbcf53809c.png

需要准备两个串口调试工具,创建相关代码文件夹,我们先要在【\\\\luban-lite\\\\application\\\\rt-thread\\\\helloworld\\\\】这个文件夹中创建一个【user_uart】文件夹!需要添加这个文件。

f347898e-c39c-11f0-8ce9-92fbcf53809c.png

所以我们在【user_uart】文件夹中的【SConscript】文件写入以下代码:

Import('AIC_ROOT') # 导入AIC_ROOT变量,通常用于表示项目根目录Import('rtconfig') # 导入rtconfig变量,通常包含项目的配置信息import rtconfig # 导入rtconfig模块,以便直接使用其中的配置frombuilding import * # 从building模块导入所有内容,可能包含自定义的构建函数和变量cwd = GetCurrentDir() # 获取当前SConscript文件所在的目录路径CPPPATH = [cwd] # 将当前目录添加到编译器的头文件搜索路径中列表src = [] # 创建一个空列表,用于存放源文件ifGetDepend('USER_UART3_TEST_ON')andGetDepend('AIC_USING_UART3'):src = Glob(os.path.join(cwd,'*.c')) # 使用Glob函数查找当前目录下所有的.c文件,并将它们添加到src列表中group= DefineGroup('lckfb-user-uart3-test', src, depend = [''], CPPPATH = CPPPATH) #源文件Return('group') # 将定义的构建组作为返回值,这样其他SConscript文件可以引用这个组

通过以上代码构建程序框架,编写UART2驱动代码,我们在【uart_test.c】文件中添加一下代码。

#include#include#include#include#include#include#include"hal_adcim.h"#include"rtdevice.h"#include"aic_log.h"#include"hal_gpai.h"#include#include"aic_hal_gpio.h"#defineSAMPLE_UART_NAME "uart2" // 串口设备名称#defineRCV_BUFF_SIZE_MAX 1024 // 接收最大字节长度staticstructrt_semaphore rx_sem; // 用于接收消息的信号量staticrt_device_t serial; // 串口设备句柄staticrt_thread_t serial_recv_thread; // 串口接收线程句柄staticcharserial_recv_buff[RCV_BUFF_SIZE_MAX]; // 串口接收缓存区staticcharserial_recv_flag; // 串口接收标志staticint serial_recv_length; // 接收字节长度/* ====================串口发送和打印线程=================== */#defineTHREAD_PRIORITY 25 // 线程优先级#defineTHREAD_STACK_SIZE 4096 // 线程大小#defineTHREAD_TIMESLICE 20 // 时间片staticrt_thread_t serial_thread = RT_NULL; // 线程控制块// 中断接收回调函数staticrt_err_t uart_input(rt_device_t dev, rt_size_t size){/* 串口有数据传入后产生中断,调用此回调函数,释放信号量 */if(size >0)rt_sem_release(&rx_sem);returnRT_EOK;}// 串口接收线程入口函数staticvoidserial_recv_thread_entry(void*param){rt_kprintf("\\nserial_recv_thread_entry run ......\\n");while(1){ chartemp_recv_buff =0;// 接收临时缓存区 intret = rt_device_read(serial,0, &temp_recv_buff,1);
if(ret < 0) // 出现了错误    {        pr_debug("read() return [%ld] %s\\\\n", rt_get_errno(), rt_strerror(rt_get_errno()));    }
if(ret ==0)// 未接到数据 { // 重置信号量 rt_sem_control(&rx_sem, RT_IPC_CMD_RESET, RT_NULL);
// 获取信号量,如果没有获取得到则阻塞在这里永远等待。 rt_sem_take(&rx_sem, RT_WAITING_FOREVER); }
if(ret ==1)// 接收到1字节的数据 { // 防止数据超出缓存区的大小 if(serial_recv_length < RCV_BUFF_SIZE_MAX - 1)        {            // 存入接收缓存区并递增长度            serial_recv_buff[serial_recv_length++] = temp_recv_buff;            // rt_kprintf("%x\\\\n", temp_recv_buff); // 打印接收到的字节,用于调试        }        else        {            // 如果缓冲区已满,则从0开始覆盖旧数据            serial_recv_length = 0;            serial_recv_buff[serial_recv_length++] = temp_recv_buff;        }
// 为接收缓存区最后添加 '\\\\0' serial_recv_buff[serial_recv_length] ='\\\\0';
// 设置串口接收完成标志 serial_recv_flag =1; }}}/************************************************函数名称 : Clear_recv_buff功 能 : 清空串口接收缓存区参 数 : 无返 回 值 :static void Clear_recv_buff(void){// 清空接收缓存区rt_memset(serial_recv_buff, 0, sizeof(serial_recv_buff));// 清空标志位serial_recv_flag = 0;// 清空缓存区长度计量serial_recv_length = 0;}/************************************************函数名称 : serial_send_byte功 能 : 串口发送一个字节参 数 : 发送的数据返 回 值 : RT_EOK成功 -RT_ERROR失败static int Serial_Send_Byte(uint8_t dat){int ret = rt_device_write(serial, 0, &dat, 1);if(ret != 1){LOG_E("Failed to [Serial_Send_Byte] code[%d] !!!", ret);return -RT_ERROR;}return RT_EOK;}/************************************************函数名称 : Serial_Send_String功 能 : 串口发送字符串参 数 : data_buff缓存区地址返 回 值 : RT_EOK成功 -RT_ERROR失败static int Serial_Send_String(uint8_t *data_buff){int err_count = 0;/* 地址为空 或者 值为空 跳出 */while(data_buff && *data_buff){ if(RT_EOK != Serial_Send_Byte(*data_buff++)) { err_count++; continue; }}/* 如果err_count不为0,则说明发送的时候有错误!!! */if(err_count){ LOG_E("serial_send_string failed !!!"); return-RT_ERROR;}returnRT_EOK;}/******************************************************************* 函 数 名 称:Serial_Recv_DATA* 函 数 说 明:接串口的数据* 函 数 形 参:data_buff数据缓存区* 函 数 返 回: 0: 未接收到数据* 其他: 接收到的数据长度* 作 者:LCKFB* 备 注:无 ******************************************************************/ intSerial_Recv_DATA(uint8_t *data_buff) { inti;
/* 判断是否接到了数据 */ if((serial_recv_flag !=1) || (serial_recv_length ==0)) { /* 未接到 */ return0; }
/* 将数据转存到指针指向的地址中 */ for(i =0; i < serial_recv_length; i++)  {  data_buff[i] = serial_recv_buff[i];  }
/* 加入字符串结尾 */ data_buff[i] ='\\0';
/* 清除接收的数据、标志位和数据长度。 */ Clear_recv_buff();
returni;// 返回接收到的数据长度 }/************************************************函数名称 : UART_Init功 能 : 串口初始化参 数 : 无返 回 值 : RT_EOK成功 -RT_ERROR失败static int UART_Init(void){int ret = 0;// 清空接收缓存区rt_memset(serial_recv_buff,0,sizeof(serial_recv_buff));// 清空标志位serial_recv_flag = 0;// 清空缓存区长度计量serial_recv_length = 0;rt_kprintf("Try to open(%s)\\\\n", SAMPLE_UART_NAME);// 获取串口句柄serial = rt_device_find(SAMPLE_UART_NAME);if (!serial){ LOG_E("find %s failed!\\\\n", SAMPLE_UART_NAME); return -RT_ERROR;}// 初始化信号量ret = rt_sem_init(&rx_sem, "rx_sem", 0, RT_IPC_FLAG_FIFO);if (ret != RT_EOK){ LOG_E("failed to rt_sem_init !\\\\n"); return -RT_ERROR;}// 打开串口设备ret = rt_device_open(serial, RT_DEVICE_FLAG_INT_RX);if (ret != RT_EOK){ LOG_E("open %s failed : %d !\\\\n", SAMPLE_UART_NAME, ret); return -RT_ERROR;}// 设置接收回调函数rt_device_set_rx_indicate(serial, uart_input);// 创建串口数据接收线程serial_recv_thread = rt_thread_create("serial", serial_recv_thread_entry, RT_NULL, 1024*2, 15, 20);if (serial_recv_thread != RT_NULL){ // 启动线程 rt_thread_startup(serial_recv_thread);}else{ rt_device_close(serial); LOG_E("Failed to [rt_thread_create] !!!"); return -RT_ERROR;}return RT_EOK;}// 线程入口函数static void serial2_thread_entry(void *param){rt_kprintf("Start serial2_thread_entry...\\n");while(1){ int count = 0; /* 接收缓存区 */ uint8_t recv_buff[128] = {0}; /* 获取接收到的数据长度 */ count = Serial_Recv_DATA(recv_buff); /* 确保 count 不超过 recv_buff 大小,避免越界访问 */ if(count >sizeof(recv_buff)) { LOG_E("Error: Received data exceeds buffer size! count = %d",count); count =sizeof(recv_buff); // 限制数据长度避免溢出 } if(count >0) { rt_kprintf("\\\\n======================================\\\\n"); rt_kprintf("\\\\nRead Data = %s\\\\n", recv_buff); rt_kprintf("\\\\n======================================\\\\n"); } /* 延迟 1000 毫秒 */ rt_thread_mdelay(1000);}}// 数据发送函数staticvoidsend_demoData(intargc,char**argv){staticintnum =1;uint8_t Send_Buff[128] = {"kunlunpi * UART框架使用测试"};intret =0;charbuffer[128] = {0};// 使用 snprintf 来格式化要发送的字符串snprintf(buffer,sizeof(buffer),"【%d】%s", num, (argc ==2) ? *(argv+1) : (char*)Send_Buff);// 发送数据ret = Serial_Send_String((uint8_t *)buffer);if(ret != RT_EOK){ LOG_E("%s: The test data transmission failed.", __FUNCTION__);}else{ rt_kprintf("\\\\n[%d] Send success\\\\n", num); num++;// 只有发送成功时才递增 num}}// 导出函数为命令MSH_CMD_EXPORT(send_demoData, Send test data);// 串口接收和发送线程开启staticvoiduart2_test_on(intargc,char**argv){intret = UART_Init(); // 串口初始化if(ret != RT_EOK){LOG_E("Failed to [UART_Init] !!!");LOG_E("file: %s line: %d", **FILE** , **LINE** );return;}rt_kprintf("UART_Init run END!!\\n");/* 创建线程,名称是 serial3_thread,入口是 serial3_thread_entry */serial_thread = rt_thread_create("serial2_thread", serial2_thread_entry, RT_NULL, THREAD_STACK_SIZE, THREAD_PRIORITY, THREAD_TIMESLICE);/* 如果获得线程控制块,启动这个线程 */if(serial_thread != RT_NULL) rt_thread_startup(serial_thread);rt_kprintf("Test transmission and reception using UART2 serial port!!\\\\n");}// 导出函数为命令MSH_CMD_EXPORT(uart2_test_on, Test transmission and reception using UART2 serial port);

以上代码大部分都归属立创开发板,需要填加文件配置文件,在同级Kconfig中写入以下代码。

config USER_UART2_TEST_ONbool"Test transmission and reception using UART2 serial port"defaultnhelp

然后程序编译等待编译完成。

f355b6e4-c39c-11f0-8ce9-92fbcf53809c.png

会出现【Luban-Lite is built successfully】,烧录程序,打开串口调试工具。

f3632eb4-c39c-11f0-8ce9-92fbcf53809c.png

我们可以看到串口输出信息,最后我给串口发送信息能发送到我的电脑。

f36d9656-c39c-11f0-8ce9-92fbcf53809c.png

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

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

    关注

    4391

    文章

    23742

    浏览量

    420756
  • 开发板
    +关注

    关注

    25

    文章

    6122

    浏览量

    113323
  • 匠芯创
    +关注

    关注

    0

    文章

    44

    浏览量

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

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

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

    本次开箱的D133CBSKunLunPi开发板,正面配备了一块4.3寸的电容触摸屏,开机即用,系统内置主菜单和丰富的demo演示程序,方便用户快速体验各项功能。开发板开箱及介绍开发板
    的头像 发表于 11-19 09:10 3606次阅读
    <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开发板试用体验】D133CBS KunLun Pi开发板串口使用

    using UART2 serial port); 以上代码大部分都归属立开发板 需要填加文件配置文件 在同级Kconfig中写入一下代码 config USER_UART2_TEST_ON
    发表于 09-06 11:00

    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 873次阅读
    【免费试用】<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 974次阅读
    <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 537次阅读
    赋能两轮车新国标 | <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系列开发板分享(二)

    探索 Kunlun Pi | 基于D13x
    的头像 发表于 11-18 18:11 965次阅读
    <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>分享(二)