GD32F103RCT6/GD32F303RCT6-杂项-BW16(WIFI/蓝牙一体)模块使用

       文章基于兆易创新GD32 MCU所提供的2.2.4版本库函数开发

 

       以GD32F103RCT6为例,蓝牙模块使用安信可BW16

        向上代码兼容GD32F303RCT6中使用

       后续项目主要在下面该专栏中发布:

https://blog.csdn.net/qq_62316532/category_12608431.html?spm=1001.2014.3001.5482

       感兴趣的点个关注收藏一下吧!

 

       电机驱动开发可以跳转:

手把手教你嵌入式国产化-实战项目-无刷电机驱动(1)

 

       BMS电源系统开发可以跳转:暂未放链接

 

目录

 

介绍

       BW16是基于 RTL8720DN开发的双频Wi-Fi+蓝牙SoC模组。BW16支持双频(2.4GHz 或 5GHz)WLAN和低功耗蓝牙5.0;它集成了ARM V8(兼容 Cortex-M4F)高性能 MCU、ARM V8M(兼容 Cortex-M0)低功耗 MCU、WLAN(802.11 a / b / g / n)、MAC,蓝牙基带和 RF 基带,并提供了一组可配置的 GPIO 口,用于不同外围设备的控制。BW16 同时集成了内部存储器,支持简单的应用程序开发,可实现完整的 Wi-Fi 和 BLE 5.0 协议功能。

特点

  • 支持802.11a/b/g/n 1×1,2.4GHz or 5GHz

  • 支持HT20/HT40模式

  • 支持低功耗信标监听模式,低功耗接收模式,低功耗挂起模式

  • 内置AES / DES / SHA硬件引擎

  • 支持TrustZone-M,支持安全启动

  • 支持SWD调试端口访问保护和禁止模式

  • 支持BLE 5.0

  • 蓝牙支持高功率模式(7dBm,与Wi-Fi共享同一PA)

  • Wi-Fi和BLE共用同一天线

  • 支持 STA/AP/STA+AP 工作模式

  • 支持安卓、iOS的 Simple Config(APP) 一键配网

  • 支持串口本地升级和远程固件升级(FOTA)

 

       我们本小结以板载BW16完成本实验:

d21939d29052427fa874b1b71b587603.png

 

       首先查看原理图:

手把手教你嵌入式国产化-杂项-开发板V1.0版本(调试版本)

bf6d183d44804542975ee28bfe3d5cd5.png

       这里跳线帽对应的接口,与485复用,所以采样跳线帽方式连接。

 

代码

       首先初始化串口1(GD32系列命名是从串口0开始的)

       编程要点:

  1. 初始化时钟
  2. 配置USART1参数
  3. 使能串口
  4. 配置串口中断
  5. 使能中断接受

7f01978164d442899b4227eaf36690cf.png

 

       这里初始化不是本节重点,我们主要以BW16配置为主!

       大家可以参阅手册去看一下所有的AT指令集,在这里经过测试,我已经整理出来了用作蓝牙主机/从机通讯的AT指令:

 

主机

AT+BLENAME=zhuji             //设置名称

AT+BLEMODE=1                 //设置为主机模式

AT+BLESCAN                   //设置网络

AT+BLECONNECT=94c96049c4cb   //连接从机地址

ATE0                         //关闭回显

从机
  
AT+BLENAME=congji            //设置名称

AT+BLEMODE=0                 //设置从机模式



       这里从机的地址可以通过地址查询码获取本机的地址

 

       对应代码:

       主机:

    Delay(0xfffff);
	Delay(0xfffff);
	Usart_SendString( DEBUG_USARTx,"AT\r\n");
    Delay(0xfffff);
	Delay(0xfffff);
	Usart_SendString( DEBUG_USARTx,"ATE0\r\n");
    Delay(0xfffff);
	Delay(0xfffff);
	Usart_SendString( DEBUG_USARTx,"AT+BLENAME=zhuji\r\n");
    Delay(0xfffff);
	Delay(0xfffff);
	Usart_SendString( DEBUG_USARTx,"AT+BLEMODE=1\r\n");
    Delay(0xfffff);
	Delay(0xfffff);
    Usart_SendString( DEBUG_USARTx,"AT+BLECONNECT=94c96049c5b1\r\n");
    Delay(0xfffff);
	Delay(0xfffff);

       从机:

    Delay(0xfffff);
	Usart_SendString( DEBUG_USARTx,"AT\r\n");
    Delay(0xfffff);	
	Delay(0xfffff);
	Usart_SendString( DEBUG_USARTx,"ATE0\r\n");
    Delay(0xfffff);
	Delay(0xfffff);
	Usart_SendString( DEBUG_USARTx,"AT+BLENAME=congji\r\n");
    Delay(0xfffff);
	Delay(0xfffff);
	Usart_SendString( DEBUG_USARTx,"AT+BLEMODE=0\r\n");
    Delay(0xfffff);
    Delay(0xfffff);

       这里延时我为了保证每次成功,因此是加了延时的,大家可以根据一个实际使用情况,去自行更改,这里的DEBUG_USARTx我使用了宏定义去表达,其实就是串口1

 

       之后在建立了通讯后,就可以通过透传去传输数据了!

 

       我这里是使用按键去控制板子上LED的开启与关闭!

1eeff5c6620046bdb2f3b86c5adf5819.png

       主要是按键1和按键2,具体板子上的原理图可以去查看前面一章板载资源,为了方便移植,我这边源码里面已经全部采用宏定义的方式去表达!

 

       因为是简单的编写,所以我这里采用的是发送0和1去代码LED1LED2

 

       对应的接收文件:

