WIFI 模组8286驱动

2024-08-24 14:20
文章标签 驱动 wifi 模组 8286

本文主要是介绍WIFI 模组8286驱动,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

 原理图:

 注:使用的数串口1的引脚,PA1是发送端引脚,PA3是接收端引脚,PA7串口的使能位。


1.0  WIFI模组驱动


驱动初始化函数:

void WifiModuleDrvInit(void)
{WifiGpioInit();WifiUartInit(115200);WifiDmaInit();HwresetWifiModule();
}

宏定义串口地址...

#define USART1_DATA_ADDR		(USART1 + 0x04)					// 串口2的数据寄存器16进制地址值
#define MAX_BUF_SIZE			256
static uint8_t	g_recvDataBuf[MAX_BUF_SIZE];

创建结构体:

typedef struct
{uint32_t uartNo;rcu_periph_enum rcuUart;rcu_periph_enum rcuGpio;uint32_t gpio;uint32_t txPin;uint32_t rxPin;uint8_t irq;uint32_t dmaNo;rcu_periph_enum rcuDma;dma_channel_enum dmaCh;
}UartHwInfo_t;

创建结构体数组:

static UartHwInfo_t g_uartHwInfo = 
{USART1,RCU_USART1,RCU_GPIOA,GPIOA,GPIO_PIN_2,GPIO_PIN_3,USART1_IRQn,DMA0,RCU_DMA0,DMA_CH5
};

GPIO初始化

static void WifiGpioInit(void)
{rcu_periph_clock_enable(RCU_GPIOA);gpio_init(GPIOA, GPIO_MODE_OUT_PP, GPIO_OSPEED_2MHZ, GPIO_PIN_7);rcu_periph_clock_enable(g_uartHwInfo.rcuGpio);gpio_init(g_uartHwInfo.gpio, GPIO_MODE_AF_PP, GPIO_OSPEED_50MHZ, g_uartHwInfo.txPin);gpio_init(g_uartHwInfo.gpio, GPIO_MODE_AF_PP, GPIO_OSPEED_50MHZ, g_uartHwInfo.txPin);
}

串口初始化:

static void WifiUartInit(uint32_t baudRate)
{rcu_periph_clock_enable(g_uartHwInfo.rcuUart);usart_deinit(g_uartHwInfo.uartNo);usart_baudrate_set(g_uartHwInfo.uartNo, baudRate);usart_transmit_config(g_uartHwInfo.uartNo, USART_TRANSMIT_ENABLE);usart_receive_config(g_uartHwInfo.uartNo, USART_RECEIVE_ENABLE);usart_interrupt_enable(g_uartHwInfo.uartNo, USART_INT_IDLE);// 使能串口中断,嵌套中断向量控制器nvic_irq_enable(g_uartHwInfo.irq, 0, 0);// 在USART_CTL0寄存器中设置UEN位,使能UARTusart_enable(g_uartHwInfo.uartNo);	
}

DMA初始化:

