1804|1

111

帖子

0

TA的资源

一粒金砂(中级)

楼主
 

【平头哥RVB2601创意应用开发】用于单片机调试的有线和无线串口屏 [复制链接]

  本帖最后由 serialworld 于 2022-5-20 18:21 编辑

 

作品名称

用于单片机调试的有线和无线串口屏

作者:serialworld

  • 项目背景

单片调试时经常需要串口显示相关的信息,一般串口需要电脑屏幕的显示。单片机需要连接电脑来显示串口的信息。有时候使用电脑的屏幕显示不方便,如果直接使用一块可以显示串口信息的屏幕,开发调试时就比较方便。如果开发板和电脑距离比较远,使用无线串口功能就比较方便了。也可以通过无线串口连接开发板,方便调试和信息显示。也可以把RVB2601开发板作为其他开发板的无线信息显示屏。

  • 作品简介

CH2601 是基于玄铁 E906 的 RISC-V 生态芯片,最高主频 220MHz,支持 AliOS Things

物联网操作系统、平头哥 YoC 软件平台及平头哥剑池开发工具(CDK)。

RVB2601是基于平头哥生态芯片CH2601的开发板,板载JTAG调试器,WiFi&BLE芯片 W800,

音频 ADC-ES7210,音频 DAC-ES8156,128x64 OLED 屏幕,RGB 三色指示灯,用

户按键,及兼容 Arduino 的扩展接口。

 本项目是利用RVB2601屏幕和串口及无线功能可以设计一个有线或是无线的串口信息显示屏,方便

 
   

显示单片机的调试信息。

 

  • 系统框图

  UART0可以接收其他单机系统的串口输出,OLED显示输出结果。使用下面标记的引脚可以接收其他单片机的串口输出的信息。

 

 

  • 各部分功能说明和解析

程序主要由3个任务分别是gui_lvgl_task 显示数据,led_task负责led闪烁,ch_input_task负责串口数据的输入。程序的基本功能是接收串口的输入并通过调用lvgl GUI库在开发板自带的OLED屏上显示串口的输入内容。

    aos_task_new("gui", gui_lvgl_task, NULL, 10 * 1024);

    aos_task_new("led", led_task, NULL, 10 * 1024);

    aos_task_new("getchar", ch_input_task, NULL, 10 * 1024);   

 

五、作品源码

/* Copyright (C) 2015-2017 Alibaba Group Holding Limited

 */

 

/*********************

 *      INCLUDES

 *********************/

#define _DEFAULT_SOURCE /* needed for usleep() */

#include <stdio.h>

#include <stdlib.h>

#include <unistd.h>

#include <time.h>

#include <aos/aos.h>

#include "aos/cli.h"

 

#include "app_init.h"

#include "lvgl.h"

#include "lv_label.h"

#include "oled.h"

#include "myled.h"

#include "console_uart.h"

 

/*********************

 *      DEFINES

 *********************/

#define TAG "app"

 

/**********************

 *      TYPEDEFS

 **********************/

 

/**********************

 *  STATIC PROTOTYPES

 **********************/

// GUI

//static void gui_lvgl_task(void *arg);

//

/**********************

 *  STATIC VARIABLES

 **********************/

 

/**********************

 *      MACROS

 **********************/

 

/**********************

 *   GLOBAL FUNCTIONS

 **********************/

#define N 16

volatile uint32_t g_debug   = 0;

volatile uint32_t g_debug_v = 0;

volatile char c;

char myinput[N];

char line1[N]={'\0'};

char line2[N]={'\0'};

char line3[N]={'\0'};

char line4[N]={'\0'};

int current_line=1;

int update =0;

aos_mutex_t input_mutex;

 

static lv_obj_t *p;

static void gui_lvgl_task(void *arg);

static void led_task(void *arg);

static void ch_input_task(void *arg);

 

void get_input(char *str);

#include "csi_core.h"

/**

 * main

 */

int main(void)

{

    board_yoc_init();

    myled_init();

  int ret = -1;

    /* 创建一个mutex */

    ret = aos_mutex_new(&input_mutex);

    if (ret != 0) {

        return 1;

    }

    aos_task_new("gui", gui_lvgl_task, NULL, 10 * 1024);

    aos_task_new("led", led_task, NULL, 10 * 1024);

    aos_task_new("getchar", ch_input_task, NULL, 10 * 1024);    

    return 0;

}

 

