xieyang__ 发表于 2020-5-4 11:02:33

在stm32F746-Disc板子上测试了CMSIS-WIFI dirver


一、使用体验:
    简单配置就可使用,很方便。再也不用自己写AT指令部分的,而且都是是封装好的API.下边附上一个简单的测试例程。代码极其不规范,请勿作为模板。

二、值得看的源码部分:
注意tcp server的IP和端口配置。测试前要先在主机上起一个tcpserver,然后在板子上配置对应的地址和端口

extern ARM_DRIVER_WIFI Driver_WiFi0;
static ARM_DRIVER_WIFI *wifi = &Driver_WiFi0;

ARM_WIFI_CONFIG_t wifi_config = {0};
ARM_WIFI_NET_INFO_t net_info;




void initialize_wifi (void) {
char info;

wifi = &Driver_WiFi0;

// Initialize and Power-on WiFi Module
if(wifi->Initialize (NULL) != ARM_DRIVER_OK )
        {
                printf("Initialize err\r\n");
                while(1);
        }
if(wifi->PowerControl (ARM_POWER_FULL) !=ARM_DRIVER_OK )
        {
                printf("powerControl err\r\n");
                while(1);
        }

// Retrieve module information
wifi->GetModuleInfo(info, sizeof(info));       
}

void setOption_wifi(void)
{
        uint8_t ip;

        ip = 192U;
        ip = 168U;
        ip = 0U;
        ip = 1U;
       
        // Set IP static address of the Station
        wifi->SetOption (0U, ARM_WIFI_IP, &ip, sizeof(ip));

}

void active_wifi(void)
{
        int32_t status;
        ARM_WIFI_CONFIG_t wifi_config;

        wifi_config.ssid = "HiWiFi_59DA5A";
        wifi_config.pass = "xieyanghi";
        wifi_config.security = ARM_WIFI_SECURITY_WPA2;
        wifi_config.ch = 11U;
        wifi_config.wps_method = ARM_WIFI_WPS_METHOD_NONE;
       
        // Connect to wireless network
        status = wifi->Activate (0U, &wifi_config);
        if(status != ARM_DRIVER_OK) {
                while(1)
                {
               
                }
                // error handling
        }
}

void ping_host (void) {
uint8_t ip = { 192U, 168U, 1U, 1U };
int32_t res;

wifi = &Driver_WiFi0;
res = wifi->Ping ((uint8_t *)ip, sizeof(ip));
if (res != ARM_DRIVER_OK) {
    // Host responded
                while(1)
                {
               
                }
}
}

static const char message[] = { "The quick brown fox jumps over the lazy dog." };

void Echo_Client_Thread (void *arg) {
uint8_t ip = { 192U, 168U, 1U, 53U };//这里根据主机的IP来配置
int32_t sock, res;
char dbuf;

while (1) {
    wifi = &Driver_WiFi0;
    sock = wifi->SocketCreate (ARM_SOCKET_AF_INET, ARM_SOCKET_SOCK_STREAM, ARM_SOCKET_IPPROTO_TCP);

    res = wifi->SocketConnect (sock, (uint8_t *)ip, sizeof(ip), 6000U);//主机上tcp server的服务端口
    if (res == 0) {
      wifi->SocketSend (sock, message, sizeof(message));
      res = wifi->SocketRecv (sock, dbuf, sizeof(dbuf));
      if (res < 0) {
      break;               // Error occured
      }
      if (res > 0) {
      if (memcmp (dbuf, message, res) != 0) {
          // error handling, message is not the same as sent
      }
      }   
    }
    wifi->SocketClose (sock);
    osDelay (1000U);
}
}

/*----------------------------------------------------------------------------
* Application main thread
*---------------------------------------------------------------------------*/
__NO_RETURN static void app_main (void *argument) {
(void)argument;
// ...
       
        initialize_wifi();
        printf("initialize_wifi complete\r\n");
       
       
        active_wifi();
        printf("active_wifi complete\r\n");
       
        //等待连接
        while(!wifi->IsConnected())
        {
                //循环等待
        }
        printf("Connected complete\r\n");

        ping_host();
        printf("ping_host complete\r\n");
       
        Echo_Client_Thread(NULL);

        // Disconnect from wireless network
        wifi->Deactivate (0U);

       
       
for (;;) {}
}
配置部分:
RTE配置:
用到的组件配置






device配置:




两个配置文件
UART配置和WIFI使用的串口根据自己实际情况作配置,这里仅作示范。




基本上就以上这些



yklstudent 发表于 2020-5-4 19:52:01

mark,感谢楼主分享

eric2013 发表于 2020-5-5 01:01:48

非常感谢楼主分享

登云钓月 发表于 2020-5-8 23:57:58

请教一下楼主 开启了network-》interface-》wifi后,会出现异常EvrNetWiFi_SetBypassModeFailed。单独测试cmsis-driver是可以连接上路由器的。哪里配置错了呢。

登云钓月 发表于 2020-5-9 00:20:51

大概知道原因了 8266不支持所谓的旁路模式

eric2013 发表于 2020-5-9 13:19:33

登云钓月 发表于 2020-5-9 00:20
大概知道原因了 8266不支持所谓的旁路模式

你这个结论很有价值,正打算测试下8266

dghwjh 发表于 2020-6-26 11:56:13

我用这个CMSIS driver wifi   进行server 没有成功啊! 网络调试助手作为客户端搞不定啊!能否提供一下示例代码

unckway 发表于 2023-11-15 11:25:20

有没有使用SPI的

eric2013 发表于 2023-11-15 11:52:33

unckway 发表于 2023-11-15 11:25
有没有使用SPI的
这个是SPI的


页: [1]
查看完整版本: 在stm32F746-Disc板子上测试了CMSIS-WIFI dirver