datasheet

STM32实现蓝牙HC-06通信

2019-07-11来源: eefocus关键字:STM32  蓝牙  HC-06通信

简介

硬件模块:HC-06蓝牙串口通信模块

串口:USART1

接线:RXD–PC9,TXD–PC10,VCC–5V/3V,GND–GND


蓝牙模块上有一个LED,LED 指示蓝牙连接状态, 闪烁表示没有蓝牙连接,常亮表示蓝牙已连接并打开了端口


在未建立蓝牙连接时支持通过 AT 指令设置波特率、名称、配对密码, 设置的参数掉电保存


AT指令

1)测试通讯

发送: AT(返回 OK,一秒左右发一次)

返回: OK

2)改蓝牙串口通讯波特率

发送: AT+BAUD1

返回: +BAUD=1

此时波特率为 1200

发送: AT+BAUD2

返回: +BAUD=2

此时波特率为 2400

……

1---------1200

2---------2400

3---------4800

4---------9600

5---------19200

6---------38400

7---------57600

8---------115200

9---------230400

A---------460800

B---------921600

C---------1382400

不建议用在超过 115200 的波特率,信号的干扰会使系统不稳定。

设置超过 115200 后用电脑无法使用,要用单片机编程于高于

115200 才能使用此波特率和重新发 AT 命令设低波特率

用 AT 命令设好波特率后,下次上电使用不需再设,可以掉电保存波

特率。

3)改蓝牙名称

发送: AT+NAMEname

返回: OK

参数 name:所要设置的当前名称,即蓝牙被搜索到的名称。 20 个

字符以内。

例:发送 AT+NAME123

返回+NAME=123

这时蓝牙名称改为 123

参数可以掉电保存,只需修改一次。 PDA 端刷新服务可以看到更

改后的蓝牙名称。

4)改蓝牙配对密码

发送: AT+PINxxxx

返回: +PIN=xxxx参数 xxxx:所要设置的配对密码, 4 个字节,此命令可用于从机或

主机。从机则是适配器或手机弹出要求输入配对密码窗口时,则手工

输入此参数就可以连接从机。主机则是在用主蓝牙模块连数码相机

时,数码相机是从机,找到相机的配对密码,再设入主蓝牙模块,则

主蓝牙模块就可以自动连接相机。

例:发送 AT+PIN8888

返回+PIN=8888

这时蓝牙配对密码改为 8888,模块在出厂时的默认配对密码是

1234。

参数可以掉电保存,只需修改一次。

5)更改模块的主从模式(V1.7 版本以后支持)

发送: AT+ROLE=1(设置模块为主模式 Master)

返回: +ROLE=1

发送: AT+ROLE=0(设置模块为从模式 Slave)

返回: +ROLE=0


默认的时候波特率为 :9600

配对密码: 1234

可以通过串口助手可以进行AT指令输入


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


参考代码

通过蓝牙实现手机和单片机的通信,手机端可以先下载一个蓝牙串口APP进行试验


#include "public.h"

#include "systick.h"

#include "stdio.h"


void My_USART1_Init(void)  

{  

    GPIO_InitTypeDef GPIO_InitStrue;  

    USART_InitTypeDef USART_InitStrue;  

    NVIC_InitTypeDef NVIC_InitStrue;  

      

    RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);//GPIO端口使能  

    RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1,ENABLE);//串口端口使能  

      

    GPIO_InitStrue.GPIO_Mode=GPIO_Mode_AF_PP;  

    GPIO_InitStrue.GPIO_Pin=GPIO_Pin_9;  

    GPIO_InitStrue.GPIO_Speed=GPIO_Speed_10MHz;  

    GPIO_Init(GPIOA,&GPIO_InitStrue);  

      

    GPIO_InitStrue.GPIO_Mode=GPIO_Mode_IN_FLOATING;  

    GPIO_InitStrue.GPIO_Pin=GPIO_Pin_10;  

    GPIO_InitStrue.GPIO_Speed=GPIO_Speed_10MHz;  

    GPIO_Init(GPIOA,&GPIO_InitStrue);  

      

    USART_InitStrue.USART_BaudRate=9600;  

    USART_InitStrue.USART_HardwareFlowControl=USART_HardwareFlowControl_None;  

    USART_InitStrue.USART_Mode=USART_Mode_Tx|USART_Mode_Rx;  

    USART_InitStrue.USART_Parity=USART_Parity_No;  

    USART_InitStrue.USART_StopBits=USART_StopBits_1;  

    USART_InitStrue.USART_WordLength=USART_WordLength_8b;  

      

    USART_Init(USART1,&USART_InitStrue);

      

    USART_Cmd(USART1,ENABLE);//使能串口1  

      

    USART_ITConfig(USART1,USART_IT_RXNE,ENABLE);//开启接收中断  

      

    NVIC_InitStrue.NVIC_IRQChannel=USART1_IRQn;  

    NVIC_InitStrue.NVIC_IRQChannelCmd=ENABLE;  

    NVIC_InitStrue.NVIC_IRQChannelPreemptionPriority=1;  

    NVIC_InitStrue.NVIC_IRQChannelSubPriority=1;  

    NVIC_Init(&NVIC_InitStrue);  

}  


void USART1_IRQHandler(void)  

{  

     u8 res;  

     if(USART_GetITStatus(USART1,USART_IT_RXNE)!=RESET)

{  

res= USART_ReceiveData(USART1);  

USART_SendData(USART1,res);     

}


int main()  

NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);  

    My_USART1_Init();  

    while(1)  

    {  

    }       

}  



总结

蓝牙通信实际上就是串口通信,通过蓝牙将信息发到串口,再由串口进行通信


