STM32CubeMX(8)——利用HC-05实现两个单片机之间的通信

利用HC-05实现两个单片机之间的通信


前言

之前我们写过利用HC-05来实现单片机与手机的通信,这期,我们将使用HC-05来实现,单片机与单片机之间的通信。
想利用HC-05实现单片机与单片机之间的通信,与单片机与手机的不同之处在于,我们需要利用AT指令
来对HC-05进行主从定义。

一、硬件准备

我们想要用AT指令去控制HC-05,就需要使用的USB转TTL模块
在这里插入图片描述
按照如下接线

USB转TTL模块HC-05
RXTX
TXRX
VCCVCC
GNDGND
插入电脑的USB口即可连接上蓝牙模块。

二、软件介绍

这里给一下我使用的给蓝牙写AT指令的软件,个人感觉还是挺方便的。也可以使用普通的串口软件。
本连接中包含软件和AT指令集。

链接:https://pan.baidu.com/s/1blScCYDUjFX4dcFvBOhfAw
提取码:nqki

在这里插入图片描述
使用这个软件时,有如下几点需要注意!!!

1.蓝牙模块使用时,想进入AT模式,要在上电前,即USB插入电脑前,一直按住HC-05上的按键key上电,只有这样蓝牙模块才能进入AT模式。

2.我们之前使用HC-05通信时,说过通信的波特率默认都是9600,而这里我们将使用蓝牙模块的固定波特率38400进行设置,所以在下栏,我们要使用38400的波特率
在这里插入图片描述

3.我们点击搜索端口,当搜索成功后,表示我们已经成功打开了,我们可以点击获取模块信息,来获取当前蓝牙模块的一些信息,注意!!!,这里我们在点击获取信息时也需要一直按住HC-05上的按键

4.发送AT指令记得最后要打换行!!

三、利用软件使用AT指令修改蓝牙模块主从关系

要实现两个蓝牙之间的连接,主要有以下几个步骤
一,设定两个蓝牙的主从关系
二.将其中一个蓝牙地址绑定另外一个蓝牙.

1.设定两个蓝牙的主从关系

我们通过获取模块信息.可以得到如下界面.
而后我们使用AT+ROLE=1 将HC_05_01的蓝牙设定为主角色
并使用AT+CMODE=1 将连接模式也设为主角色.
另外一个蓝牙就可以使用AT+ROLE=0AT+CMODE=0来设定为从角色和连接模式为从角色
在这里插入图片描述

2.绑定两个蓝牙的地址

我们记录主蓝牙模块的本机MAC地址,并在从蓝牙模块中使用AT+BIND=?,?,?来绑定主蓝牙模块的地址
在这里插入图片描述

3.一些注意

连接时还需要注意以下问题.
1.两个蓝牙模块的连接密码和访问码要确保一致,不过一般如果你没有改过,都是一致的

2.两个蓝牙模块的通讯波特率要一致!

四、通信测试

按照上述测试完成后,就可以根据正常的蓝牙收发来进行操作了.如果还不会的话,可以参考如下博客.
STM32 Cubemax(二)——串口实现HC-05蓝牙模块与手机通信

发送端的代码如下

printf("Num is %d",i);
i++;
HAL_Delay(1000);

接收端成功接收
在这里插入图片描述

总结

蓝牙还有很多AT指令,如果有兴趣的话,我的百度网盘链接里有详细介绍.

  • 7
    点赞
  • 79
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论
下面是在Keil中使用STM32F103C8T6实现HC-05蓝牙通信的步骤: 1. 配置GPIO引脚:使用Keil中的STM32CubeMX插件来配置GPIO引脚。将一个引脚配置为UART的Tx引脚,另一个引脚配置为UART的Rx引脚。 2. 配置UART:使用STM32CubeMX插件来配置UART。选择正确的波特率、数据位、停止位和校验位。 3. 编写代码:在Keil中打开一个新的工程,创建一个.c文件。在该文件中,包括stm32f10x.h头文件和stm32f10x_usart.h头文件。在main函数中初始化UART并设置波特率、数据位、停止位和校验位。然后使用USART_SendData函数将数据发送到HC-05。 4. 测试:将STM32F103C8T6与HC-05蓝牙模块连接。通过手机或电脑等设备与HC-05蓝牙模块连接,并尝试发送数据。如果一切正常,您将能够在STM32F103C8T6上接收到数据。 下面是一个简单的示例代码,演示如何在Keil中使用STM32F103C8T6与HC-05蓝牙模块进行通信: ``` #include "stm32f10x.h" #include "stm32f10x_usart.h" int main(void) { GPIO_InitTypeDef GPIO_InitStructure; USART_InitTypeDef USART_InitStructure; // 初始化时钟 RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_AFIO | RCC_APB2Periph_USART1, ENABLE); // 配置UART的Tx和Rx引脚 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_Init(GPIOA, &GPIO_InitStructure); GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_Init(GPIOA, &GPIO_InitStructure); // 初始化UART USART_InitStructure.USART_BaudRate = 9600; 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_Rx | USART_Mode_Tx; USART_Init(USART1, &USART_InitStructure); // 使能UART USART_Cmd(USART1, ENABLE); while(1) { // 发送数据到HC-05蓝牙模块 USART_SendData(USART1, 'A'); while(USART_GetFlagStatus(USART1, USART_FLAG_TXE) == RESET); } } ``` 注意:在使用Keil进行开发时,需要添加相应的库文件并设置正确的编译选项。也可以使用STM32CubeMX来生成Keil工程。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

lzzzzzzm

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值