当前位置:   article > 正文

九、stm32-蓝牙HC_05(接发通信、控制LED亮灭)_hc05自动连接模式发送

hc05自动连接模式发送

一、固件库模板

见博客:stm32f103c8t6新建固件库模板(可自取)

二、准备资料

  1. 固件库模板

  2. MDK5开发环境

  3. stm32参考手册

  4. UART串口协议

  5. stm32中断概念

  6. HC-05命令集

  7. 利用固件库模板点灯工程(下面第三行,手动狗头)

  8. CH340 USB→TTL模块

  9. 蓝牙HC-05模块

  10. 手机软件

实验程序已经发布到百度网盘,本文末有链接可以自取

stm32参考手册

串口协议查看这篇博客USART串口协议

stm32中断概念STM32中断应用概括

HC-05命令文件:HC-05命令

串口调试工具
https://pan.baidu.com/s/1V-jRJzb0INDXDLo9I4CJ6A 提取码:0000

手机软件管家下载下面两个工具在这里插入图片描述

三、简介

在这里插入图片描述

1. 引脚

标号 PIN 引脚说明
1 STATE 状态引出引脚(未连接时输出低电平,连接时输出高电平)
2 RXD 接收端
3 TXD 发送端
4 GND 模块供电负极
5 VCC 模块供电正极
6 EN 使能端,需要进入命令模式时接3.3V

本模块使用USART协议,具体请看下面两个博客,这里就不继续讲解了
USART串口协议
四、stm32-USART串口通讯(重定向、接发通信、控制LED亮灭)

2. AT: 设置工作模式

工作模式: 自动连接(automatic connection) ,又称为透传模式;命令回应(order-response) ,又称为AT模式(AT mode)
进入 AT 命令有二种方法:

  1. 按住按键EN脚拉高,此时灯是慢闪, SPP-05进入AT命令模式,默认波特率是38400;
    此模式我们叫原始模式。原始模式下一直处于AT命令模式状态。
  2. HC-05上电开机,红灯快闪,按住按键或EN拉高, HC-05进入AT命令模式,默认波特率是9600;此模式我们叫正常模式。正常模式下只有按住按键或拉高EN才处于AT命令模式状态。
    注意:如果波特率没有设备正确, AT命令是执行无效的。

3. 基本配置(所有AT指令都必须换行)

正常模式是9600、AT模式波特率固定38400,8位数据位、1位停止位、无奇偶校验的通信格式。
(1)发送AT\r\n,回复OK;
(2)发送AT+UART?\r\n,回复+UART 9600,0,0
(3)发送AT+UART=115200,0,0\r\n,回复OK。即为波特率配置成功。

  • AT+NAME= “XXX” 修改蓝牙模块名称为XXX
  • AT+ROLE=0 蓝牙模式为从模式
  • AT+CMODE=1 蓝牙连接模式为任意地址连接模式,也就是说该模块可以被任意蓝牙设备连接
  • AT+PSWD=1234 蓝牙配对密码为1234
  • AT+UART=9600,0,0 蓝牙通信串口波特率为9600,停止位1位,无校验位
    配置完,需重启一次。

4. AT命令的详细说明

  1. AT+ROLE设置主从模式: AT+ROLE?是查询主从状态;AT+ROLE=1是设成主, AT+ROLE=0是设成从, AT+ROLE=2设成回环角色(Slave-Loop(回环角色)——被动连接,接收远程蓝牙主设备数据并将数据原样返回给远程蓝牙)。
  2. AT+RESET: HC-05复位
  3. AT+VERSION? :获取HC-05的软件版本号,只能获取,不能修改。
  4. AT+ORGL:恢复出厂默认设置,当把模块设置乱了,使用此命令进行恢复默认值。
  5. AT+ADDR? :获取HC-05的蓝牙地址码,只能获取,不能修改。
  6. AT+NAME? :获取HC-05的名字,AT+NAME=BSP-06,修改模块的名字为BSP-06,具体名字自行修改。
  7. AT+CLASS? :设置查询设备的类型,尽量不要去修改此参数。默认是1F00。
  8. AT+IAC? :查询设置查询访问码,默认是9E8B33,尽量不要去修改此参数。
  9. AT+PSWD? :查询设置配对密码,AT+PSWD=”0000”,密码要有双引号,密码是四位数字.
  10. AT+UART: AT+UART?是查询当前模块的波特率, AT+UART=波特率是设置.
  11. AT+CMODE: AT+CMODE?是查询当前连接模式。 AT+CMODE=0, 1, 2(0——指定蓝牙地址连接模式(指定蓝牙地址由绑定指令设置) 1——任意蓝牙地址连接模式(不受绑定指令设置地址的约束)2——回环角色(Slave-Loop) 默认连接模式:0) 。
  12. AT+BIND:AT+BIND?查询当前绑定地址,AT+BIND=NAP, UAP, LAP (用逗号隔开)。
  13. AT+RMADD:从蓝牙配对列表中删除所有认证设备.
  14. AT+STATE? :获取蓝牙模块工作状态.
  15. AT+LINK=NAP,UAP,LAP:与远程设备建立连接。
  16. AT+DISC:断开连接.
  17. AT+RNAME? NAP, UAP, LAP:获取远程蓝牙设备名称.
  18. AT+ADCN? :获取蓝牙配对列表中认证设备数。
  19. AT+MRAD?获取最近使用过的蓝牙认证设备地址。
  20. AT+INQM:设置查询模式,AT+INQM=1, 9, 48(1-带RSSI信号强度指示,9-超过9个蓝牙设备响应则终止查询,48-设定超时为48*1.28=61.44秒)