static void gui_label_create(void)

{

    p = lv_label_create(lv_scr_act(), NULL);

    lv_label_set_long_mode(p, LV_LABEL_LONG_BREAK);

    lv_label_set_align(p, LV_LABEL_ALIGN_LEFT);

    lv_obj_set_pos(p, 0, 0);

    lv_obj_set_size(p, 128, 64);

    lv_label_set_text(p, "EE world");

 aos_msleep(2000);

//    lv_label_set_long_mode(p, LV_LABEL_LONG_SROLL_CIRC);

}

 

static void gui_lvgl_task(void *arg)

{   

    lv_init();

    /*Initialize for LittlevGL*/

    oled_init();

    /*Select display 1*/

    // demo_create();

    gui_label_create();

//    extern static lv_obj_t *p;

    while (1) {

        /* Periodically call the lv_task handler.

         * It could be done in a timer interrupt or an OS task too.*/

        lv_task_handler();

//        LOGD(TAG, "hello world!");

 

if(1 == aos_mutex_is_valid(&input_mutex)) {

 aos_mutex_lock(&input_mutex, AOS_WAIT_FOREVER);

if(update){

 lv_label_set_text_fmt(p,"%s%s%s%s",line1, line2, line3, line4);

 

}

 update = 0;

 aos_mutex_unlock(&input_mutex);

 }

aos_msleep(10);

        lv_tick_inc(1);

 

    }

}

static void led_task(void *arg){

    while(1){

        myled_test();

 

    }

}

 

static void ch_input_task(void *arg){

    while(1){

for(int k = 0;k<N;k++)

{

myinput[k] ='\0';

}

get_input(myinput);

    printf("%s",myinput);

    aos_msleep(5);

if(1 == aos_mutex_is_valid(&input_mutex)) {

aos_mutex_lock(&input_mutex, AOS_WAIT_FOREVER);

update = 1;

if(current_line<=4){   

switch(current_line++){

case 1:

sprintf(line1,"%s",myinput);

break;

case 2:

sprintf(line2,"%s",myinput);

break;

case 3:

sprintf(line3,"%s",myinput);

break;

case 4:

sprintf(line4,"%s",myinput);

break;

default:    

break;

}

 }

 else {

  for(int k = 0;k<N;k++)

{

line1[k] ='\0';

}

sprintf(line1,"%s",line2);

for(int k = 0;k<N;k++)

{

line2[k] ='\0';

}

sprintf(line2,"%s",line3);

for(int k = 0;k<N;k++)

{

line3[k] ='\0';

}

sprintf(line3,"%s",line4);

for(int k = 0;k<N;k++)

{

line4[k] ='\0';

}

sprintf(line4,"%s",myinput);

}

 aos_mutex_unlock(&input_mutex);

}

  }

}

 

void get_input(char * str){

    for (int i=0,ch ='\0'; i<N ;++i){

if(i == N-1){

            str = '\0';

    break;

        }

if(i == N-2){

            str = '\r';

   continue;

        }

        ch= uart_getc();

        if(ch == '\n'){

            str = '\0';

    break;

        } else {

        str =ch;

}

    }

}

getc();

        if(ch == '\n'){

            str = '\0';

    break;

        } else {

        str =ch;

}

    }

}

六、视频演示(视频简介+链接)

https://occ.t-head.cn/community/post/detail?id=4044567325822296064

 

视频演示链接如下:

七、项目总结(项目文字总结+帖子分享链接汇总)

https://bbs.eeworld.com.cn/thread-1197618-1-1.html

https://bbs.eeworld.com.cn/thread-1197779-1-1.html

https://bbs.eeworld.com.cn/thread-1197900-1-1.html

 

八、其他

    因时间和技术能力问题未实现无线串口的功能,需要进一步学习后实现。RVB2601仅仅当做串口屏使用有点大才小用了。

 

 

 

用于单片机调试的有线和无线串口屏.pdf

915.75 KB, 下载次数: 1

最新回复

厉害厉害!   详情 回复 发表于 2022-5-19 23:15
点赞 关注(1)
 
 

回复
举报

7608

帖子

2

TA的资源

五彩晶圆(高级)

沙发
 

厉害厉害!

个人签名

默认摸鱼,再摸鱼。2022、9、28

 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/9 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表