完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
|
|
相关推荐
1个回答
|
|
HC-05蓝牙串口通信模块应该是使用最广泛的一种蓝牙模块之一了。为什么呢?
因为HC05模块是一款高性能主从一体蓝牙串口模块,可以不用知道太多蓝牙相关知识就可以很好的上手。说白了,只是个蓝牙转串口的设备,你只要知道串口怎么编程使用,就可以了,实现了所谓的透明传输。 但是就是这么一个很常见的模块,网上很多的博客写的都是错的,或者都是很不详细的。 所以本文就介绍一下这款蓝牙通信模块的使用,包括蓝牙模块的调试、手机与蓝牙模块之间的传输、手机蓝牙控制STM32单片机,应该是逐渐深入的一个过程。但是这仅仅是使用,以后有时间应该会对蓝牙有一个稍微深度的学习,而不能仅仅是浮于表面,只会用。 模块名称:HC-05蓝牙串口通信模块 参考资料:HC-05蓝牙串口通信模块官方资料包 知识储备:【STM32】串口通信基本原理(超基础、详细版) 其他模块:USB转TTL模块、手机蓝牙串口助手app 手机蓝牙串口助手软件,可以点击链接下载:蓝牙串口。因为这是我见过所有手机端界面最好看的了,其他的界面都有点太糟糕了。 蓝牙模块的调试 准备工作 USB转TTL模块与HC-05蓝牙模块的接线: 两模块共地,两模块共VCC(VCC取5V);蓝牙模块的RX接转换模块的TX,蓝牙模块的TX接转换模块的RX。如下图所示: 这个时候就要将转换模块连接到电脑上,然后利用串口调试助手进行蓝牙模块的调试。 附可能会用到的驱动:链接:https://pan.baidu.com/s/1bpYLfCr 密码:yabv 蓝牙模块的调试 HC-05蓝牙串口通讯模块具有两种工作模式:命令响应工作模式和自动连接工作模式。在自动连接工作模式下模块又可分为主(Master)、从(Slave)和回环(Loopback)三种工作角色。
进入命令响应工作模式有两种方法:
在蓝牙模块中有一个小按键,按一下就置高一次PIO11。也就是说,第一种方法需要每发送一次AT指令按一次;而第二种方式是长按的过程中上电,之后就无需再管了,直接发送AT命令即可。 需要注意一下,两种进入命令响应工作模式的方式使用的波特率是不一样的,建议使用第二种方式。 怎么区分进了命令响应工作模式呢? 在蓝牙模块上有灯,当灯快闪的时候,就是自动连接工作模式;当灯慢闪的时候,就是命令响应工作模式。 AT命令 进入到命令响应工作模式之后,就可以使用串口调试助手进行蓝牙调试了。 首先有一点,AT指令不区分大小写,均以回车、换行结尾。下面介绍常用的AT指令: 常用AT指令
例子: 本文中,蓝牙串口的波特率设置成115200。之后的内容,就会采用这个波特率来进行通讯了。 手机与蓝牙模块之间的传输 直接将蓝牙模块与转换模块连接,再讲其连接到电脑上,蓝牙模块直接进入自动连接工作模式。 此时手机打开蓝牙串口调试应用,用其来连接蓝牙模块。手机蓝牙串口助手软件,可以点击链接下载:蓝牙串口。万分推荐这款,因为界面脱离了那种黑不溜秋的感觉,比较简洁、清爽。 这个软件的使用:点击界面右下角蓝牙的标志,选择蓝牙进行连接。 然后在电脑上的调试助手和手机的蓝牙串口调试应用之间就可以相互传输了,比如: 可以清楚的看到:电脑向手机发送了“hello you”,手机向电脑发送了“hello world”。 手机蓝牙控制STM32单片机 之前的两个例子都是相比较而言比较简单的,这个例子将会涉及到程序的内容了。 实现功能:手机通过蓝牙,向STM32单片机发送消息,STM32接收到消息之后原封不动的返回给手机。当然如果掌握了这个例子,也可以修改成,手机发送特定的消息,然后,STM32单片机做出相对应的动作。比如:点亮LED等、发动电机等等。 连接说明 使用USART1进行试验,也就是说STM32选取PA9、PA10来和HC-05进行连接。同时手机通过蓝牙来和HC-05进行连接。 原理就是:手机通过蓝牙传输到HC-05上,再通过串口通信和STM32通信;而之前一般都是电脑上通过USB线转串口的方式,通过串口和STM32通信。本质上没有区别的。 这个时候就应该更加深刻地体会到了本文开篇的一句话:说白了,只是个蓝牙转串口的设备,你只要知道串口怎么编程使用,就可以了,实现了所谓的透明传输。蓝牙的相关一切都被封装起来了,都不需要接触到。 STM32控制程序 #include "stm32f10x.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=115200; 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(void) { NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2); My_USART1_Init(); while(1); } 这段程序和【STM32】串口相关配置寄存器、库函数(UART一般步骤)中的程序一模一样,几乎没有什么改动。 区别就是,在UART实验中,USART1是和USB转串口模块连接在一起的,然后与电脑上的串口调试助手进行通信;现在改成USART1是和蓝牙模块连接在一起的,然后和手机上的蓝牙串口调试助手进行通信。 |
||
|
||
只有小组成员才能发言,加入小组>>
2545 浏览 0 评论
1143浏览 2评论
743浏览 1评论
496浏览 0评论
261浏览 0评论
420浏览 0评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-20 01:57 , Processed in 1.247387 second(s), Total 80, Slave 62 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号