GD32VW553-IOT 基于 vscode 的 msdk 移植(基于Cmake)
移植说明
- 基于官网的MSDK, 将工程先分解出来, 之前的工程是BOOT+APP融合在一起了, 对于APP部分来说, BOOT相关的内容和去除, 这样我们在学习过程中结构会更清晰一点。
- 由于目前的MSDK结构比较复杂, 涵盖了很多的模块, 比如cmd、flash、hal、lib、net、os等, 这些模块之间有依赖关系, 需要理清楚这些模块的依赖关系, 然后再进行移植。
- 首先参考官方的编译设置, 构建一个初步能跑了CMakLists.txt, 能打印一些简单的版本信息
- 考虑到使用这款芯片主要就是用ble和wifi模块,所以直接给出完整功能的Cmake工程,后续需要裁剪直接修改即可
- eclipse类型的ide,查找头文件和源文件路径实在太麻烦,搜索又难用的很,最关键的是copilot没法直接aigent了,对于学习来说直接使用对个中细节把握不够清楚,知其然不知其所以然,自己手动移植一遍,也对加深工程中各个模块的相互关系,可以帮助学习
工程结构
- 宏定义
# C的宏定义
target_compile_definitions(stm32cubemx INTERFACE CFG_RTOSPLATFORM_OS_FREERTOS
)
- 头文件路径
# 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
)
- 不同模块的源文件组合
# 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}
)
- 需要静态链接的库和库所在路径,对应-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
)
实际的文件路径
- 官方是mbl+msdk放在一个工程下面,只做msdk部分的话,有一些是可以去除的,如下图所示,基本都是从官方工程里面直接copy出来的
编译下载
- 和官方的几无区别,完美移植成功
- 后续就可以自己大刀阔斧的增删改查了
- 简单尝试了几个基本的命令,都非常成功
BLE命令尝试
- 在串口助手的终端模式下,输入图示指令,广播之后,通过手机蓝牙即可发现芯片ble,可以直接连接
github链接
https://github.com/1508912767/gd32vw553_app