HC05蓝牙点亮LED
本文是对基于STM32的HC05蓝牙点灯实验,目的在于认识HC05蓝牙模块,学会配置HC05,知道怎么用蓝牙在手机上控制单片机并且传输数据,虽然本文只控制led,但是点灯就是基础,主要在于学习hc05蓝牙模块。
1.认识一下HC05模块
6根引脚,名称与功能如下;
VCC 接电源的正极,电压的范围为3.3v到5.0v;
VDD 为外接供电电源输入端;
GND 地线;
TXD:模块串口发送引脚(TTL电平,不能直接接RS232电平),可直接接单片机的RXD引脚;
RXD:模块串口接收引脚(TTL电平,不能直接接RS232电平),可直接接单片机的TXD引脚;
KEY:用于进入AT状态;
LED:这个引脚是用来检测蓝牙模块是否已经连接上了其他蓝牙设备;
原理啥的可以看参考手册,但是我觉得HC蓝牙本质上就是控制串口,所以学好串口就会这玩意。
2.hc05使用前的配置
1.首先你需要有转TTL口和两个蓝牙模块,连接方式就是tx和RX都反接,VCC对VCC,GND也是
2.将TTL插到电脑上打开串口助手(插得时候记得把蓝牙模块上面有个小按键按住,这是为了让蓝牙模块进入AT模式)
3.配置参数
1.HC-T串口助手
这是我买的HC05提供是上面的一个串口助手,按图片来操作,先进AT模式再配置,
这个串口助手把指令封装好了,测试AT指令会返回OK,波特率再调试到9600,因为我使用的是STM32F103C8T6,另外还可以给你的蓝牙起名字还有配对密码,设置好之后可以在手机上安装一个蓝牙调试器,先实现手机与电脑串口的数据传输。
这个蓝牙调试软件可以修改你的字符编码和换行符,根据需要修改。
2.XCOM串口软件
这个XCOM串口指令配置蓝牙指令可以参考这个 配置指令
3.STM32与HC05(重点)
我用的是USART1,所以连接的是A9和A10
话不多说直接上代码
Serial.h
#include "stm32f10x.h"
#include <stdio.h>
#include <stdarg.h>char Serial_RxPacket[100]; //定义一个接收存放
uint8_t Serial_RxFlag; //接收标志位void Serial_Init(void)
{RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1, ENABLE); RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE); //开启串口与GPIO时钟GPIO_InitTypeDef GPIO_InitStructure; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; //tx发送引脚 输出模式GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9;GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;GPIO_Init(GPIOA, &GPIO_InitStructure); GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU; //rx接收 出入模式GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10;GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;GPIO_Init(GPIOA, &GPIO_InitStructure); //初始化GPIOUSART_InitTypeDef USART_InitStructure;USART_InitStructure.USART_BaudRate = 9600; //波特率USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None; //不使用硬件流USART_InitStructure.USART_Mode = USART_Mode_Tx | USART_Mode_Rx; //发送接收模式USART_InitStructure.USART_Parity = USART_Parity_No; //无奇偶校验位USART_InitStructure.USART_StopBits = USART_StopBits_1; //1位停止符USART_InitStructure.USART_WordLength = USART_WordLength_8b; //配置帧数据字长USART_Init(USART1, &USART_InitStructure); //usart结构体初始化USART_ITConfig(USART1, USART_IT_RXNE, ENABLE); //开启中断控制 使能串口NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2); //NVIC优先级NVIC_InitTypeDef NVIC_InitStructure;NVIC_InitStructure.NVIC_IRQChannel = USART1_IRQn; NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1;NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1;NVIC_Init(&NVIC_InitStructure); //NVIC结构体配置USART_Cmd(USART1, ENABLE); //开启USART1
}void USART1_IRQHandler(void) //串口中断
{static uint8_t RxState = 0; static uint8_t pRxPacket = 0; //用于数据存储次数if (USART_GetITStatus(USART1, USART_IT_RXNE) == SET) //判断是否接收到数据{uint8_t RxData = USART_ReceiveData(USART1); //暂存到RxDataif (RxState == 0){if (RxData == '@' && Serial_RxFlag == 0) //当接收到@字符而且标志位为0是{RxState = 1; pRxPacket = 0; }}else if (RxState == 1) { if (RxData == '\r') //当接收到\r时{RxState = 2;}else{Serial_RxPacket[pRxPacket] = RxData; //数据传给Serial_RxPacket[pRxPacket]pRxPacket ++; //同时pRxPacket 的位置++}}else if (RxState == 2){if (RxData == '\n') {RxState = 0;Serial_RxPacket[pRxPacket] = '\0'; //给字符数组加一个结束标志位Serial_RxFlag = 1;}}USART_ClearITPendingBit(USART1, USART_IT_RXNE); //清除}
}
mian.c
#include "stm32f10x.h"
#include "Delay.h"
#include "OLED.h"
#include "Serial.h"
#include "LED.h"
#include "string.h"int main(void)
{OLED_Init();LED_Init();Serial_Init();OLED_ShowString(1, 1, "TxPacket");OLED_ShowString(3, 1, "RxPacket");while (1){if (Serial_RxFlag == 1){OLED_ShowString(4, 1, " ");OLED_ShowString(4, 1, Serial_RxPacket);if (strcmp(Serial_RxPacket, "ON") == 0){LED1_ON();Serial_SendString("LED_ON_OK\r\n");OLED_ShowString(2, 1, " ");OLED_ShowString(2, 1, "LED_ON_OK");}else if (strcmp(Serial_RxPacket, "OFF") == 0){LED1_OFF();Serial_SendString("LED_OFF_OK\r\n");OLED_ShowString(2, 1, " ");OLED_ShowString(2, 1, "LED_OFF_OK");}else{Serial_SendString("ERROR\r\n");OLED_ShowString(2, 1, " ");OLED_ShowString(2, 1, "ERROR");}Serial_RxFlag = 0;}}
}
这部分代码都是江科大讲串口传输数据包的代码,刚开始我自己做的是传输一个字符让LED点亮,后面发现一些传感器的数据都是多个的,就想先使用字符串来控制LED,后面因为没有设置好包头包尾容易乱码,而数据包的传输可以把多个单独数据打包起来,方便进行多字节的数据通信,建议大家可以看一下也江科大的32视频,受益匪浅 。
本代码使用@当包头,\r\n当包尾,在手机的蓝牙调试中记得加上,点灯都会了,其他关于此模块都差不多。
HC05蓝牙点亮LED相关推荐
- 51单片机与HC-05蓝牙模块连接使用
文章目录 文章目录 一.连线 二.配置模式 三.代码编写 一.连线 一般我们只用VCC,GND,TXD,RXD这几个接口 VCC->5V GND->GND TXD->RXD ...
- HC-05蓝牙模块与STM32控制led灯亮详解
HC-05蓝牙模块与STM32控制led灯亮 一.HC-05蓝牙模块解析 1.简介 2.HC-05原理 3.HC-05实物图 二.使用AT指令进行配置 1.进入命令响应工作模式 2.配置串口 3.进行 ...
- stm32f103c8t6控制蓝牙模块实现led灯亮灭
stm32f103c8t6控制蓝牙模块实现led灯亮灭 之前利用蓝牙模块是用arduino控制板的,现在已经渐渐接触stm32,所以,这次想着用stm32来控制蓝牙模块. 首先的话,需要配置蓝牙模块的 ...
- 毕业设计 基于51单片机无线蓝牙APP控LED灯亮灭亮度设计
基于51单片机无线蓝牙APP控LED灯亮灭亮度设计 1.项目简介 1.1 系统构成 1.2 系统功能 2.部分电路设计 2.1 LED信号指示灯电路设计 2.2 蓝牙模块 3.部分代码展示 3.1 串 ...
- Arduino使用HC05蓝牙模块与手机连接(转载)
通过本文,可以了解到以下内容: 进入 AT 模式进行蓝牙基本参数设置 Arduino 蓝牙控制 LED 电路设计以及代码编写 利用 Andorid 蓝牙串口调试软件测试功能 进入 At 模式进行蓝牙基 ...
- 利尔达e95蓝牙模块程序_Arduino使用HC05蓝牙模块与手机连接
通过本文,可以了解到以下内容: 进入 AT 模式进行蓝牙基本参数设置 Arduino 蓝牙控制 LED 电路设计以及代码编写 利用 Andorid 蓝牙串口调试软件测试功能 进入 At 模式进行蓝牙基 ...
- HC-05蓝牙模块遇到的问题与解决方法及实现和手机通信
文章目录 1.蓝牙模块的调试--解决无法与设置AT命令的问题 1)问题1:没有搜索到串口 方法1:网上下载驱动 方法2:自己更新驱动 2)问题2:串口打开失败--PL2303HXA自2012已停产,请 ...
- HC05蓝牙串口通信模块
HC-05蓝牙串口通信模块应该是使用最广泛的一种蓝牙模块之一了.因为HC05模块是一款高性能主从一体蓝牙串口模块,可以不用知道太多蓝牙相关知识就可以很好的上手.说白了,只是个蓝牙转串口的设备,你只要知 ...
- 常用模块】HC-05蓝牙串口通信模块使用详解
https://blog.csdn.net/qq_38410730/article/details/80368485 蓝牙模块的调试 HC-05蓝牙串口通讯模块具有两种工作模式:命令响应工作模式和自动 ...
- Arduino使用HC05蓝牙模块与手机连接
通过本文,可以了解到以下内容: 进入 AT 模式进行蓝牙基本参数设置 Arduino 蓝牙控制 LED 电路设计以及代码编写 利用 Andorid 蓝牙串口调试软件测试功能 进入 At 模式进行蓝牙基 ...
最新文章
- 计算机网络技术发源于什么,计算机网络基础试题和答案
- 基于redis实现的扣减库存
- 《零基础看得懂的C++入门教程 》——(9)结构体原来如此
- P3649 [APIO2014]回文串
- CSS控制文本超出指定宽度显示省略号和文本不换行
- 单片机c语言加到4归0,单片机C语言教程四
- RGB888颜色码与十六位(RGB565)颜色码的转换
- 实战分享:大学生兼职赚钱创业,财务自由,顺势布局
- BS4爬取物价局房产备案价以及dataframe的操作来获取房价的信息分析
- 系统与软件过程改进09年年会,CMMI vs 敏捷PK赛参赛感言
- 怎么在LinkedIn领英安全添加到3万个好友?
- 江苏事业单位计算机类结构化面试,2017江苏事业单位结构化面试常见问题及应对方法...
- Stack Overflow 上 250W 浏览量的一个问题:你对象丢了
- 将电脑上的sqlserver数据库迁移到另一台电脑
- OSChina 周二乱弹 —— 以后我偷小鱼干养你
- 用proteus直接仿真stm32-可以完全丢弃编程器
- 漫步者W820蓝牙连接电脑后,音频卡顿解决方案
- 政务大数据平台数据安全体系建设指南
- C#RichTextBox更改字体(Font)[大小,粗/斜/下划/删除,变色]
- 省市县三级联动插件(面向过程,面向对象两种方式实现)