对于软件下载和烧录的流程可以参考我发的视频,这里说一下一些配置
1.首先要导入下载的三个文件中的GD32VW55x_RELEASE_V1.0.3f->MSDK->examples->wifi->https_client历程代码

2.选择这个文件夹后,点击finish,可以看到左边导入的工程文件,点开文件夹,再点开main文件夹,点击https_client_main.c,ctrl+A选择全部代码,ctrl+v粘贴下列的代码

3.之后修改代码里的参数WiFi名、WiFi密码、接收的IP地址、IP端口号,记得可以参考视频的内容

4.然后就是代码的编译烧录了
日志如图所示

手机端收发如图所示

代码如下,直接覆盖掉https_client_main.c的内容即可:
#include <stdint.h>
#include <stdio.h>
#include <string.h>
#include "app_cfg.h"
#include "gd32vw55x_platform.h"
#include "wifi_management.h"
#include "wifi_init.h"
#include "FreeRTOS.h"
#include "task.h"
#include "gd32vw55x_gpio.h"
#include "gd32vw55x_rcu.h"
#include "mbedtls/net_sockets.h"
// ======================== 核心配置==============================
#define PHONE_HOTSPOT_SSID "TTTT"//自己的WiFi名称
#define PHONE_HOTSPOT_PASSWORD "12345"//自己的WiFi密码
#define PHONE_TCP_IP "192.168.228.68"//手机端软件设置的IP地址
#define PHONE_TCP_PORT "8080"//手机端软件设置的IP端口号
#define SEND_DATA "Hello Phone! GD32VW553 Data: temp=25.5, hum=60.1\r\n"//发送的数据
#define RECV_BUF_SIZE 256
#define DELAY_DISCONNECT_MS 5000 // 收到数据后延迟5秒断开
// 全局变量
volatile uint8_t g_wifi_connected = 0;
volatile uint8_t g_recv_phone_data = 0;
// ======================== LED硬件初始化 ========================
static void pb2_led_init(void)
{
rcu_periph_clock_enable(RCU_GPIOB);
gpio_mode_set(GPIOB, GPIO_MODE_OUTPUT, GPIO_PUPD_NONE, GPIO_PIN_2);
gpio_output_options_set(GPIOB, GPIO_OTYPE_PP, GPIO_OSPEED_MAX, GPIO_PIN_2);
gpio_bit_reset(GPIOB, GPIO_PIN_2);
}
// ======================== LED闪烁任务(连接成功持续闪烁,断开后熄灭)=======================
static void pb2_led_blink_task(void *param)
{
while(1)
{
if(g_wifi_connected == 1)
{
gpio_bit_toggle(GPIOB, GPIO_PIN_2);
vTaskDelay(pdMS_TO_TICKS(500));
}
else
{
gpio_bit_reset(GPIOB, GPIO_PIN_2);
vTaskDelay(pdMS_TO_TICKS(100));
}
}
}
// ======================== TCP收发核心函数(发数据→等手机数据→收到后标记)=======================
static int tcp_send_and_recv(void)
{
int ret, len;
mbedtls_net_context server_fd;
unsigned char send_buf[512];
unsigned char recv_buf[RECV_BUF_SIZE];
// 1. 初始化网络上下文
mbedtls_net_init(&server_fd);
printf("Connect to phone TCP server %s:%s...\r\n", PHONE_TCP_IP, PHONE_TCP_PORT);
// 2. 连接手机TCP服务器
ret = mbedtls_net_connect(&server_fd, PHONE_TCP_IP, PHONE_TCP_PORT, MBEDTLS_NET_PROTO_TCP);
if(ret != 0)
{
printf("TCP connect failed! Error code: %d\r\n", ret);
mbedtls_net_free(&server_fd);
return -1;
}
printf("TCP connect to phone success!\r\n");
// 3. 主动发送数据到手机
len = strlen(SEND_DATA);
memcpy(send_buf, SEND_DATA, len);
printf("Send data to phone: %s\r\n", send_buf);
ret = mbedtls_net_send(&server_fd, send_buf, len);
if(ret <= 0)
{
printf("Data send failed! Error code: %d\r\n", ret);
mbedtls_net_free(&server_fd);
return -2;
}
printf("Data send success! Total bytes: %d\r\n", ret);
// 4. 阻塞循环等待手机数据(核心:收到任意数据才标记)
printf("Waiting for data from phone...\r\n");
while(1)
{
memset(recv_buf, 0, RECV_BUF_SIZE);
ret = mbedtls_net_recv(&server_fd, recv_buf, RECV_BUF_SIZE - 1);
if(ret > 0)
{
// 收到手机数据,打印并标记
printf("Received data from phone: %s\r\n", recv_buf);
printf("Received bytes: %d\r\n", ret);
g_recv_phone_data = 1;
break;
}
else if(ret == 0)
{
// 手机主动断开TCP
printf("Phone TCP disconnected actively!\r\n");
break;
}
else
{
// 接收暂未就绪,短延时重试,不占用高CPU
vTaskDelay(pdMS_TO_TICKS(100));
}
}
// 5. 释放TCP网络资源
mbedtls_net_free(&server_fd);
printf("TCP connection closed\r\n");
return 0;
}
// ======================== WiFi连接+业务逻辑主任务(核心流程实现)=======================
static void wifi_connect_and_send_task(void *param)
{
int status = 0;
struct mac_scan_result candidate;
char *ssid = PHONE_HOTSPOT_SSID;
char *password = PHONE_HOTSPOT_PASSWORD;
if (ssid == NULL) {
printf("SSID can not be NULL!\r\n");
goto exit;
}
// 步骤1:扫描手机热点
printf("Scan phone hotspot %s...\r\n", ssid);
status = wifi_management_scan(1, ssid);
if (status != 0) {
printf("Hotspot scan failed!\r\n");
goto exit;
}
// 步骤2:查找目标热点
sys_memset(&candidate, 0, sizeof(struct mac_scan_result));
status = wifi_netlink_candidate_ap_find(WIFI_VIF_INDEX_DEFAULT, NULL, ssid, &candidate);
if (status != 0) {
printf("Target hotspot %s not found!\r\n", ssid);
goto exit;
}
// 步骤3:连接手机热点,标记连接状态(LED开始闪烁)
printf("Connect to phone hotspot %s...\r\n", ssid);
if (wifi_management_connect(ssid, password, 1) != 0) {
printf("Hotspot connect failed! Check password\r\n");
goto exit;
}
printf("Phone hotspot connect success!\r\n");
g_wifi_connected = 1;
// 步骤4:执行TCP收发(发数据→等待手机数据)
tcp_send_and_recv();
// 步骤5:仅当收到手机数据时,延迟5秒再断开WiFi
if(g_recv_phone_data == 1)
{
printf("Received data from phone, delay %dms to disconnect Wi-Fi...\r\n", DELAY_DISCONNECT_MS);
vTaskDelay(pdMS_TO_TICKS(DELAY_DISCONNECT_MS)); // 核心延迟5秒逻辑
printf("Start disconnect Wi-Fi...\r\n");
wifi_management_disconnect();
g_wifi_connected = 0;
printf("Phone hotspot disconnected successfully!\r\n");
}
else
{
// 未收到手机数据,保持WiFi连接
printf("No data received from phone, keep Wi-Fi connected...\r\n");
}
exit:
printf("Wi-Fi main task finished!\r\n");
sys_task_delete(NULL);
}
// ======================== 主函数(初始化+创建任务+启动RTOS)=======================
int main(void)
{
// 系统底层初始化
platform_init();
// LED硬件初始化
pb2_led_init();
// WiFi初始化
if (wifi_init()) {
printf("Wi-Fi init failed!\r\n");
}
printf("System init success!\r\n");
// 创建LED闪烁任务
sys_task_create_dynamic((const uint8_t *)"led_blink",
1024,
OS_TASK_PRIORITY(1),
pb2_led_blink_task,
NULL);
// 创建WiFi+TCP主任务
sys_task_create_dynamic((const uint8_t *)"wifi_tcp_main",
4096,
OS_TASK_PRIORITY(0),
wifi_connect_and_send_task,
NULL);
// 启动RTOS内核,开始任务调度
sys_os_start();
// 死循环,不会执行到
for ( ; ; );
}