【先楫HPM6750测评】RT-Thread WiFi联网和SPI驱动

HPM6750零代码WiFi联网实战:图形化配置与自动化代码生成解析 在嵌入式开发与物联网领域,图形化配置与自动化代码生成正成为一种高效的开发范式。其核心原理是通过声明式配置取代传统的命令式编程,开发者无需手动编写底层驱动和协议栈代码,只需在可视化界面中完成硬件接口、网络参数等设置,工具链便能自动生成完整、可靠的项目工程。这种模式的技术价值在于大幅降低开发门槛,提升原型验证和功能演示的效率,尤其适用于快速联网、传感器数据上云等应用场景。本文以高性能MCU HPM6750为例,结合RT-Thread Studio等工具链,深入剖析如何通过图形化配置实现WiFi联网,并探讨自动生 阅读详情

本文由RT-Thread论坛用户@xusiwei1236原创发布:https://club.rt-thread.org/ask/article/84a0398abd993169.html

一、创建RT-Thread项目

开始本篇实验前,需要搭建RT-Thread开发环境,具体可以参考:http://bbs.eeworld.com.cn/thread-1205739-1-1.html

使用RT-Thread Studio创建名为hpm_net_test的项目:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-fbtMpmaR-1655342930192)(https://oss-club.rt-thread.org/uploads/20220614/c96ea3551b1bcfae02d151b9d27310a6.png “create_project.png”)]

二、为项目添加RW007支持

2.1 打开RT-Thread Settings

项目创建成功后,打开项目的RT-Thread Settings界面:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-aCNB87bw-1655342930192)(https://oss-club.rt-thread.org/uploads/20220614/2267da988cba980028bc8ff7da13a878.png.webp “rtt_settings.png”)]

可以看到,默认情况下常见的项目SPI驱动框架已经打开了。

BSP中的SPI1驱动也已经打开了:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-gfkMwlZO-1655342930194)(https://oss-club.rt-thread.org/uploads/20220614/8800cca2237908696cff34151cb2ced9.png “hpm_bsp_spi_config.png”)]

2.2 添加RW007软件包

在RT-Thread Settings界面,点击通过“添加软件包”按钮,会弹出RT-Thread Package Center界面:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-u3sGm05x-1655342930195)(https://oss-club.rt-thread.org/uploads/20220614/8e172c3444f4bb2ca1c576dc22d91e7c.png.webp “rtt_pkg_center.png”)]

在中间的搜索框种输入RW007,回车,可以找到RW007驱动程序软件包:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-CUCPxy5F-1655342930196)(https://oss-club.rt-thread.org/uploads/20220614/dc89d74003e3eabe04a896a0f8cde838.png.webp “rtt_pkg_rw007_found.png”)]

点击界面“添加”按钮,即可将RW007软件包添加到当前项目的包配置中了,此时软件包并没有真正下载下来。点完添加按钮后,界面回到了RT-Thread Settings,此时按Ctrl+S保存,则会开始下载。下载过程中,控制台子窗口中可以看到一些日志输出:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-adC6B8ZQ-1655342930197)(https://oss-club.rt-thread.org/uploads/20220614/5c8e8e4935ad6cf2070da2ebfe5f782b.png “rtt_down_pkg.png”)]

稍等片刻,可以看到控制台中间有“RW007 v2.0.1 is downloaded successfully.”输出。此时rw007软件包已经成功下载到当前项目中了,具体代码位于packages子目录下:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-o1IDANun-1655342930198)(https://oss-club.rt-thread.org/uploads/20220614/fc91ff71fea6ecb7945b71f3d1f41a68.png “rtt_pkg_ready.png”)]

2.3 配置RW007驱动

在RT-Thread Settings界面,中将鼠标移动到RW007组件上,会弹出悬浮菜单:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-MLkjizm8-1655342930198)(https://oss-club.rt-thread.org/uploads/20220614/5a8a07151ef43b122b6f622edd036868.png “rtt_config_rw007.png”)]

点击悬浮菜单中的“配置项”,即可进入RW007软件包的配置界面:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-bxoAly6K-1655342930199)(https://oss-club.rt-thread.org/uploads/20220614/d442c9533bfd758c43dacc479bde8d80.png “rw007_config.png”)]

可以看到,默认有一个RW007 for stm32的配置,就是说RW007默认包含了STM32的驱动。

这里我们需要修改的就是这个example driver port配置项,点击下拉菜单改为不使用示例驱动:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-U4Bi0Y8J-1655342930200)(https://oss-club.rt-thread.org/uploads/20220614/d54d448a28d29815736c89834e6b810d.png “rw007_disable_stm32_driver.png”)]

选中后,记得Ctrl+S保存配置。

2.4 编译、烧录、运行项目

在RT-Thread Studio中Ctrl+B或按“锤子”按钮,即可开始编译项目。编译完成后,可以看到控制台输出了RAM和Flash占用:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-GWTB2NDD-1655342930201)(https://oss-club.rt-thread.org/uploads/20220614/446e35dcda136a4b5bfe71e6bfd7db55.png “rw007_build_finish.png”)]

此时,将开发板连接到PC,并使用串口助手或者其他终端工具,连接到新增的串口上。

再到RT-Thread Studio中,使用“下载”按钮或Ctrl+Alt+D即可进行烧录(或者直接进行调试也可以)。

烧录完成后,可以看到串口终端上有输出:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-qhGHl9kg-1655342930202)(https://oss-club.rt-thread.org/uploads/20220614/3f704011fae1566ff87f2d64e1b8e593.png “rtt_boot_log.png”)]

可以看到,输出了RT-Thread版本信息和RW007模组的序列号以及固件版本信息。这里能够看到RW007模组的固件版本信息,其实HPM6750芯片和RW007模组之间可以已经正常通信了。

三、WiFi测试

接下来,我们进行一些简单的WiFi测试。

添加RW007组件后,默认会打开RT-Thread的WiFi驱动框架,而RT-Thread的WiFi驱动框架中同时带有一个测试命令——wifi(对就是这么直接)。

我们可以在RT-Thread的finsh交互环境中使用help查看当前已有哪些命令:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-380ffktI-1655342930202)(https://oss-club.rt-thread.org/uploads/20220614/093658ccb9b083b5c74f2ab60a2bd36f.png “rtt_help_print.png”)]

可以看到有一个wifi命令。

接下来我们查看wifi命令的使用方式:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-adzKtbCS-1655342930203)(https://oss-club.rt-thread.org/uploads/20220614/9982ecf4dc4cf7621c0272dd04e1ce54.png “rtt_wifi_help.png”)]

3.1 扫描测试

尝试扫描周围的WiFi热点:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-b26ivArd-1655342930204)(https://oss-club.rt-thread.org/uploads/20220614/e5ecb981945f98d06d41a55de76b2aa7.png “rtt_wifi_scan.png”)]

可以看到,成功扫描到了周围的WiFi热点。

3.2 连接测试

尝试连接其中的一个热点:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-d6bMpEV9-1655342930204)(https://oss-club.rt-thread.org/uploads/20220614/147c72a872ae1500a7cdaad50d2aefa2.png “rtt_wifi_join.png”)]

然而,不幸的是,发生异常了。

不过,从这里的几个warning打印信息可以看到,应该是因为tcpip线程栈溢出导致的。

3.3 调大tcpip线程栈大小

接下来,我们通过RT-Thread Settings修改tcpip线程栈的大小。

同样,首先打开RTT Settings界面,鼠标指针放到LwIP组件图标上:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-fqkakRzb-1655342930205)(https://oss-club.rt-thread.org/uploads/20220614/155845daffffc70aab707555709b5e01.png.webp “rtt_lwip_config.png”)]

打开配置项,找到RT_LWIP_TCPTHREAD_STACKSIZE配置项,并将其修改为4096:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-piecsEQ4-1655342930206)(https://oss-club.rt-thread.org/uploads/20220614/5892fe002e5aafdba9b53047a895d1c0.png “rtt_lwip_tcpip_thread_stack_size.png”)]

界面下方可以看到这个LwIP线程栈大小的配置项名称为**RT_LWIP_TCPTHREAD_STACKSIZE。**至于这里为什么要改这个配置项,没有在RT-Thread用过LwIP的同学可能会疑惑。其实,这里可以根据线程名“tcpip”,一路搜索代码,首先可以找到创建名为tcpip线程的代码位置,然后可以找到线程栈大小参数的来源。这里是搜索结果:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-SKxOSlzh-1655342930206)(https://oss-club.rt-thread.org/uploads/20220614/a934d84ed15e2be873beeaf59041179d.png.webp “rtt_grep_tcpip.png”)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-W7Gm4Tv6-1655342930207)(https://oss-club.rt-thread.org/uploads/20220614/3574a8f2312ad6e3a3803fa02a939743.png.webp “rtt_grep_tcpip_thread_name.png”)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-O8hMvFP3-1655342930208)(https://oss-club.rt-thread.org/uploads/20220614/f3e75933e747608f53310eeec607ba2e.png.webp “rtt_grep_tcpip_thread_stack_size.png”)]

PS:因为默认使用的是lwip 2.0.3版本,所以这里只搜索了lwip-2.0.3的代码。

3.4 重新测试

配置修改完成后,Ctrl+S保存,重新编译项目、烧录、运行,这次能够成功连接WiFi热点了:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-pgRuw0ps-1655342930209)(https://oss-club.rt-thread.org/uploads/20220614/a310e5599843c6cd2ac2ed363aefdd7f.png “rtt_wifi_join_ok.png”)]

可以看到,已经成功通过DHCP从热点获取到IP地址了。

四、网络测试

4.1 RT-Thread网络组件

前面提到,添加了RW007软件包后,会开启RT-Thread的WiFi驱动框架;同时,也会开启系统中网络协议相关的组件,主要包括套接字抽象层(SAL)、网络接口层、轻量级TCP/IP堆栈(LwIP),如下图所示。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-O5Eddv98-1655342930209)(https://oss-club.rt-thread.org/uploads/20220614/7364e7fc13fbd4f356378097cbd780a9.png.webp “rtt_network_comps.png”)]

其中,LwIP的默认版本用的是v2.0.3,也可以切换为其他版本(RT-Thread系统中同时提供了LwIP的好几个版本可供选择)。

4.2 RT-Thread网络组件相关的命令

RT-Thread系统网络相关组件打开后,将会向finsh中注册几个命令用于测试,具体包括:ifconfig、ping、netstat、dns等,可以在help的输出中找到:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-s6TgYSiM-1655342930210)(https://oss-club.rt-thread.org/uploads/20220614/060e4dfa10d63745cd801a7adc1d7447.png “rtt_help_out.png”)]

4.3 ping测试

有IP地址了,我们可以用ping命令测试一下能不能访问baidu.com:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-w0w8Twfh-1655342930210)(https://oss-club.rt-thread.org/uploads/20220614/5b3465a279b9dfde830af9e5ad758e02.png “rtt_ping_baidu.png”)]

可以看到,能够成功ping通baidu.com了。

使用baidu.com的域名能够访问,说明DNS整个流程都是OK的,同时网路协议也是没问题的。

五、网络带宽测试

5.1 添加netutils软件包

RT-Thread的netutils组件中提供了iperf命令,可以用于测试网络带宽;

和前面类似的方法,为项目添加netutils组件:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-TKnBPk2d-1655342930211)(https://oss-club.rt-thread.org/uploads/20220614/89b3585551ff72f0384cd717a695d286.png.webp “rtt_add_netutils.png”)]

打开“配置项”后,打开iperf的配置项:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-BIqp0Zok-1655342930212)(https://oss-club.rt-thread.org/uploads/20220614/640ca664bb6900306a74114fe8c2e194.png “rtt_netutils_config_iperf.png”)]

修改配置后,Ctrl+S保存。

重新编译、烧录、运行项目,help的输出可以看到多了iperf命令。

5.2 iperf命令参数

在RT-Thread的finsh中运行iperf,默认输出帮助信息:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-lQH81yRJ-1655342930213)(https://oss-club.rt-thread.org/uploads/20220614/1c3b8488a4fe25945a4e47f2ffbeb8d2.png.webp “rtt_iperf_help.png”)]

可以看到iperf的命令参数使用方法。

需要注意:

  1. RT-Thread的iperf命令实现中,对参数的顺序由要求,如果使用过程中发现参数报错,需要查看源码定位原因;
  2. RT-Thread的iperf不支持持续时间选项,一般是先启动,后通过stop选项停止的方式控制测试时长;

5.3 PC端的iperf

PC端的iperf可以到iperf项目官网下载:https://iperf.fr/iperf-download.php

我使用的mobaxterm,里面自带了iperf命令,所以就不单独下载了:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-iWYrsfRn-1655342930213)(https://oss-club.rt-thread.org/uploads/20220614/1299975f646e63bdbd05d33fffbe7a10.png “moba_iperf_help.png”)]

5.4 进行iperf测试

进行iperf测试之前,需要注意:

  1. 最好用PC创建热点,用无线路由器也行,但是需要确保信号强度足够;
  2. 确保开发板和PC直接的距离不要太远,否则WiFi信号较弱,测试的结果可能会偏小;
  3. 最好在WiFi热点较少的环境下进行测试,否则测出的结果数据也会偏小;

下面进行测试,测试步骤如下:

  1. 在PC上,创建热点,例如名为rtt,密码为12345678
  2. 在PC上,启动iperf服务端:iperf -s -p 5678
  3. 在PC上,使用ipconfig/ifconfig命令查看热点的IP地址,例如我在Win10上创建的热点,IP地址是:192.168.137.1
  4. 在开发板上,连接PC启动热点:wifi join rtt 12345678
  5. 在开发板上,查看IP地址是否已成功分配:ifconfig,另外,可以通过ping命令测试开发板和PC直接IP是否可达
  6. 在开发板上,启动iperf客户端:iperf -c 192.168.137.1 -p 5678
    • 启动后,可以通过ps命令查看正在运行的线程
  7. 一段时间后,在开发板上,停止iperf客户端:iperf --stop
  8. 开发板上iperf停止后,PC端应该可以看到iperf的输出;

开发板上整个过程的输出如下:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-4AQss74w-1655342930214)(https://oss-club.rt-thread.org/uploads/20220614/40b17ba370b148daa62c6112020745c0.png “rtt_iperf_test_output.png”)]

PC端输出:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-M8FG9qm3-1655342930215)(https://oss-club.rt-thread.org/uploads/20220614/804a63de92dacf79505a53264eea93cb.png “iperf_output.png”)]

可以看到带宽为7.45Mbps

5.5 iperf测试小结

实际上,影响WiFi带宽测试结果数据的因素很多。我们这里,其中,起决定性的的主要由以下几个方面:

  1. RW007模组本身支持的最高WiFi传输速率;
  2. RW007模组的SPI接口支持的最高工作频率;
  3. HPM6750 SPI接口最高支持的工作频率;
  4. 热点(PC或路由器)的WiFi最高传输速率;
  5. 各种环境因素,例如开发板和PC直接的距离、环境是否有其他热点干扰等等;

六、业务代码——socket测试

前面的ping测试、iperf测试使用的是系统已有组件或软件包。除此之外,也可以通过socket连接网络。这里以一个简单的使用socket获取baidu首页为例(直接使用web_client软件包也可以实现该功能):

#include <rtthread.h>
#include <stdlib.h>
#include <sys/socket.h>
#include <netdb.h>

#define DEFAULT_HOST "example.com"
#define DEFAULT_PORT 80

#define CONTENT_LENGTH "Content-Length:"
#define HEADER_END_MARK "\\r\\n\\r\\n"

uint32_t get_host_addr(const char *host)
{
    uint32_t dest = 0;
    struct hostent *he;

    he = gethostbyname(host);
    if (he && he->h_addr_list && he->h_addr_list[0]) {
        dest = ((struct in_addr *)(he->h_addr_list[0]))->s_addr;
    }
    return dest;
}

#define close(fd) closesocket(fd)

int fetch(int argc, char* argv[])
{
    char* host = DEFAULT_HOST;
    int port = DEFAULT_PORT;
    int sockfd = -1;
    int retval = 0;
    int recved = 0;
    int content_start = 0;
    int content_length = 0;
    struct sockaddr_in server_addr = {0};
    static char request[256];
    static char response[4096];

    if (argc > 1) host = argv[1];
    if (argc > 2) port = atoi(argv[2]);

    sockfd = socket(AF_INET, SOCK_STREAM, 0);
    if (sockfd < 0) {
        rt_kprintf("create socket failed!\\n");
        return -1;
    }
    rt_kprintf("create socket success!\\n");

    rt_memset(&server_addr, 0, sizeof(server_addr));
    server_addr.sin_family = AF_INET;
    server_addr.sin_port = htons(port);
    server_addr.sin_addr.s_addr = get_host_addr(host);

    // IP转为 “点分十进制” 格式
    inet_ntop(AF_INET, &server_addr.sin_addr, response, sizeof(response));
    rt_kprintf("server IP: %s\\n", response);

    rt_kprintf("connect to server...\\n");
    retval = connect(sockfd, (const struct sockaddr *)&server_addr,
              sizeof(server_addr));
    if (retval < 0) {
        rt_kprintf("connect failed!\\n");
        close(sockfd);
        return -1;
    }

    rt_snprintf(request, sizeof(request),
            "GET / HTTP/1.1\\r\\n"
            "Host: %s\\r\\n"
            "User-Agent: curl/7.81.0\\r\\n"
            "Accept: */*\\r\\n"
            "\\r\\n", host);

    rt_kprintf("send request...\\n");
    retval = send(sockfd, request, rt_strlen(request), 0);
    if (retval < 0) {
        rt_kprintf("send failed!\\n");
        close(sockfd);
        return -1;
    }
    rt_kprintf("%d bytes sent\\n", retval);

    rt_kprintf("recv response...\\n");
    recved = 0;
    while ((retval = recv(sockfd, &response[recved], sizeof(response) - recved, 0)) > 0) {
        if (content_length == 0) {
            char* content_length_pos = rt_strstr(response, CONTENT_LENGTH);
            if (content_length_pos) {
                content_length = atoi(content_length_pos + rt_strlen(CONTENT_LENGTH));
                rt_kprintf("found %s %d!\\n", CONTENT_LENGTH, content_length);
            }
        }
        if (content_start == 0) {
            char* header_end = rt_strstr(response, HEADER_END_MARK);
            if (header_end) {
                content_start = header_end + rt_strlen(HEADER_END_MARK) - response;
                rt_kprintf("content_start: %d\\n", content_start);
            }
        }
        recved += retval;
        rt_kprintf("recved: %d %d %d\\n", recved, content_start, content_length);
        if (content_length && content_start && recved - content_start >= content_length) {
            rt_kprintf("fully recved!\\n");
            break;
        }
    }
    response[recved] = '\\0';

    rt_kprintf("==== Response Header ====:\\n");
    for (int i = 0; i < content_start; i++) {
        rt_kprintf("%c", response[i]);
    }

    rt_kprintf("==== Response Content ====:\\n");
    for (int i = content_start; i < recved; i++) {
        rt_kprintf("%c", response[i]);
    }

    if (retval < 0) {
        rt_kprintf("recv failed!\\n");
        close(sockfd);
        return -1;
    }

    shutdown(sockfd, SHUT_RDWR);
    close(sockfd);
    return 0;
}
MSH_CMD_EXPORT(fetch, "fetch home page of a site");

这是一段使用裸socket实现的简单HTTP客户端,依次进行了请求发送、回复接收和回复解析的过程,测试结果:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Ymd3VoG1-1655342930216)(https://oss-club.rt-thread.org/uploads/20220614/0598af6d8ab40e29ae5fada4ed806eeb.png “fetch_www.baidu.com.png”)]

七、原理简介

以上操作,我们没有任何底层驱动相关代码,就实现了通过HPM6750EVKMINI开发板的RW007 WiFi模组实现联网功能。这是因为我们基于RT-Thread的项目中,从底到上已经有了:

  • HPM6750EVKIMNI BSP中包含了SPI驱动(libraries/drivers/drv_spi.c文件);
    • 默认打开了spi1的编译配置;
  • HPM6750EVKIMNI BSP中包含了网卡初始化代码(board/rw007_port.c文件);
    • 向系统注册了启动时自动执行的wifi_spi_device_init函数;
    • wifi_spi_device_init函数内部会调用rw007软件包中的rt_hw_wifi_init函数;
  • RW007软件包,包含RW007模组的驱动代码;
    • 底层使用SPI驱动实现主控和RW007模组之间的通讯;
    • 上层向RT-Thread系统注册WLAN设备(rt_hw_wifi_init函数内部会调用rt_wlan_dev_register函数);
  • RT-Thread的WiFi(也叫WLAN)驱动框架;
    • 对下连接具体的 WIFI 驱动,控制 WIFI 的连接断开,扫描等操作。
    • 对上承载不同的应用,为应用提供 WIFI 控制,事件,数据导流等操作,为上层提供统一的 WIFI 控制接口。
  • RT-Thread的Socket抽象层(SAL),统一集中不同的socket实现;
  • RT-Thread的TCP/IP协议栈(LwIP),具体的TCP/IP协议实现;

本篇就到这里了,感谢你的阅读,下次再见。

hpm6750evk2开发板(一)菜鸟入门 hpm6750与我们平时常用的stm单片机在开发环境和开发方法上有很大的区别,所以上手还是需要花一点时间的,拿到板子先不要急着上电调试,我们先找资料学习一下了,免得多走冤枉路,以下是我整理的一些学习资源,包括开发板使用手册、芯片SDK、开发工具、视频资料等,建议先把使用手册和学习视频先看了,再取搭建环境测试。最近刚入手一块hpm6750evk2开发板,花了几天时间学习,算是菜鸟入门了,今天分享一下学习过程。看完资料后,把开发工具安装上,下一篇文章我们分享一下调试工程的过程和遇到的问题。 阅读详情

相关推荐

【先楫HPM6750系列】RT-Thread开发环境搭建和Hello World

本篇介绍HPM6750开发板的RT-Thread Studio开发环境搭建,以及在RT-Thread Studio环境下如何创建项目、编译项目、调试项目、烧录二进制文件、使用串口终端等功能。

码工许师傅 3894

HPM6750系列--第一篇 初识HPM6750

一、目的 二、介绍 三、资源

coderma的博客 1万+

上海先楫HPM6750驱动LCD屏上显示内容【支持HPM6750和HPM6450】

上海先楫HPM6750代码工程,支持HPM6750和HPM6450处理器。 资源代码可直接编译、运行。

HPM6750开发笔记《HPM6750最小系统硬件原理图》

HPM6700/6400 系列 MCU 是来自上海先楫半导体科技有限公司的高性能实时 RISC-V 微控制器,为工业自动化 及边缘计算应用提供了极大的算力、高效的控制能力及丰富的多媒体功能。RISC-V 内核支持双精度浮点运算及强大的 DSP 扩 展,HPM6750 旗舰型号双核主频高达 816 MHz。以HPM6750evk为例,其芯片封装为14×14 289BGA P0.8。

vizio.blog.youkuaiyun.com 2203

实战指南:基于ELK与Grafana构建天融信防火墙日志可视化看板

本文详细介绍了如何基于ELK与Grafana构建天融信防火墙日志可视化看板,包括环境准备、日志收集与解析配置、Elasticsearch存储优化、Grafana看板设计等关键步骤。通过实战案例和优化技巧,帮助用户高效处理天融信防火墙日志,实现安全态势的可视化监控与分析。

weixin_34246529的博客 226

学习 考证 帆软 FCP-FineBI V6.0 考试经验

参加这个学习班,认识了新朋友,可能是我职业生涯中的一次重要体验,其实大家想想 IT 和 医生一样都是需要终身学习的。只是医生学习周期更长但是回报率也更高。大家觉的呢?

小 tom的博客 6223

HPM6750系列--第十篇 时钟系统

讲解HPM6750的时钟系统的基本知识点

coderma的博客 2938

新手网工别慌!手把手带你搞定华为OLT开局配置(从登录到业务下发全流程)

本文为新手网络工程师提供华为OLT设备开局配置的详细指南,涵盖从设备登录、基础配置到业务部署的全流程。通过实战案例和常见问题排查,帮助读者快速掌握华为OLT配置技巧,确保业务顺利开通。

weixin_33721344的博客 481

HPM6750系列--第二篇 搭建Ubuntu开发环境

本篇就给大家介绍一下HPM6750 Ubuntu开发环境搭建​​​​​​​、工具链配置、openocd的配置以及GDB调试

coderma的博客 4436

一文搞懂【Linux 搭建 Dread Hunger 服务器】附本体及Docker部署集群方案

看直播发现了五花八门的开服器和版本,一时兴起按官方文档进行了搭建尝试,所以我的版本基于官方Stream2024.01.10更新的版本,也就是停服时的玩法,应该可以根据mod和补丁魔改成更那些开服器一样的版本,本文不做谈论,注重服务器搭建,毕竟8个人不可能在一个局域网里乱象:首先,我看了大量教程视频,一类是开服器的推广,另一类自建的基本采用Windows搭建,我觉得最离谱的是大部分教程都会教你买一台远程Windows虚拟机???

LHmine的博客 3983

保姆级教程:手把手教你用RKISP TURN为RV1106生成和配置IQfile(附AIQ版本匹配避坑指南)

本文提供RV1106 ISP调试的完整指南,详细讲解如何使用RKISP TURN工具生成和配置IQfile,包括环境搭建、参数调试、设备树配置及常见问题解决方案。特别强调AIQ版本匹配的重要性,帮助开发者避免常见陷阱,提升图像信号处理效率。

weixin_42520796的博客 489

HPM6750系列--第三篇 搭建MACOS编译和调试环境

手把手搭建MACOS编译和调试环境

coderma的博客 2514

别再让PyCharm吃光你的C盘!保姆级教程:安全迁移config、plugins和remote sources到D盘

本文提供了一份详细的PyCharm配置与缓存文件迁移指南,帮助开发者将config、plugins和remote sources等占用大量C盘空间的文件安全转移到D盘。通过修改data.properties文件和正确迁移顺序,确保PyCharm功能不受影响,同时释放宝贵的系统盘空间。

weixin_28836989的博客 423

HPM6750系列--第四篇 搭建Visual Studio Code开发调试环境

手把手搭建Visual Studio Code的HPM6750开发调试环境

coderma的博客 4860

【逆向实战】Unity游戏资源提取与解密全攻略:从AssetBundle到libil2cpp.so的破解技巧

本文详细介绍了Unity游戏资源提取与解密的完整流程,涵盖从AssetBundle到libil2cpp.so的破解技巧。通过AssetStudio和Il2CppDumper等工具,读者可以学习如何提取未加密资源、处理加密文件,并掌握动态dump技术。文章还提供了自动化脚本编写和常见问题解决方案,帮助逆向工程爱好者高效完成资源提取任务。

weixin_29012765的博客 1046

SAP UI5 控件剖析系列之 sap.m.DatePicker:单日选择的工程化用法、最佳实践与常见坑

在 SAP UI5 的输入控件族里,是最常被使用的日期选择控件。它把一个可编辑的输入框与一个弹出的日历整合在一起,允许用户用触摸、鼠标或键盘在本地化格式下选择某一天;控件既可以从弹出的日历里点选,也可以直接在输入框里键入日期。官方 Fiori 设计规范对它的定位就是:完成单个日期的选择,不牵涉时间,也不负责跨天的范围选择。

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 342

HPM6750系列--第九篇 GPIO详解(基本操作)

HPM6750 GPIO基本操作

coderma的博客 3749

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

HPM6750系列--第十一篇 Uart讲解(轮询模式)

讲解uart的基本内容,包括功能说明、引脚配置、时钟配置、轮询读写

coderma的博客 2276

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

先楫 HPM6750 环境搭建 跑分

先楫半导体 HPM6750EVK 环境搭建 跑分对比

weifengdq的专栏 3436

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

HPM6750系列--总章

本栏目介绍先楫半导体出品的HPM6750芯片的相关知识

coderma的博客 1405

先楫MCU:HPM6750双核应用中的cache使用总结

使用非官方推荐的双核内存共享设置简化了项目中双核程序开发的问题;验证并对比了核间通信NonCacheable区域与Cacheable区域数据通信的使用方法与处理速度;

weixin_44863470的博客 2174

HMP6750——双核通讯

core0初始化时钟、外设、内存、释放core1在时钟初始化部分,基本外设都挂在在cpu0,cpu1的邮箱挂在cpu1init-pmp 定义nocache区,方便双核进行数据交换释放core1core1初始化内存。

weixin_55171106的博客 1060

【先楫HPM6750系列】RT-Thread SDIO驱动和文件系统

本篇将介绍——如何在HPM6750EVKMINI开发板上使用RT-Thread的SDIO驱动和FATFS文件系统组件实现SD卡上的文件读写。

码工许师傅 1605

HPM6750EVK 硬件通读与例程通跑 1

硬件通读 封装 时钟 复位 电源 调试 例程通跑 1

weifengdq的专栏 2687

车规级MCU芯片

汽车电子

u010783226的专栏 8889

【先楫HPM6750测评】RT-Thread开发环境搭建和Hello World

本篇介绍HPM6750开发板的RT-Thread Studio开发环境搭建,以及在RT-Thread Studio环境下如何创建项目、编译项目、调试项目、烧录二进制文件、使用串口终端等功能。

rtthreadiotos的博客 2425
上一篇: 基于 CherryUSB 调试 dwc2 usb host 笔记
下一篇: 基于RT-Thread+RA6M4的远程开机助手
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值