HC-05蓝牙模块学习笔记

写在前面:出于做出实际项目的目的学习该蓝牙模块,内容可能有不全面。结论来源于网上搜索到的教程材料和个人实操,有概率出现错误。在学习时我使用的单片机为stm32F103C8T6.

HC-05硬件连接

  HC-05蓝牙模块以及许多兼容HC-05功能的蓝牙模块都会有6个引脚,新手一般使用RXD,TXD,GND,VCC四个引脚即可。

GND:接地

VCC:接3.6V~6V,个人在实操的时候发现3.3v也可以正常运行

RXD:接单片机的TX(这里为PA9)

TXD:接单片机的RX(这里为PA10,具体可查找手册)

另外两个引脚:STATE用于检测蓝牙连接状况,不可以直接接电源。EN为使能引脚。详情见b站up:DS小龙哥HC05蓝牙模块使用介绍(与STM32单片机通信)_哔哩哔哩_bilibili

HC-05蓝牙模块接收手机发送数据

代码来源:【源码分享】STM32使用HC05蓝牙串口模块远程传输数据_哔哩哔哩_bilibili

实现功能所需的准备:下载蓝牙调试软件(我用的是SPP蓝牙串口调试,可在应用市场下载蓝牙名称与蓝牙模块名称一致),正确接线。

视频中给到的代码有一点点小问题,即RXDATA数组一直没有清零,显示错误。这里给出修改(未贴出的地方与原来一致)

先是主程序

#include "stm32f10x.h"                  // Device header
#include "Delay.h"
#include "OLED.h"
#include "HC05.h"

uint8_t RxSTA = 1;
char RxData[100] = "None";

int main(void)
{
	OLED_Init();
	HC05_Init();
	OLED_ShowString(1, 1, "RxData:");
	OLED_ShowString(2, 1, RxData);
	
	while (1)
	{
		HC05_GetData(RxData);
		if (RxSTA == 0)
		{
			OLED_Clear();
			OLED_ShowString(1, 1, "RxData:");
			OLED_ShowString(2, 1, RxData);	
			HC05_clearString(RxData); //这里为改动部分
			RxSTA = 1;
		}
	}
}

这里是封装的清除字符的函数

#include "stm32f10x.h"                  // Device header
#include "Serial.h"

extern uint8_t RxSTA;

void HC05_Init()
{
	Serial_Init();
	
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);
	
	GPIO_InitTypeDef GPIO_InitStructure;
	GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
	GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0;
	GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
	GPIO_Init(GPIOA, &GPIO_InitStructure);
		
}

void HC05_EnterAT()
{
	GPIO_SetBits(GPIOA, GPIO_Pin_0);
}	

void HC05_ExitAT()
{
	GPIO_ResetBits(GPIOA, GPIO_Pin_0);
}

void HC05_SendString(char *Buf)
{
	Serial_Printf(Buf);
}

void HC05_GetData(char *Buf)
{
	uint32_t count = 0, a = 0;
	while (count < 10000)
	{
		if (Serial_GetRxFlag() == 1)
		{
			Buf[a] = Serial_GetRxData();
			a ++;
			count = 0;
			RxSTA = 0;
		}
		count ++;
	}

}

void HC05_clearString(char * ch){//这里为新增的函数
	while(*ch!='\0'){
		*(ch++) = '\0';
	}
}

#ifndef __HC05_H
#define __HC05_H

void HC05_Init();
void HC05_EnterAT();
void HC05_ExitAT();
void HC05_SendString(char *Buf);
void HC05_GetData(char *Buf);
void HC05_clearString(char * ch);
#endif

问题:OLED屏幕显示乱码?

解决方法:

①检查程序(Serial.c)中的波特率和实际蓝牙模块的波特率是否一致,一般为9600或38400

②检查编码格式是否可一致,如是否都是utf-8或hex或us-ascii等。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值