四、实验

1.硬件设计

  1. 手机与HC-05通信
    GND接GND
    VCC接3.3
    RXD—CH340的TXD
    TXD—CH340的RXD
  2. 用HC-05控制mcu
    CH340的TXD-----USART1的RX引脚相连(c8t6 的PA10)
    CH340的RXD-----USART1的TX引脚相连(c8t6 的PA9)
    HC-05的TXD-----USART2的RX引脚相连(c8t6 的PA3)
    HC-05的RXD-----USART2的TX引脚相连(c8t6 的PA2)

2.软件设计

  1. 使能 RX 和 TX 引脚 GPIO 时钟和 USART 时钟;

  2. 初始化 GPIO,并将 GPIO 复用到 USART 上;

  3. 配置 USART 参数;

  4. 配置中断控制器并使能 USART 接收中断;

  5. 使能 USART;

  6. 在 USART 接收中断服务函数实现数据接收和发送。

2.1 复制工程 (复制stm32-USART串口通讯工程)

四、stm32-USART串口通讯(重定向、接发通信、控制LED亮灭)

2.2 新建hc_05文件(打开工程)

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

2.3 编写代码

1. 配置HC-05
  1. 进入AT模式,前面已经讲过了,
  2. AT+ORGL(先将AT恢复出厂设置,避免之前影响)
  3. 在这里插入图片描述

这里已经勾选发送新行,直接AT就行,否则为AT\r\n
4. 发送AT,回复OK;
5. 发送AT+UART?,回复+UART 9600,0,0
6. 发送AT+UART=115200,0,0,回复OK。即为波特率配置成功。
7. AT+NAME= "XXX"修改蓝牙模块名称为XXX
8. AT+ROLE=0 蓝牙模式为从模式
9. AT+CMODE=1蓝牙连接模式为任意地址连接模式,也就是说该模块可以被任意蓝牙设备连接
10. AT+PSWD= "1234"蓝牙配对密码为1234
11. AT+UART=9600,0,0 蓝牙通信串口波特率为9600,停止位1位,无校验位.

配置结束,需带电重启一次。

2. 手机和串口接发通信

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

  1. 手机寻找蓝牙,并填写配对码
  2. 蓝牙调试宝连接对应蓝牙
  3. 发送数据,串口接收,串口发送,手机接收
3. 使用HC-05控制mcu

stm32f103c8t6自带一个led灯,使用PC13引脚就行了,

切记尽量避免使用PB3、PB4,具体看stm32f103c8t6使用PB3和PB4做普通GPIO使用时发现异常

led.c
#include "led.h"	//绑定led.h

void LED_GPIO_Config(void) {
   
    GPIO_InitTypeDef GPIO_InitStruct; //初始化参数结构体指针,结构体类型为 GPIO_InitTypeDef。
    //开启RCC时钟
    RCC_APB2PeriphClockCmd(LED_G_GPIO_CLK, ENABLE);

    //配置初始化,推挽输出方式和LED_G_GPIO_PIN管脚、赫兹
    GPIO_InitStruct.GPIO_Pin = LED_G_GPIO_PIN;
    GPIO_InitStruct.GPIO_Mode = GPIO_Mode_Out_PP;
    GPIO_InitStruct.GPIO_Speed = GPIO_Speed_50MHz;
    //GPIO口初始化
    GPIO_Init(LED_G_GPIO_PORT, &GPIO_InitStruct);
}

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
led.h
#ifndef __LED_H_
#define __LED_H_

#include &
  • 1
  • 2
  • 3
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/繁依Fanyi0/article/detail/687884
推荐阅读
相关标签
  

闽ICP备14008679号