一、固件库模板
二、准备资料
-
固件库模板
-
MDK5开发环境
-
stm32参考手册
-
UART串口协议
-
stm32中断概念
-
HC-05命令集
-
利用固件库模板点灯工程(下面第三行,手动狗头)
-
CH340 USB→TTL模块
-
蓝牙HC-05模块
-
手机软件
实验程序已经发布到百度网盘,本文末有链接可以自取
串口协议查看这篇博客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 命令
有二种方法:
- 按住按键或EN脚拉高,此时灯是慢闪, SPP-05进入AT命令模式,默认波特率是38400;
此模式我们叫原始模式。原始模式下一直处于AT命令模式状态。 - 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命令的详细说明
- AT+ROLE设置主从模式: AT+ROLE?是查询主从状态;AT+ROLE=1是设成主, AT+ROLE=0是设成从, AT+ROLE=2设成回环角色(Slave-Loop(回环角色)——被动连接,接收远程蓝牙主设备数据并将数据原样返回给远程蓝牙)。
- AT+RESET: HC-05复位
- AT+VERSION? :获取HC-05的软件版本号,只能获取,不能修改。
- AT+ORGL:恢复出厂默认设置,当把模块设置乱了,使用此命令进行恢复默认值。
- AT+ADDR? :获取HC-05的蓝牙地址码,只能获取,不能修改。
- AT+NAME? :获取HC-05的名字,AT+NAME=BSP-06,修改模块的名字为BSP-06,具体名字自行修改。
- AT+CLASS? :设置查询设备的类型,尽量不要去修改此参数。默认是1F00。
- AT+IAC? :查询设置查询访问码,默认是9E8B33,尽量不要去修改此参数。
- AT+PSWD? :查询设置配对密码,AT+PSWD=”0000”,密码要有双引号,密码是四位数字.
- AT+UART: AT+UART?是查询当前模块的波特率, AT+UART=波特率是设置.
- AT+CMODE: AT+CMODE?是查询当前连接模式。 AT+CMODE=0, 1, 2(
0
——指定蓝牙地址连接模式(指定蓝牙地址由绑定指令设置)1
——任意蓝牙地址连接模式(不受绑定指令设置地址的约束)2
——回环角色(Slave-Loop) 默认连接模式:0) 。 - AT+BIND:AT+BIND?查询当前绑定地址,AT+BIND=NAP, UAP, LAP (用逗号隔开)。
- AT+RMADD:从蓝牙配对列表中删除所有认证设备.
- AT+STATE? :获取蓝牙模块工作状态.
- AT+LINK=NAP,UAP,LAP:与远程设备建立连接。
- AT+DISC:断开连接.
- AT+RNAME? NAP, UAP, LAP:获取远程蓝牙设备名称.
- AT+ADCN? :获取蓝牙配对列表中认证设备数。
- AT+MRAD?获取最近使用过的蓝牙认证设备地址。
- AT+INQM:设置查询模式,AT+INQM=1, 9, 48(1-带RSSI信号强度指示,9-超过9个蓝牙设备响应则终止查询,48-设定超时为48*1.28=61.44秒)
四、实验
1.硬件设计
- 手机与HC-05通信
GND接GND
VCC接3.3
RXD—CH340的TXD
TXD—CH340的RXD - 用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.软件设计
-
使能 RX 和 TX 引脚 GPIO 时钟和 USART 时钟;
-
初始化 GPIO,并将 GPIO 复用到 USART 上;
-
配置 USART 参数;
-
配置中断控制器并使能 USART 接收中断;
-
使能 USART;
-
在 USART 接收中断服务函数实现数据接收和发送。
2.1 复制工程 (复制stm32-USART串口通讯工程)
四、stm32-USART串口通讯(重定向、接发通信、控制LED亮灭)
2.2 新建hc_05文件(打开工程)
2.3 编写代码
1. 配置HC-05
- 进入AT模式,前面已经讲过了,
- AT+ORGL(先将AT恢复出厂设置,避免之前影响)
这里已经勾选发送新行,直接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. 手机和串口接发通信
- 手机寻找蓝牙,并填写配对码
- 蓝牙调试宝连接对应蓝牙
- 发送数据,串口接收,串口发送,手机接收
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);
}
led.h
#ifndef __LED_H_
#define __LED_H_
#