在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使用的串口根据自己实际情况作配置,这里仅作示范。
基本上就以上这些
mark,感谢楼主分享 非常感谢楼主分享 请教一下楼主 开启了network-》interface-》wifi后,会出现异常EvrNetWiFi_SetBypassModeFailed。单独测试cmsis-driver是可以连接上路由器的。哪里配置错了呢。 大概知道原因了 8266不支持所谓的旁路模式 登云钓月 发表于 2020-5-9 00:20
大概知道原因了 8266不支持所谓的旁路模式
你这个结论很有价值,正打算测试下8266 我用这个CMSIS driver wifi 进行server 没有成功啊! 网络调试助手作为客户端搞不定啊!能否提供一下示例代码 有没有使用SPI的 unckway 发表于 2023-11-15 11:25
有没有使用SPI的
这个是SPI的
页:
[1]