关键字:STM32  蓝牙  HC-06通信

编辑:什么鱼 引用地址:http://www.eeworld.com.cn/mcu/ic467490.html
本网站转载的所有的文章、图片、音频视频文件等资料的版权归版权所有人所有,本站采用的非本站原创文章及图片等内容无法一一联系确认版权者。如果本网所选内容的文章作者及编辑认为其作品不宜公开自由传播,或不应无偿使用,请及时通过电子邮件或电话通知我们,以迅速采取适当措施,避免给双方造成不必要的经济损失。

上一篇:stm32 接收蓝牙(uart)等设备命令的处理
下一篇:STM32之定时器(实例)

关注eeworld公众号 快捷获取更多信息
关注eeworld公众号
快捷获取更多信息
关注eeworld服务号 享受更多官方福利
关注eeworld服务号
享受更多官方福利

推荐阅读

STM32开发笔记20: STM32L053R8T6的keil配置

单片机型号:STM32L053R8T6    使用STM32CubeMX生成STM32L053R8T6相关的应用程序代码后,使用Keil开发环境第1次下载的时候,提示如下错误,我使用F0和F4的单片机,没有遇到过。    仔细查看工程设置,原因在工程设置中,我们需加入相应的Flash配置信息,如下图所示,具体的选择,要根据单片机的类型,我们可以仔细查看数据手册。    但下载的时候,偶尔还会提示如下错误:    这件事情网上说了很多的解决方法,我自己测试,更改2处Keil的设置既可以解决,如下图所示。    此2处更改后,反复
发表于 2019-07-16
STM32开发笔记20: STM32L053R8T6的keil配置

STM32开发笔记21: USB驱动的移植

单片机型号:STM32L053R8T6    现在使用的STM32L053R8T6单片机带有USB接口,原先一直使用UART转USB芯片来完成USB功能的支持,现在这款单片机带了就希望使用以下。由于已经建立了自己的工程目录,再重新使用STM32CubeMX生成的工程文件,重新建立是不显示的,所以本文探索将USB驱动文件移植到自己项目中的方法,我使用的是USB的CDCD类,步骤如下:    1、使用STM32CubeMX使能USB,如下图所示:    2、设置时钟,USB需要48M时钟,使用内部和外部均可,我这里使用外部时钟。    3、生成工程文件
发表于 2019-07-16
STM32开发笔记21: USB驱动的移植

STM32开发笔记22: 手动添加驱动文件

单片机型号:STM32L053R8T6    我们可以通过STM32CubeMX生成工程代码,但是如果我们的工程已经建立完毕了,或者说我们在原有的工程上,开始新的项目设计,此时又需加入新的驱动,该如何呢?本文探讨其解决方法。    1、STM32CubeMX的驱动路径如下图所示,我们希望加入什么驱动,就直接将其对应的.c文件加入到工程中即可。    2、为了使该模块生效,我们还学将其使能。其使能宏,在stm32l0xx_hal_conf.h中,如下图所示。    3、上述工作完成后,我们就可以对工程进行编译了,至于驱动的具体调用方法,我们可以参看ST
发表于 2019-07-16
STM32开发笔记22: 手动添加驱动文件

STM32开发笔记23: 使用__weak修饰符

单片机型号:STM32L053R8T6在 HAL 库中,很多回调函数前面使用__weak 修饰符。 weak 顾名思义是“弱”的意思,所以如果函数名称前面加上__weak 修饰符,我们一般称这个函数为“弱函数”。加上了__weak 修饰符的函数,用户可以在用户文件中重新定义一个同名函数,最终编译器编译的时候,会选择用户定义的函数,如果用户没有重新定义这个函数,那么编译器就会执行__weak 声明的函数,并且编译器不会报错。 举个例子:我们打开工程模板,找到并打开文件stm32f4xx_hal.c 文件,里面定义了一个函数 HAL_MspInit,定义如下:__weak void 
发表于 2019-07-16

STM32开发笔记24:STM32L0低功耗设计——需求概述

单片机型号:STM32L053R8T6    这几篇日志将详细记录,自己应用stm32进行低功耗设计的全过程。    使用芯片:STM32L053R8T6    运行模式:        Range 1:电源电压限制在1.71-3.6V,CPU最大运行频率为32MHz。        Range 2:CPU最大运行频率为16MHz。        Range 3:CPU最大运行频率4.2MHz    低功耗模式: 
发表于 2019-07-16
STM32开发笔记24:STM32L0低功耗设计——需求概述

STM32开发笔记25:STM32L0低功耗设计-使用Keil和ST-Link下载程序

单片机型号:STM32L053R8T6    继续项目的开发工作,突然发现,程序不能够正常下载到单片机中了,提示如下图所示的错误,我使用的是keil和ST-Link。    这个问题在我第1次调试的时候发生过1次,我认为是我误操作将芯片烧坏了,因为当时又反复的焊接了一下芯片,也没有修好,就把这件事情放下了。    今天再次出现,自己感觉可能和低功耗有关,仔细查看刚刚下载的程序,里面上来程序就进入低功耗,没有任何退出语句,所以应该是CPU不响应下载命令了。    按照这种思路,先将单片机的复位引脚接地,然后点击下载按钮的同时,放开复位引脚,居然成功
发表于 2019-07-16
STM32开发笔记25:STM32L0低功耗设计-使用Keil和ST-Link下载程序

小广播

何立民专栏

单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

电子工程世界版权所有 京ICP证060456号 京ICP备10001474号 电信业务审批[2006]字第258号函 京公海网安备110108001534 Copyright © 2005-2019 EEWORLD.com.cn, Inc. All rights reserved