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