本文是对基于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相关推荐

  1. 51单片机与HC-05蓝牙模块连接使用

    文章目录​​​​ 文章目录 一.连线 二.配置模式 三.代码编写 一.连线 一般我们只用VCC,GND,TXD,RXD这几个接口 VCC->5V GND->GND TXD->RXD ...

  2. HC-05蓝牙模块与STM32控制led灯亮详解

    HC-05蓝牙模块与STM32控制led灯亮 一.HC-05蓝牙模块解析 1.简介 2.HC-05原理 3.HC-05实物图 二.使用AT指令进行配置 1.进入命令响应工作模式 2.配置串口 3.进行 ...

  3. stm32f103c8t6控制蓝牙模块实现led灯亮灭

    stm32f103c8t6控制蓝牙模块实现led灯亮灭 之前利用蓝牙模块是用arduino控制板的,现在已经渐渐接触stm32,所以,这次想着用stm32来控制蓝牙模块. 首先的话,需要配置蓝牙模块的 ...

  4. 毕业设计 基于51单片机无线蓝牙APP控LED灯亮灭亮度设计

    基于51单片机无线蓝牙APP控LED灯亮灭亮度设计 1.项目简介 1.1 系统构成 1.2 系统功能 2.部分电路设计 2.1 LED信号指示灯电路设计 2.2 蓝牙模块 3.部分代码展示 3.1 串 ...

  5. Arduino使用HC05蓝牙模块与手机连接(转载)

    通过本文,可以了解到以下内容: 进入 AT 模式进行蓝牙基本参数设置 Arduino 蓝牙控制 LED 电路设计以及代码编写 利用 Andorid 蓝牙串口调试软件测试功能 进入 At 模式进行蓝牙基 ...

  6. 利尔达e95蓝牙模块程序_Arduino使用HC05蓝牙模块与手机连接

    通过本文,可以了解到以下内容: 进入 AT 模式进行蓝牙基本参数设置 Arduino 蓝牙控制 LED 电路设计以及代码编写 利用 Andorid 蓝牙串口调试软件测试功能 进入 At 模式进行蓝牙基 ...

  7. HC-05蓝牙模块遇到的问题与解决方法及实现和手机通信

    文章目录 1.蓝牙模块的调试--解决无法与设置AT命令的问题 1)问题1:没有搜索到串口 方法1:网上下载驱动 方法2:自己更新驱动 2)问题2:串口打开失败--PL2303HXA自2012已停产,请 ...

  8. HC05蓝牙串口通信模块

    HC-05蓝牙串口通信模块应该是使用最广泛的一种蓝牙模块之一了.因为HC05模块是一款高性能主从一体蓝牙串口模块,可以不用知道太多蓝牙相关知识就可以很好的上手.说白了,只是个蓝牙转串口的设备,你只要知 ...

  9. 常用模块】HC-05蓝牙串口通信模块使用详解

    https://blog.csdn.net/qq_38410730/article/details/80368485 蓝牙模块的调试 HC-05蓝牙串口通讯模块具有两种工作模式:命令响应工作模式和自动 ...

  10. Arduino使用HC05蓝牙模块与手机连接

    通过本文,可以了解到以下内容: 进入 AT 模式进行蓝牙基本参数设置 Arduino 蓝牙控制 LED 电路设计以及代码编写 利用 Andorid 蓝牙串口调试软件测试功能 进入 At 模式进行蓝牙基 ...

最新文章

  1. 计算机网络技术发源于什么,计算机网络基础试题和答案
  2. 基于redis实现的扣减库存
  3. 《零基础看得懂的C++入门教程 》——(9)结构体原来如此
  4. P3649 [APIO2014]回文串
  5. CSS控制文本超出指定宽度显示省略号和文本不换行
  6. 单片机c语言加到4归0,单片机C语言教程四
  7. RGB888颜色码与十六位(RGB565)颜色码的转换
  8. 实战分享:大学生兼职赚钱创业,财务自由,顺势布局
  9. BS4爬取物价局房产备案价以及dataframe的操作来获取房价的信息分析
  10. 系统与软件过程改进09年年会,CMMI vs 敏捷PK赛参赛感言
  11. 怎么在LinkedIn领英安全添加到3万个好友?
  12. 江苏事业单位计算机类结构化面试,2017江苏事业单位结构化面试常见问题及应对方法...
  13. Stack Overflow 上 250W 浏览量的一个问题:你对象丢了
  14. 将电脑上的sqlserver数据库迁移到另一台电脑
  15. OSChina 周二乱弹 —— 以后我偷小鱼干养你
  16. 用proteus直接仿真stm32-可以完全丢弃编程器
  17. 漫步者W820蓝牙连接电脑后,音频卡顿解决方案
  18. 政务大数据平台数据安全体系建设指南
  19. C#RichTextBox更改字体(Font)[大小,粗/斜/下划/删除,变色]
  20. 省市县三级联动插件(面向过程,面向对象两种方式实现)

热门文章

  1. 寻找AR中的Big Difference - v4.0 #AR指南
  2. 2023年前实现大型工业企业5G应用渗透率超35%!模组企业如何保驾护航?
  3. PLSQL中存储过程的建立,导出,导入,使用
  4. fake_useragent导入无法引用的解决方法
  5. oracle唯一索引
  6. 浙大计算机科学与技术专业课表,浙江大学 计算机科学与技术专业课程设置
  7. 算王标准层的量如何计算机,算王软件常用功能技巧
  8. 蓝桥杯特殊回文数C语言简易版
  9. 二进制,十进制,十六进制转化
  10. STC15单片机跑流水灯Proteus仿真