STM32 + CubeMX + 串口 + HC-06蓝牙模块

  这篇文章记录一下HC-06蓝牙模块调试过程,通过手机蓝牙助手APP给STM32F103C8发送数据,STM32收到数据后原样返回给蓝牙助手。

一、HC-06蓝牙模块介绍

1、模块介绍

在这里插入图片描述

2、常用AT指令

模块使用注意事项:
(1)模块供电: 规格书写的工作电压为3.0~3.6V,但实际使用中发现3.3V不工作,需要3.6V左右才可以。如果上电后蓝牙模块灯不亮,检查下电压是否满足要求。
(2)AT模式:模块上电后,不要配对才可以进入 AT 模式,注意把两条指令的时间间隔控制在 1S 或以上。
(3)出厂默认波特率 9600,蓝牙名 HC-06,配对密码 1234。

指令响应说明
ATOKAT模式测试指令
AT+BAUD1OK1200设置波特率为1200
1--------- 1200
2--------- 2400
3--------- 4800
4--------- 9600
5--------- 19200
6--------- 38400
7--------- 57600
8--------- 115200
9--------- 230400
A--------- 460800
B--------- 921600
C--------- 1382400
AT+NAMEnameOKsetname参数 name:所要设置的当前名称,即蓝牙被搜索到的名称。20 个字符以内。
AT+PINxxxxOKsetPIN模块在出厂时的默认配对密码是 1234。参数可以掉电保存,只需修改一次
AT+ROLE=S
AT+ROLE=M
OK+ROLE:S
OK+ROLE:M
S:设置模块为从模块 Slave,(模块默认为从机)
M: 设置模块为主模块 Master
AT+LED0
AT+LED1
LED OFF
LED ON
AT+LED0 关灯
AT+LED1 开灯

3、透传模式

  • 模块上电后红色和蓝色LED闪烁,等待配对
  • 手机安装蓝牙调试助手App,打开App,选择HC-06进行配对
  • 配对成功后,模块红色和蓝色LED停止闪烁变为常亮
    在这里插入图片描述

4、硬件连接

CH340HC-06
VCCVCC
GNDGND
TXRX
RXTX

5、收发数据功能测试

  • 电脑通过串口助手发送数据,手机蓝牙调试助手App收到数据
    在这里插入图片描述
    在这里插入图片描述

  • 手机通过蓝牙助手App发送数据,电脑串口助手收到数据
    在这里插入图片描述

在这里插入图片描述

二、STM32CubeMx配置

1、RCC开启外部高速时钟(略)
2、配置STLink调试口(略)
3、配置串口方便调试输出(略)
4、配置工程名、生成路径,之后生成工程(略)
(1-4步的基础配置可以参考前面的文章《STM32基础工程模板创建》
备注:配置串口参数时记得把波特率改成与蓝牙模块匹配的速率,我改成了默认的9600

三、代码编写

int main(void)
{
	HAL_Init();
	SystemClock_Config();
	MX_GPIO_Init();
	MX_USART1_UART_Init();
	
	uint8_t Data = 0;					//收发数据临时变量
	while (1)
	{
		HAL_UART_Receive(&huart1, &Data, 1, 0xffff);		//阻塞接收,接收超时时间设为0xffff
		HAL_UART_Transmit(&huart1, (uint8_t *)&Data, 1, 0xffff);//阻塞发送,发送超时时间设为0xffff
	}
}

四、硬件连接

    我这里用的CH340 进行供电,因为单片机开发板的3.3V电压过低无法使蓝牙模块正常工作,总是上电几秒后工作指示灯就灭了。

CH340CH-06
VCCVCC
GNDGND

STM32CH-06
TXRX
RXTX

五、运行效果

  蓝牙助手发送“123456789”,之后收到“123456789”
在这里插入图片描述

由于 STM32 有多种型号,且每种型号的芯片资源分配不同,因此编写 STM32 控制蓝牙接收字符串的代码需要根据具体的 STM32 型号和蓝牙模块类型进行选择和修改。下面是一个示例代码,以 STM32F103C8T6 为例,使用 HC-05 蓝牙模块: ```c #include "stm32f10x.h" #include <stdio.h> #include <string.h> #define USARTx USART1 #define USARTx_IRQn USART1_IRQn #define USARTx_IRQHandler USART1_IRQHandler #define USART_BAUDRATE 9600 #define USARTx_TX_PIN GPIO_Pin_9 #define USARTx_TX_GPIO_PORT GPIOA #define USARTx_RX_PIN GPIO_Pin_10 #define USARTx_RX_GPIO_PORT GPIOA #define BUFFER_SIZE 64 char buffer[BUFFER_SIZE]; uint8_t index = 0; uint8_t flag = 0; void USART_Config(void) { USART_InitTypeDef USART_InitStructure; GPIO_InitTypeDef GPIO_InitStructure; NVIC_InitTypeDef NVIC_InitStructure; RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1 | RCC_APB2Periph_GPIOA, ENABLE); GPIO_InitStructure.GPIO_Pin = USARTx_TX_PIN; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_Init(USARTx_TX_GPIO_PORT, &GPIO_InitStructure); GPIO_InitStructure.GPIO_Pin = USARTx_RX_PIN; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_Init(USARTx_RX_GPIO_PORT, &GPIO_InitStructure); USART_InitStructure.USART_BaudRate = USART_BAUDRATE; 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(USARTx, &USART_InitStructure); NVIC_InitStructure.NVIC_IRQChannel = USARTx_IRQn; NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0; NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0; NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; NVIC_Init(&NVIC_InitStructure); USART_ITConfig(USARTx, USART_IT_RXNE, ENABLE); USART_Cmd(USARTx, ENABLE); } void USARTx_IRQHandler(void) { if (USART_GetITStatus(USARTx, USART_IT_RXNE) != RESET) { char data = USART_ReceiveData(USARTx); if (data == '\n') { buffer[index] = '\0'; flag = 1; index = 0; } else { buffer[index++] = data; } } } int main(void) { USART_Config(); while (1) { if (flag) { flag = 0; printf("Received string: %s\r\n", buffer); } } } ``` 该代码使用 USART1 串口收发数据,并配置了中断,当收到一个字符串时,会将其存储在 `buffer` 中,并打印出来。在 HC-05 蓝牙模块连接到 STM32 的 USART1 串口的情况下,当从蓝牙发送一个字符串并以换行符结尾时,就可以在串口调试助手中看到接收到的字符串了。如果使用其他型号的 STM32 或其他类型的蓝牙模块,则需要根据具体情况进行修改。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值