发帖
1 0 0

[BW20]二次开发学习5 STA模式WIFI连接

夜雨喧嚣
高级会员

14

主题

10

回帖

627

积分

高级会员

积分
627
BW系列 10 1 昨天 21:41
[i=s] 本帖最后由 夜雨喧嚣 于 2025-5-25 22:08 编辑 [/i]

我这边还有几个问题,如果有知道的大佬希望可以解答一下

1、如何得知WIFI已经初始化完成?
我这边测试WIFI没有初始化完成的情况下调用wifi相关API会导致代码卡死
我目前的解决方式是在wifi初始化任务最下方增加了一个标志位,通过读取这个标志位判断是否初始化完成
实际测试是可行的,但是正常应该会有获取是否初始化完成的API的,但是我好像没找到
2、为何杀死wifi_connect所在的任务会导致wifi工作异常,而AP的不会?
我这边测试wifi_connect所在的任务我哪怕是最下面放个死循环也是能正常ping通的
但是如果我这边不加死循环,基本上过一下子之后就会ping不通
3、感觉还有几个问题来着的,但是我忘记了,wifi是三四天前调的了,晚点我想起来再补充吧

1、驱动函数熟悉

驱动函数位置

ameba-rtos-release-v1.1\component\wifi\api\wifi_api.h
ameba-rtos-release-v1.1\component\wifi\whc\whc_host_rtos\whc_host_api_basic.c

具体内容可以自行下载SDK查看

1.1、连接wifi

.h文件中第65行起

.c文件中第62行起

s32 wifi_connect(struct rtw_network_info *connect_param, u8 block)

无需做其他初始化,因为在main函数中已经进行了初始化

image.png

2、userWiFi.c,.h创建

.c代码如下


#include "userWiFi.h"
static u8 wifi_password[10] = "12345678";
static struct rtw_network_info STA_cfg = {0};

void userWiFiInit(void * pvParameters)
{
    (void)pvParameters;
    int ret = 0;
    //rtos_time_delay_ms(5000); //若运行后出现死机的情况,请取消该注释优先等待wifi初始化完成
    memcpy(&STA_cfg.ssid.val,"12345678",8);  //wifi SSID,也就是wifi名
    STA_cfg.ssid.len = 8;
    STA_cfg.password = wifi_password;  //wifi密码
    STA_cfg.password_len = 8;
    STA_cfg.by_reconn = 0;//自动重连 1, 不自动重连0
    while(1)
    {
        ret = wifi_connect(&STA_cfg,1);  //阻塞连接
        if(0 == ret)
        {
            break;
        }
        else
        {
            RTK_LOGS(NOTAG, RTK_LOG_ERROR, "STA NO:%d", -ret);
        }
    }
  
    while(1)  //不清楚为什么,如果我这里杀掉了任务就会导致网络连接异常,会ping不通
    {
        rtos_time_delay_ms(500);
    }
    rtos_task_delete(NULL);
}

.h代码如下


#ifndef _USERWIFI_H_
#define _USERWIFI_H_

#include "wifi_api.h"

void userWiFiInit(void * pvParameters);
#endif

3、主函数实现

3.1、初始化任务

image.png

打开热点,将连接参数设置为热点参数,烧录上电运行后热点连接成功,并且ping设备正常返回数据,2.4G与5G均可正常连接。

──── 0人觉得很赞 ────

使用道具 举报

期待后续
您需要登录后才可以回帖 立即登录
高级模式
返回
统计信息
  • 会员数: 28811 个
  • 话题数: 41182 篇