前言
随着物联网技术的发展,无线通信技术受到了广泛的关注。蓝牙因其低功耗、操作简单等优点,在短距离通信方面有很大市场。本文结合stm32课设经历,记录一下自己学习蓝牙模块的收获,主要内容HC-05蓝牙模块的配置方法,蓝牙调试助手app,HC串口调试助手。
一、HC-05蓝牙模块的配置方法
如上图所示:
1、下载串口调试助手并打开软件。
2、将HC-05与USB转TTL模块连接,对应引脚为VCC-VCC、GND-GND、TXD-RXD(注意交叉连接)。
3、按住HC-05的黑色按钮,将USB转TTL与电脑连接,待HC-05的指示灯变为慢闪后松开。
4、在串口调试助手软件中设置参数,波特率为38400、校验位为None(无)、数据位为8、停止位为1,参数设置好后点击打开串口按钮,选择相应端口。
5、在图示圈3的位置输入AT,按ENTER换行后点击手动发送,软件在圈5位置返回OK,则表示进入到AT指令模式。
6、指令集:
AT+ PSWD?查询密码 默认1234
AT+NAME?查询名称 默认HC-05
AT+ UART?查询通信波特率 与stm32通信时建议设置为9600
AT+PSWD=Tff 蓝牙密码设置为Tff
AT+NAME=Chariot 蓝牙名称设置为Chariot
AT+UART=9600 将波特率设置为9600
7、更改蓝牙名称便于识别,设置密码可以防止他人连接蓝牙模块,乱发送指令数据,导致工作混乱。
(进入AT指令的波特率必须为38400,将USB转TTL连接到电脑上时,需按住HC-05的黑色按钮)
二、STM32F103C8T6代码
1.USART.C文件
代码如下:
#if SYSTEM_SUPPORT_OS
#include "includes.h"
#endif
struct __FILE
{
int handle;
};
void _sys_exit(int x)
{
x=x;
}
int fpuct(int ch,FILE *f)
{
while(SET!=USART_GetFlagStatus(USART3,USART_FLAG_TC));
USART_SendData(USART3,ch);
return ch;
}
void Usart3_Init(u32 baud)
{
GPIO_InitTypeDef GPIO_InitStructure;
USART_InitTypeDef USART_InitStructure;
NVIC_InitTypeDef NVIC_InitStructure;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,ENABLE);
RCC_APB1PeriphClockCmd(RCC_APB1Periph_USART3,ENABLE);
RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO,ENABLE);
GPIO_InitStructure.GPIO_Pin=GPIO_Pin_10;
GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_Mode=GPIO_Mode_AF_PP;
GPIO_Init(GPIOB,&GPIO_InitStructure);
GPIO_InitStructure.GPIO_Pin=GPIO_Pin_11;
GPIO_InitStructure.GPIO_Mode=GPIO_Mode_IN_FLOATING;
GPIO_Init(GPIOB,&GPIO_InitStructure);
USART_InitStructure.USART_BaudRate=baud;
USART_InitStructure.USART_WordLength=USART_WordLength_8b;
USART_InitStructure.USART_StopBits=USART_StopBits_1;
USART_InitStructure.USART_Parity=USART_Parity_No;
USART_InitStructure.USART_HardwareFlowControl=USART_HardwareFlowControl_None;
USART_InitStructure.USART_Mode=USART_Mode_Rx|USART_Mode_Tx;
USART_Init(USART3,&USART_InitStructure);
USART_ITConfig(USART3, USART_IT_RXNE, ENABLE);
USART_ClearFlag(USART3,USART_FLAG_TC);
NVIC_InitStructure.NVIC_IRQChannel = USART3_IRQn;
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 3;
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 3;
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
NVIC_Init(&NVIC_InitStructure);
USART_Cmd(USART3, ENABLE);
MotorInit();
}
#if EN_USART3_RX
u8 USART_RX_BUF[USART_REC_LEN];
u16 USART_RX_STA=0;
extern int g_USART3_FLAG ;
extern int Mode;
void USART3_IRQHandler(void)
{
u8 Res;
#if SYSTEM_SUPPORT_OS
OSIntEnter();
#endif
if(USART_GetITStatus(USART3, USART_IT_RXNE) != RESET)
{
Res = USART_ReceiveData(USART3);
if(Res == 'A') g_USART3_FLAG = 1;//前进
if(Res == 'B') g_USART3_FLAG = 2;//后退
}
#if SYSTEM_SUPPORT_OS
OSIntExit();
#endif
}
#endif
int k;
void UsartPrintf(USART_TypeDef * USARTx,char * fmt ,...)
{
unsigned char UsartPrintBuf[256];
va_list ap;
unsigned char *pStr = UsartPrintBuf;
va_start(ap,fmt);
vsprintf((char *)UsartPrintBuf,fmt,ap);
va_end(ap);
while(*pStr != 0)
{
USART_SendData(USARTx,*pStr++);
while(USART_GetFlagStatus(USARTx,USART_FLAG_TC) == RESET);
}
for(k=1;k<=3;k++)
{
delay_ms(1000);
}
}
2.USART.H文件
代码如下:
#define USART_REC_LEN 200
#define EN_USART3_RX 1
void Usart3_Init(u32 baud);
void USART3_IRQHandler(void);
void usart3_putc(char ch);
void usart3_puts(const char *s);
int fpuct(int ch,FILE *f);
void _sys_exit(int x);
void UsartPrintf(USART_TypeDef * USARTx,char * fmt ,...);
extern int g_USART3_FLAG ;
extern u8 USART_RX_BUF[USART_REC_LEN];
extern u16 USART_RX_STA;
#endif
三、蓝牙调试器
1、打开蓝牙调试器软件,点击底部中间的扫描按钮,显示可配对的设备。软件可直接百度搜索下载,但苹果手机无法下载。
2、点击上图的 + 变成红色的 X 时,蓝牙与手机完成连接。
3、点击底部的按钮控制可以设置蓝牙发送的数据,控制DIY。
4、点击编辑模式可以设置按钮按下与松开时发送的数据。