static void WifiDmaInit(void)
{// 使能DMA时钟rcu_periph_clock_enable(g_uartHwInfo.rcuDma);// 复位DMA通道dma_deinit(g_uartHwInfo.dmaNo, g_uartHwInfo.dmaCh);// DMA结构体初始化dma_parameter_struct dmaStructure;// 配置数据传输方向dmaStructure.direction = DMA_PERIPHERAL_TO_MEMORY;// 配置数据的源地址dmaStructure.periph_addr = USART1_DATA_ADDR;// 配置源地址数固定地址还是增长,配置为固定地址dmaStructure.periph_inc = DMA_PERIPH_INCREASE_DISABLE;// 配置数据传输位宽dmaStructure.periph_width = DMA_PERIPHERAL_WIDTH_8BIT;// 配置数据目的地址dmaStructure.memory_addr = (uint32_t)g_recvDataBuf;// 配置目的地址是固定的还是增长的dmaStructure.memory_inc = DMA_MEMORY_INCREASE_ENABLE;// 配置目的数据传输位宽dmaStructure.memory_width = DMA_MEMORY_WIDTH_8BIT;// 配置数据传输最大次数dmaStructure.number = MAX_BUF_SIZE;// 配置DMA通道优先级dmaStructure.priority = DMA_PRIORITY_HIGH;// 初始化DMAdma_init(g_uartHwInfo.dmaNo, g_uartHwInfo.dmaCh, &dmaStructure);// 使能串口接收数据使用DMAusart_dma_receive_config(g_uartHwInfo.uartNo, USART_RECEIVE_DMA_ENABLE);// 使能DMA通道dma_channel_enable(g_uartHwInfo.dmaNo, g_uartHwInfo.dmaCh);}

wifi驱动复位

void HwresetWifiModule(void)
{DBG_log("wifi module,now hwreset it!\n");gpio_bit_reset(GPIOA, GPIO_PIN_7);DelayNms(100);gpio_bit_set(GPIOA, GPIO_PIN_7);
}

串口中断服务函数:

void USART1_IRQHandle(void)
{if (usart_interrupt_flag_get(g_uartHwInfo.uartNo, USART_INT_FLAG_IDLE) != RESET){// 获取中断标志位后清除中断标志位usart_interrupt_flag_clear(g_uartHwInfo.uartNo, USART_INT_FLAG_IDLE);usart_data_receive(g_uartHwInfo.uartNo);DBG_log("uart recv str:%s\n", g_recvDataBuf);dma_channel_disable(g_uartHwInfo.dmaNo, g_uartHwInfo.dmaCh);dma_transfer_number_config(g_uartHwInfo.dmaNo, g_uartHwInfo.dmaCh, MAX_BUF_SIZE);dma_channel_enable(g_uartHwInfo.dmaNo, g_uartHwInfo.dmaCh);}
}

获取接受和发送字符:

char *RecvWifiModuleStr(void)
{return (char*)g_recvDataBuf;
}void ClearRecvWifiStr(void)
{memset(g_recvDataBuf, 0, MAX_BUF_SIZE);
}void SendWifiModuleStr(const char *sendStr)
{DBG_log("uart send str:%d\n",sendStr);while(*sendStr != '\0'){usart_data_transmit(g_uartHwInfo.uartNo, *sendStr);while(RESET == usart_flag_get(g_uartHwInfo.uartNo, USART_FLAG_TBE));sendStr++;}
}

2.0 头文件

#ifndef _WIFI_DRV_H_
#define _WIFI_DRV_H_
#include <stdint.h>void HwresetWifiModule(void);
void WifiModuleDrvInit(void);
void USART1_IRQHandle(void);
char *RecvWifiModuleStr(void);
void ClearRecvWifiStr(void);
void SendWifiModuleStr(const char *sendStr);#endif

这篇关于WIFI 模组8286驱动的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1102724

相关文章

Linux_kernel驱动开发11

一、改回nfs方式挂载根文件系统         在产品将要上线之前,需要制作不同类型格式的根文件系统         在产品研发阶段,我们还是需要使用nfs的方式挂载根文件系统         优点:可以直接在上位机中修改文件系统内容,延长EMMC的寿命         【1】重启上位机nfs服务         sudo service nfs-kernel-server resta

企业安全之WiFi篇

很多的公司都没有安全团队,只有运维来负责整个公司的安全,从而安全问题也大打折扣。我最近一直在给各个公司做安全检测,就把自己的心得写下来,有什么不足之处还望补充。 0×01  无线安全 很多的公司都有不怎么注重公司的无线电安全,有钱的公司买设备,没钱的公司搞人力。但是人的技术在好,没有设备的辅助,人力在牛逼也没有个卵用。一个好的路由器、交换机、IDS就像你装备了 无尽、狂徒、杀人书一

[环境配置]ubuntu20.04安装后wifi有图标但是搜不到热点解决方法

最近刚入手一台主机,暗影精灵8plus电竞主机,安装ubuntu后wifi怎么都搜不到热点,前后重装系统6次才算解决问题。这个心酸历程只有搞技术人才明白。下面介绍我解决过程。 首先主机到手后是个windows10系统,我用无线网连接了一下,可以正常上网,说明主机有无限网卡且正常。然后我就直接开始安装Ubuntu20.04了,安装成功后发现wifi有图标但是搜不到热点,我想是不是无线网卡驱动有没有

驱动(RK3588S)第七课时:单节点设备树

目录 需求一、设备树的概念1、设备树的后缀名:2、设备树的语法格式3、设备树的属性(重要)4、设备树格式举例 二、设备树所用函数1、如何在内核层种获取设备树节点:2、从设备树上获取 gpio 口的属性3、获取节点上的属性只针对于字符串属性的4、函数读取 np 结点中的 propname 属性的值,并将读取到的 u32 类型的值保存在 out_value 指向的内存中,函数的返回值表示读取到的

驱动安装注册表指令

HKCR: HKEY_CLASSES_ROOT HKCU: HKEY_CURRENT_USER HKLM: HKEY_LOCAL_MACHINE HKU: HEKY_USER HER: 相对根键

UMDF驱动安装

VS2013 + WDF8.1,UMDF驱动选择User Mode Driver,不要选User Mode Driver 2.0,否则Win7安装有问题,如图 另外,在驱动安装时不要忘记WUDFUpdate_<主版本号><次版本号>.dll文件,具体文件名在INF中查找。此文件可在WDF的安装目录中找到。注意:在WDF的安装目录中会有3个WUDFUpdate_xxx.dll文件,x86,x6

4G模块、WIFI模块、NBIOT模块通过AT指令连接华为云物联网服务器(MQTT协议)

MQTT协议概述 MQTT(Message Queuing Telemetry Transport)是一种轻量级的消息传输协议,它被设计用来提供一对多的消息分发和应用之间的通讯,尤其适用于远程位置的设备和高延迟或低带宽的网络。MQTT协议基于客户端-服务器架构,客户端可以订阅任意数量的主题,并可以发布消息到这些主题。服务器(通常称为MQTT Broker)则负责接受来自客户端的连接请求,并转发消

摄像头模组介绍和技术指标

1 手机摄像头概述 1.1 手机摄像头概述  手机的数码相机功能指的是手机是否可以通过内置或是外接的数码相机进行拍摄静态图片或短片拍摄,作为手机的一项新的附加功能,手机的数码相机功能得到了迅速的发展。 手机摄像头分为内置与外置,内置摄像头是指摄像头在手机内部,更方便。外置手机通过数据线或者手机下部接口与数码相机相连,来完成数码相机的一切拍摄功能。 外置数码相机的优点在于可以减轻手机的重

电脑驱动分类

电脑驱动程序(驱动程序)是操作系统与硬件设备之间的桥梁,用于使操作系统能够识别并与硬件设备进行通信。以下是常见的驱动分类: 1. 设备驱动程序 显示驱动程序:控制显卡和显示器的显示功能,负责图形渲染和屏幕显示。 示例:NVIDIA、AMD 显示驱动程序。打印机驱动程序:允许操作系统与打印机通信,控制打印任务。 示例:HP、Canon 打印机驱动程序。声卡驱动程序:管理音频输入和输出,与声卡硬件

龙芯小本debian无线(wifi)连接设置

本人有一台龙芯8089b小本,已被我重装了debian系统。由于学习nodeJs,所以想用它当node服务器; 正准备下载node等时发现命令模式下不能自动连接无线,于是网上找来一篇debian连接wifi的文章, 来源参考http://blog.163.com/wangpeng922@126/blog/static/64133083201211131100539/ 查看网卡信息:#