阅读量:0
最近很多人在做蓝牙小车,问了我很多问题,所以打算写一篇文章来帮助大家、方便大家学习。
代码、手机蓝牙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,操作如下图所示: