当前位置: 首页 > news >正文

GD32VW553-IOT 基于 vscode 的 msdk 移植(基于Cmake)

移植说明

  1. 基于官网的MSDK, 将工程先分解出来, 之前的工程是BOOT+APP融合在一起了, 对于APP部分来说, BOOT相关的内容和去除, 这样我们在学习过程中结构会更清晰一点。
  2. 由于目前的MSDK结构比较复杂, 涵盖了很多的模块, 比如cmd、flash、hal、lib、net、os等, 这些模块之间有依赖关系, 需要理清楚这些模块的依赖关系, 然后再进行移植。
  3. 首先参考官方的编译设置, 构建一个初步能跑了CMakLists.txt, 能打印一些简单的版本信息
  4. 考虑到使用这款芯片主要就是用ble和wifi模块,所以直接给出完整功能的Cmake工程,后续需要裁剪直接修改即可
  5. eclipse类型的ide,查找头文件和源文件路径实在太麻烦,搜索又难用的很,最关键的是copilot没法直接aigent了,对于学习来说直接使用对个中细节把握不够清楚,知其然不知其所以然,自己手动移植一遍,也对加深工程中各个模块的相互关系,可以帮助学习
    在这里插入图片描述

工程结构

  1. 宏定义
# C的宏定义
target_compile_definitions(stm32cubemx INTERFACE CFG_RTOSPLATFORM_OS_FREERTOS
)
  1. 头文件路径
# C的头文件
target_include_directories(stm32cubemx INTERFACE# MCU specificplatform/riscv/archplatform/riscv/arch/bootplatform/riscv/arch/libplatform/riscv/arch/llplatform/riscv/arch/compilerplatform/srcplatform/src/regplatform/src/raw_flashplatform/src/qspi_flashplatform/src/dmaplatform/src/timeplatform/src/trngplatform/src/uartplatform/src/spiplatform/src/spi_i2splatform/src/nvdsplatform/src/rfplatform/riscv/gd32vw55xplatform/riscv/NMSIS/Core/Includeplatform/riscv/NMSIS/DSP/Includeplatform/riscv/NMSIS/DSP/Include/dspplatform/GD32VW55x_standard_peripheralplatform/GD32VW55x_standard_peripheral/Include# RTOS specificrtos/rtos_wrapperrtos/FreeRTOS/Source/includertos/FreeRTOS/Source/portable/riscv32rtos/FreeRTOS/config# LWIP specificlwip/iperf3lwip/iperflwip/lwip-2.2.0/src/includelwip/lwip-2.2.0/src/include/compat/posixlwip/lwip-2.2.0/src/include/lwiplwip/lwip-2.2.0/src/include/lwip/appslwip/lwip-2.2.0/portlwip/libcoap/includelwip/libcoap/port# WiFi specificwifi_managerwifi_manager/wpas# FatFS specificFatFS/portFatFS/src# mbedTLS specificmbedtls/mbedtls-3.6.2/includembedtls/mbedtls-3.6.2/librarymbedtls/mbedtls-3.6.2/tests/include/spe# BLE specificble/appble/profileble/profile/datatransble/profile/disble/profile/sampleble/profile/throughputble/profile/basble/profile/ota# util specificutil/include# MAIN APPappapp/mqtt_app# Configconfig# ROM exported headersROM-EXPORT/bootloaderROM-EXPORT/halcommROM-EXPORT/symbol# BLE SDK exported headersblesw/src/export# MAC SW exported headersmacsw/exportmacsw/import
)
  1. 不同模块的源文件组合
