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

avatar
作者
猴君
阅读量:0

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

代码、手机蓝牙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灯"即可获取源代码。


    广告一刻

    为您即时展示最新活动产品广告消息,让您随时掌握产品活动新动态!