【含代码】STM32F1+HC05蓝牙模块,HC-05蓝牙模块和手机蓝牙APP通信控制LED灯亮灭(亦可控制小车运动),蓝牙遥控小车、智能小车,STM32F103C8T6 USART串口通信

最近很多人在做蓝牙小车,问了我很多问题,所以打算写一篇文章来帮助大家、方便大家学习。

代码、手机蓝牙APP、串口调试助手获取方式放在文末,需要的自行获取。


话不多说,直接进入主题!


一、本教程代码可以实现的功能

手机蓝牙APP控制STM32F103C8T6最小系统板载LED(连接PC13引脚上)亮灭。

二、本项目需要用到的工具

1.硬件

手机(APP控制要用)一台
STM32F103最小系统板一块
HC-05蓝牙模块一块
USB转TTL一个

三、HC05蓝牙模块介绍

  1. 核心模块使用HC-05从模 块 ,引出接口包括 VCC,GND,TXD,RXD,KEY引脚、蓝牙连接状态引出脚 STATE),未连接输出低,连接后输出高。
  2. led 指示蓝牙连接状态,快闪表示没有蓝牙连接,慢闪表示进入 AT 模式,双闪表示蓝牙已连接并打开了端口。
  3. 底板设置防反接二极管,带 3.3V LDO输入电压 3.6~6V未配对时电流约 30mA,配对后约 10mA输入电压禁止超7V
  4. 接口电平 3.3V,可以直接连接各种单片机(51AVR,PIC,ARMMSP430 等),5V 单片机也可直接连接,无需MAX232 也不能经过 MAX232。
  5. 空旷地有效距离 10 (功率等级为 CLASS 2)超过 10 米也是可能的,但不对此距离的连接质量做保证。
  6. 配对以后当全双工串口使用,无需了解任何蓝牙协议,支持 8 位数据位、1 位停止位、可设置奇偶校验的通信格式,这也是最常用的通信格式,不支持其他格式。
  7. 可以通过拉高 34 脚进入 AT 命令模式设置参数和查询信息。
  8. 体积小巧3.57cm*1.52cm),工厂贴片生产,保证贴片质量。并套透明热缩管,防尘美观,且有一定的防静电能力。
  9. 可通过 AT 命令切换为主机或者从机模式,可通过 AT 命令连接指定设备。
  10. 支持从 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单片机接线

STM32F103HC-05蓝牙模块
PA9RXD
PA10TXD

注: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灯"即可获取源代码。


  • 24
    点赞
  • 32
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值