# MAIN APP
file(GLOB SRC_APP_0 app/main.c app/cmd_shell.c app/atcmd.c app/iperf.c app/iperf3_main.c app/ping.c app/ota_demo.c app/mqtt_cmd.c lwip/libcoap/port/client-coap.c lwip/libcoap/port/server-coap.c
)# Platform specific
file(GLOB SRC_LIB_0 platform/GD32VW55x_standard_peripheral/Source/*.cplatform/riscv/gd32vw55x/system_gd32vw55x.cplatform/riscv/gd32vw55x/gd32vw55x_it.cplatform/riscv/env/handlers.cplatform/riscv/env/env_init.cplatform/riscv/env/entry.Splatform/riscv/env/start.Splatform/riscv/arch/lib/lib_hook.cplatform/src/uart/ble_uart.cplatform/src/dma/dma.cplatform/src/dsp.cplatform/src/gd32vw55x_platform.cplatform/src/init_rom.cplatform/src/uart/log_uart.cplatform/src/nvds/nvds_flash.cplatform/src/plf_assert.cplatform/src/qspi_flash/qspi_flash_api.cplatform/src/raw_flash/raw_flash_api.cplatform/src/spi_i2s/spi_i2s.cplatform/src/spi/spi.cplatform/src/time/systime.cplatform/src/uart/trace_uart.cplatform/src/trng/trng.cplatform/src/uart/uart.cplatform/src/wakelock.c
)# util specific
file(GLOB SRC_LIB_1 util/src/*.c
)# RTOS specific
file(GLOB SRC_LIB_2 rtos/FreeRTOS/Source/portable/Common/tickless_sleep.crtos/FreeRTOS/Source/croutine.crtos/FreeRTOS/Source/event_groups.crtos/FreeRTOS/Source/list.crtos/FreeRTOS/Source/queue.crtos/FreeRTOS/Source/stream_buffer.crtos/FreeRTOS/Source/tasks.crtos/FreeRTOS/Source/timers.crtos/FreeRTOS/Source/portable/MemMang/heap_4.crtos/FreeRTOS/Source/portable/riscv32/port.crtos/FreeRTOS/Source/portable/riscv32/portasm.Srtos/rtos_wrapper/wrapper_freertos.c
)# BLE specific
file(GLOB SRC_LIB_3ble/profile/bas/ble_bass.cble/profile/datatrans/ble_datatrans_cli.cble/profile/datatrans/ble_datatrans_srv.cble/profile/dis/ble_diss.cble/profile/ota/ble_ota_cli.cble/profile/ota/ble_ota_srv.cble/profile/ble_profile_utils.cble/profile/throughput/ble_throughput_cli.cble/profile/throughput/ble_throughput_srv.cble/profile/sample/ble_sample_cli.cble/profile/sample/ble_sample_srv.c
)# FatFS specific
file(GLOB SRC_LIB_4 FatFS/port/fatfs.cFatFS/src/diskio.cFatFS/src/ff.cFatFS/src/ffsystem.cFatFS/src/ffunicode.c
)# LWIP specific
file(GLOB SRC_LIB_5 lwip/lwip-2.2.0/src/core/altcp_alloc.clwip/lwip-2.2.0/src/core/altcp_tcp.clwip/lwip-2.2.0/src/core/altcp_tcp.clwip/lwip-2.2.0/src/core/dns.clwip/lwip-2.2.0/src/core/def.clwip/lwip-2.2.0/src/core/inet_chksum.clwip/lwip-2.2.0/src/core/init.clwip/lwip-2.2.0/src/core/ip.clwip/lwip-2.2.0/src/core/mem.clwip/lwip-2.2.0/src/core/memp.clwip/lwip-2.2.0/src/core/netif.clwip/lwip-2.2.0/src/core/pbuf.clwip/lwip-2.2.0/src/core/raw.clwip/lwip-2.2.0/src/core/stats.clwip/lwip-2.2.0/src/core/sys.clwip/lwip-2.2.0/src/core/tcp_in.clwip/lwip-2.2.0/src/core/tcp_out.clwip/lwip-2.2.0/src/core/tcp.clwip/lwip-2.2.0/src/core/timeouts.clwip/lwip-2.2.0/src/core/udp.clwip/lwip-2.2.0/src/apps/altcp_tls/altcp_tls_mbedtls_mem.clwip/lwip-2.2.0/src/apps/altcp_tls/altcp_tls_mbedtls.clwip/lwip-2.2.0/src/apps/http/fs.clwip/lwip-2.2.0/src/apps/http/httpd.clwip/lwip-2.2.0/src/apps/lwiperf/lwiperf.clwip/lwip-2.2.0/src/apps/mqtt/mqtt.clwip/lwip-2.2.0/src/apps/mqtt/mqtt5.clwip/lwip-2.2.0/src/api/api_lib.clwip/lwip-2.2.0/src/api/api_msg.clwip/lwip-2.2.0/src/api/err.clwip/lwip-2.2.0/src/api/netbuf.clwip/lwip-2.2.0/src/api/netdb.clwip/lwip-2.2.0/src/api/netifapi.clwip/lwip-2.2.0/src/api/sockets.clwip/lwip-2.2.0/src/api/tcpip.clwip/lwip-2.2.0/src/core/ipv4/autoip.clwip/lwip-2.2.0/src/core/ipv4/dhcp.clwip/lwip-2.2.0/src/core/ipv4/etharp.clwip/lwip-2.2.0/src/core/ipv4/icmp.clwip/lwip-2.2.0/src/core/ipv4/igmp.clwip/lwip-2.2.0/src/core/ipv4/ip4_addr.clwip/lwip-2.2.0/src/core/ipv4/ip4_frag.clwip/lwip-2.2.0/src/core/ipv4/ip4.clwip/lwip-2.2.0/src/core/ipv6/*.clwip/lwip-2.2.0/port/dhcpd.clwip/lwip-2.2.0/port/dnsd.clwip/lwip-2.2.0/port/httpd_post.clwip/lwip-2.2.0/port/sys_arch.clwip/lwip-2.2.0/port/wifi_netif.clwip/lwip-2.2.0/src/netif/ethernet.clwip/lwip-2.2.0/demo/lwip_sockets_demo.c
)# WiFi specific
file(GLOB SRC_LIB_6 wifi_manager/*.c
)# CoAP specific
file(GLOB SRC_LIB_7 lwip/libcoap/src/*.c)
list(FILTER SRC_LIB_7 EXCLUDE REGEX ".*/(coap_io_contiki|coap_io_riot|coap_gnutls|coap_mbedtls|coap_openssl|coap_oscore|coap_proxy|coap_sha1|coap_tinydtls|coap_wolfssl)\\.c$")# ble specific
file(GLOB SRC_LIB_8 ble/app/*.c)
list(FILTER SRC_LIB_8 EXCLUDE REGEX ".*/(atcmd_ble)\\.c$")# mbedTLS specific
file(GLOB SRC_LIB_9mbedtls/demo/*.cmbedtls/mbedtls-3.6.2/library/*.c
)target_sources(stm32cubemx INTERFACE${SRC_APP_0}${SRC_LIB_0}${SRC_LIB_1}${SRC_LIB_2}${SRC_LIB_3}${SRC_LIB_4}${SRC_LIB_5}${SRC_LIB_6}${SRC_LIB_7}${SRC_LIB_8}${SRC_LIB_9}
)
  1. 需要静态链接的库和库所在路径,对应-l和-L参数
# Link directories setup, -L
target_link_directories(stm32cubemx INTERFACElibplatform/riscv/NMSIS/Library/DSP/GCC
)
# Add linked libraries, -l
target_link_libraries(stm32cubemx INTERFACEble# ble_max # ble_minrftest rf wifi wpas m nmsis_dsp_rv32imafcbp iperf3
)

实际的文件路径

  1. 官方是mbl+msdk放在一个工程下面,只做msdk部分的话,有一些是可以去除的,如下图所示,基本都是从官方工程里面直接copy出来的
    在这里插入图片描述

编译下载

  1. 和官方的几无区别,完美移植成功
  2. 后续就可以自己大刀阔斧的增删改查了
  3. 简单尝试了几个基本的命令,都非常成功
    在这里插入图片描述

BLE命令尝试

  1. 在串口助手的终端模式下,输入图示指令,广播之后,通过手机蓝牙即可发现芯片ble,可以直接连接
    在这里插入图片描述
    在这里插入图片描述

github链接

https://github.com/1508912767/gd32vw553_app

http://www.dtcms.com/a/392279.html

相关文章:

  • Filter 过滤器详解与使用指南
  • 养成合成小游戏抖音快手微信小程序看广告流量主开源
  • 在 Ubuntu 系统下安装 Conda
  • ac8257 android 9 SYSTEM_LAST_KMSG
  • ARM 架构与嵌入式系统
  • ARM(14) - LCD(1)清屏和画图形
  • Linux第十九讲:传输层协议UDP
  • 计算机网络学习(四、网络层)
  • 开启科学计算之旅:《MATLAB程序设计》课程导览
  • MATLAB | 数学模型 | 传染病 SIR 模型的参数确定
  • MATLAB基本运算(2)
  • 小红书数据分析面试题及参考答案
  • SpringCloudStream:消息驱动组件
  • ret2text-CTFHub技能树
  • VirtualBox 7 虚拟机的硬盘如何扩大?
  • React新闻发布系统 权限列表开发
  • 23种设计模式之【策略模式】-核心原理与 Java 实践
  • 前端实战从零构建响应式井字棋游戏
  • Java中的equals()与hashCode()
  • 【绕过open_basedir】
  • 如何用户细分
  • 福彩双色球第2025109期篮球号码分析
  • 思考:客户端负载均衡和服务器负载均衡有什么区别?
  • 网络编程day04/05原始套接字
  • Yarn命令与npm命令的区别与联系(npm:Node.js的官方包管理工具;Yarn:Facebook开发的JavaScript包管理工具)
  • 【大语言模型 67】梯度压缩与稀疏通信
  • LeetCode第365题_水壶问题
  • OpenCV:DNN 模块实现图像风格迁移
  • 锤子助手插件功能六十四:禁用视频前置摄像头镜像
  • OpenHarmony NFC Tag驱动深度剖析:从HDF框架到NDEF读写全流程实战