b142459f1e1a404c9ba54718591d52d0.png

       对应上文的发送,分别点亮LED1LED2,同时会在OLED,屏幕上显示打印信息

 

       相较于传统的HC-05/HC-06系列,安信可的BW16以及同系列在很多方面完胜,主要是价格也十分便宜!

       那么大家在使用过程中觉得哪个要更好一些呢?

 

HC-05学习传送门

 

       自此结束,目前
       GD32F103RCT6 基础型 目前已经完成了教程文档开发、源码编写、UCOSIII移植、函数重写,正在进行电机驱动开发
       GD32F107RCT6 互联型 目前正在制作多路CAN、485、以太网通讯,输入输出隔离的开发以及源码编写和UCOSIII移植
       GD32F407ZET6 目前尚未开始


       我会在后续时机合适的时候发表,关注我!第一时间了解!

 

 

  • 23
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
ESP8266 WiFi 模块是一款非常流行的低成本 Wi-Fi 模块,它可以通过与微控制器(如 GD32)连接,实现互联网的连接和通信。下面是使用 GD32 微控制器与 ESP8266 WiFi 模块进行通信的教程。 ## 材料清单 - GD32 微控制器 - ESP8266 WiFi 模块 - 杜邦线若干 ## 接线 将 ESP8266 模块的 VCC 引脚接到 GD32 的 3.3V 电源引脚,将 GND 引脚接到 GD32 的 GND 引脚。然后将 ESP8266 的 TX 引脚连接到 GD32 的 RX 引脚,将 ESP8266 的 RX 引脚连接到 GD32 的 TX 引脚。根据需要,还可以将其他引脚连接到 GD32 上,例如复位引脚和 GPIO 引脚。 ## 代码 在 GD32 微控制器上编写程序,以实现与 ESP8266 模块的通信。以下是一个简单的示例程序: ```c #include <stdio.h> #include "gd32f10x.h" #define ESP8266_USART USART0 #define ESP8266_USART_CLK RCC_APB2PERIPH_USART0 #define ESP8266_USART_GPIO_CLK RCC_APB2PERIPH_GPIOA #define ESP8266_USART_GPIO GPIOA #define ESP8266_USART_TX_PIN GPIO_PIN_9 #define ESP8266_USART_RX_PIN GPIO_PIN_10 #define BUFFER_SIZE 256 void ESP8266_Init() { USART_DeInit(ESP8266_USART); RCC_APB2PeriphClock_Enable(ESP8266_USART_CLK | ESP8266_USART_GPIO_CLK, ENABLE); GPIO_InitPara GPIO_InitStructure; USART_InitPara USART_InitStructure; GPIO_InitStructure.GPIO_Pin = ESP8266_USART_TX_PIN; GPIO_InitStructure.GPIO_Speed = GPIO_SPEED_50MHZ; GPIO_InitStructure.GPIO_Mode = GPIO_MODE_AF_PP; GPIO_Init(ESP8266_USART_GPIO, &GPIO_InitStructure); GPIO_InitStructure.GPIO_Pin = ESP8266_USART_RX_PIN; GPIO_InitStructure.GPIO_Mode = GPIO_MODE_IN_FLOATING; GPIO_Init(ESP8266_USART_GPIO, &GPIO_InitStructure); USART_InitStructure.USART_BaudRate = 115200; USART_InitStructure.USART_WordLength = USART_WORDLENGTH_8B; USART_InitStructure.USART_StopBits = USART_STOPBITS_1; USART_InitStructure.USART_Parity = USART_PARITY_NO; USART_InitStructure.USART_HardwareFlowControl = USART_HARDWAREFLOWCONTROL_NONE; USART_InitStructure.USART_Mode = USART_MODE_TX_RX; USART_Init(ESP8266_USART, &USART_InitStructure); USART_Cmd(ESP8266_USART, ENABLE); } void ESP8266_Send(const char *str) { while (*str) { while (USART_GetBitState(ESP8266_USART, USART_FLAG_TBE) == RESET); USART_SendData(ESP8266_USART, *str++); } } void ESP8266_Receive(char *buffer) { int i = 0; while (i < BUFFER_SIZE - 1) { while (USART_GetBitState(ESP8266_USART, USART_FLAG_RXNE) == RESET); char c = USART_ReceiveData(ESP8266_USART) & 0xff; if (c == '\r' || c == '\n') { if (i > 0) break; } else { buffer[i++] = c; } } buffer[i] = '\0'; } int main(void) { ESP8266_Init(); char buffer[BUFFER_SIZE]; ESP8266_Send("AT\r\n"); ESP8266_Receive(buffer); printf("AT response: %s\n", buffer); ESP8266_Send("AT+GMR\r\n"); ESP8266_Receive(buffer); printf("AT+GMR response: %s\n", buffer); return 0; } ``` 在这个示例程序中,我们使用GD32 的 USART0 串口与 ESP8266 进行通信。我们首先调用 `ESP8266_Init()` 函数进行初始化,然后使用 `ESP8266_Send()` 函数发送 AT 指令到 ESP8266 模块上,并使用 `ESP8266_Receive()` 函数接收来自模块的响应。 ## 总结 通过这个简单的教程,您可以使用 GD32 微控制器与 ESP8266 WiFi 模块进行通信。这只是一个简单的示例程序,您可以根据需要进行更复杂的操作,例如连接到无线网络或通过互联网发送数据。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值