首页 > 基础资料 博客日记
【含代码】STM32F1+HC05蓝牙模块,HC-05蓝牙模块和手机蓝牙APP通信控制LED灯亮灭(亦可控制小车运动),蓝牙遥控小车、智能小车,STM32F103C8T6 USART串口通信
2024-08-11 00:00:11基础资料围观182次
本篇文章分享【含代码】STM32F1+HC05蓝牙模块,HC-05蓝牙模块和手机蓝牙APP通信控制LED灯亮灭(亦可控制小车运动),蓝牙遥控小车、智能小车,STM32F103C8T6 USART串口通信,对你有帮助的话记得收藏一下,看Java资料网收获更多编程知识
最近很多人在做蓝牙小车,问了我很多问题,所以打算写一篇文章来帮助大家、方便大家学习。
代码、手机蓝牙APP、串口调试助手获取方式放在文末,需要的自行获取。
话不多说,直接进入主题!
一、本教程代码可以实现的功能
手机蓝牙APP控制STM32F103C8T6最小系统板载LED(连接PC13引脚上)亮灭。
二、本项目需要用到的工具
1.硬件
手机(APP控制要用) | 一台 |
STM32F103最小系统板 | 一块 |
HC-05蓝牙模块 | 一块 |
USB转TTL | 一个 |
三、HC05蓝牙模块介绍
- 核心模块使用HC-05从模 块 ,引出接口包括 VCC,GND,TXD,RXD,KEY引脚、蓝牙连接状态引出脚 (STATE),未连接输出低,连接后输出高。
- led 指示蓝牙连接状态,快闪表示没有蓝牙连接,慢闪表示进入 AT 模式,双闪表示蓝牙已连接并打开了端口。
- 底板设置防反接二极管,带 3.3V LDO,输入电压 3.6~6V, 未配对时电流约 30mA,配对后约 10mA,输入电压禁止超过 7V!
- 接口电平 3.3V,可以直接连接各种单片机(51,AVR,PIC,ARM,MSP430 等),5V 单片机也可直接连接,无需MAX232 也不能经过 MAX232。
- 空旷地有效距离 10 米(功率等级为 CLASS 2),超过 10 米也是可能的,但不对此距离的连接质量做保证。
- 配对以后当全双工串口使用,无需了解任何蓝牙协议,支持 8 位数据位、1 位停止位、可设置奇偶校验的通信格式,这也是最常用的通信格式,不支持其他格式。
- 可以通过拉高 34 脚进入 AT 命令模式设置参数和查询信息。
- 体积小巧(3.57cm*1.52cm),工厂贴片生产,保证贴片质量。并套透明热缩管,防尘美观,且有一定的防静电能力。
- 可通过 AT 命令切换为主机或者从机模式,可通过 AT 命令连接指定设备。
- 支持从 4800bps~1382400bps 间的标准波特率。
注:以下步骤为示例代码对应配置的蓝牙参数
四、进入AT指令修改参数(可修改名称、主从模式、波特率、配对密码等参数)
1.接线
USB转TTL和蓝牙模块连接(蓝牙模块接四根线即可,另外两根不用管),如下图所示。
注意:蓝牙模块的 VCC 只能接 5V,不能接 3.3V!(接3.3V供电不足,工作会不正常。)
2.测试步骤(进入AT模式测试)
先按住
HC05
蓝牙模块上面的按键,再给蓝牙模块通电
。
蓝
牙模块上面的
LED
进入
慢闪
模式
(
约
1
秒钟闪烁一次
)
,即可进行
AT
命令测试。如下图所示:
3.打开串口调试助手
(这里以野火的为例,用其它的也行。本教程串口调试助手在文末可自行获取),①选择蓝牙模块连接的端口(不知道可以到设备管理器查,CH340那个就是),②修改:波特率为 38400,8 个数据位,1 个停止位,无校验位。③然后点击“打开串口”。如下图所示:
4.修改参数
①
查看蓝牙模块名称
输入
AT+NAME
?
,之后按一下回车再点击发送按钮发送,蓝牙返回+NAME=蓝牙名称。
②修改蓝牙模块名称
输入
AT+NAME=要修改的蓝牙名称
,之后按一下回车再点击发送按钮发送,蓝牙返回 OK
。
例子:
输入AT+NAME=JiaYou ,
蓝牙名称被修改为JiaYou。
③修改蓝牙模块模式
输入
AT+ROLE=<Param>
,之后按一下回车再点击发送按钮发送。蓝牙返回 OK
。
例:输入
AT+ROLE=0
,蓝牙修改为从角色(
Slave
),手机控制单片机
选择模式0
即可
;
Param
参数具体如下:
④修改蓝牙模块配对密码
输入
AT+PSWD=”password”
,之后按一下回车再点击发送按钮发送。蓝牙返回 OK
。(注:
password
是一个参数,把它改为自己需要修改的密码)。
例:
AT+PSWD=“0000”
(
此指令双引号“ ”要加上
),修改蓝牙配对密码为 0000
。(如下图所示)
⑤修改蓝牙模块波特率、校验位、停止位
输入
AT+UART=115200,0,1
。之后按一下回车再点击发送按钮发送。
蓝牙返回
OK
,表示蓝牙波特率修改为
115200
,无校验位,
1
个停止位。
五、功能实现(让蓝牙模块和STM32通信)
1.蓝牙模块和STM32单片机接线
STM32F103 | HC-05蓝牙模块 |
PA9 | RXD |
PA10 | TXD |
注:STM32F103C8T6 3.3V供电,HC-05蓝牙模块5V供电,需供地。
2.串口初始化代码(重要!)
myUsart1.c代码如下:
#include "myUsart1.h"
#include "sys.h"
u8 RxData=0x00;
/*
*** USART1 配置串口1与HC-05通信 ***
*** 波特率:115200,8位数据位,1位停止位,无奇偶校验位 ***
*** 接口:PA9->TX PA10->RX ***
*** 作者:陈加油嗯 ***
***关注微信公众号学习更多单片机知识:微信搜索“陈加油嗯” ***
*/
void USART1_Init(uint32_t bound)
{
GPIO_InitTypeDef GPIO_Initstructure;
NVIC_InitTypeDef NVIC_InitStruct;
USART_InitTypeDef USART1_InitStructure;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);
RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1, ENABLE);
// USART1_TX PA9
GPIO_Initstructure.GPIO_Mode = GPIO_Mode_AF_PP; //复用推挽输出
GPIO_Initstructure.GPIO_Pin = GPIO_Pin_9;
GPIO_Initstructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOA, &GPIO_Initstructure);
// USART1_RX PA10
GPIO_Initstructure.GPIO_Mode = GPIO_Mode_IN_FLOATING; //浮空输入
GPIO_Initstructure.GPIO_Pin = GPIO_Pin_10;
GPIO_Initstructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOA, &GPIO_Initstructure);
USART1_InitStructure.USART_BaudRate = bound;
USART1_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None; //无硬件数据流控制
USART1_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx; //收模式
USART1_InitStructure.USART_Parity = USART_Parity_No; //无奇偶校验位
USART1_InitStructure.USART_StopBits = USART_StopBits_1; //一个停止位
USART1_InitStructure.USART_WordLength = USART_WordLength_8b; //字长为8位数据格式
USART_Init(USART1, &USART1_InitStructure);
USART_Cmd(USART1, ENABLE); //使能USART1
NVIC_InitStruct.NVIC_IRQChannel = USART1_IRQn;
NVIC_InitStruct.NVIC_IRQChannelCmd = ENABLE;
NVIC_InitStruct.NVIC_IRQChannelPreemptionPriority = 1;
NVIC_InitStruct.NVIC_IRQChannelSubPriority = 0;
NVIC_Init(&NVIC_InitStruct);
// NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);
USART_ITConfig(USART1, USART_IT_RXNE, ENABLE);
USART_ClearFlag(USART1, USART_FLAG_TC);
}
void USART1_IRQHandler(void)
{
if (USART_GetFlagStatus(USART1, USART_FLAG_RXNE) == SET)
{
USART_ClearFlag(USART1, USART_FLAG_RXNE);
RxData = USART_ReceiveData(USART1); //接收到的数据存到 RxData
// USART_SendData(USART1, RxData);
// while (USART_GetFlagStatus(USART1, USART_FLAG_TXE) == RESET); //等待数据发完
}
}
3.主函数代码
#include "stm32f10x.h" // Device header
#include "Delay.h"
#include "LED.h"
#include "myUSART1.h"
/*
*** main 主函数代码 ***
*** 串口初始化 LED初始化 ***
*** 作者:陈加油嗯 ***
***关注微信公众号学习更多单片机知识:微信搜索“陈加油嗯” ***
*/
int main(void)
{
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);
USART1_Init(115200); //初始化串口1,接HC-05蓝牙模块
LED_Init(); //LED灯初始化
while(1)
{
if(RxData == 0x00) LED_Close(); //关灯
if(RxData == 0x01) LED_Open(); //开灯
}
}
六、APP配置
1.获取APP,教程全套资料附在文末,下载后把APP安装到手机,APP所在文件中如下图所示。
2.APP参数设置
①手机下载、安装APP,安装完成图标如下。
②打开APP,操作如下图所示:
3.设置好参数,关闭“编辑模式”按钮,给蓝牙模块和单片机供电,手机APP搜索蓝牙,连接上蓝牙APP即可控制LED灯的亮灭。(注:第一次连接蓝牙需要配对蓝牙,根据AT指令设置的配对密码正确输入即可)
七、资料获取(代码、APP、串口调试助手)
获取方法:
关注微信公众号<陈加油嗯>,回复"HC05控制STM32LED灯"即可获取源代码。
文章来源:https://blog.csdn.net/m0_60997683/article/details/139220801
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:jacktools123@163.com进行投诉反馈,一经查实,立即删除!
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:jacktools123@163.com进行投诉反馈,一经查实,立即删除!
标签: