前言
时不可以苟遇,道不可以虚行。
今天分享一下最近学习的 HC05
蓝牙模块,通过用 手机蓝牙控制 STM32
单片机 进行 点灯、传输数据、显示波形 等基础操作。
一、介绍
HC05模块是一款高性能主从一体蓝牙串口模块,说白了,只是个蓝牙转串口的设备,你只要知道串口怎么编程使用,就可以了,实现了所谓的透明传输。
准备工作
- STM32H750VBT6
- IDE:Keil5
- STM32CubeMX
- VOFA+ 串口调试
二、手机蓝牙控制 STM32 单片机
- 手机通过蓝牙,向
STM32
单片机发送消息,STM32
接收到消息之后原封不动的返回给手机,也可以修改成,手机发送特定的消息,然后,STM32
单片机做出相对应的动作。比如:点亮LED、发动电机、显示波形 等等。
连接说明:
数据包格式:
三、STM32 控制程序
/* USER CODE BEGIN Includes */
#include "stdio.h"
#include "math.h"
#include "stdarg.h"
#define CONSOLEBUF_SIZE 256
/* USER CODE END Includes */
/* USER CODE BEGIN PTD */
static char Uart_buf[CONSOLEBUF_SIZE];
void PrintfDebugUart(const char *fmt, ...)
{
va_list args;
va_start(args, fmt);
int length = vsnprintf(Uart_buf, sizeof(Uart_buf) - 1, fmt, args);
va_end(args);
HAL_UART_Transmit(&huart1, (uint8_t *)&Uart_buf, length, 0xffff);
}
/* USER CODE END PTD */
/* USER CODE BEGIN PD */
uint8_t RxBuffer[4]; //接收数据包的变量
uint8_t TxBuffer[4]; //发送数据包的变量
uint8_t wave[100] = {0};
/* USER CODE END PD */
/* USER CODE BEGIN 2 */
PrintfDebugUart("wang_Test.\r\n");
for(int i=0; i<100; i++)
{
wave[i] = (sin(2 * 3.1415926 * i / 100) + 1) * 100 / 2; //虚拟数据
}
HAL_UART_Receive_IT(&huart1, RxBuffer, 4); //循环使能,不断接受
/* USER CODE END 2 */
/* USER CODE BEGIN 4 */
void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart) //中断服务函数
{
if(huart == &huart1)
{
switch(RxBuffer[1])
{
case 1:
{
HAL_GPIO_WritePin(LED_GPIO_Port,LED_Pin,GPIO_PIN_RESET);
PrintfDebugUart("LED IS OFF.\r\n");
}break;
case 2:
{
HAL_GPIO_WritePin(LED_GPIO_Port,LED_Pin,GPIO_PIN_SET);
for(uint16_t i=0; i<100; i++)
{
TxBuffer[0] = 0xA5;
TxBuffer[1] = wave[i];
TxBuffer[2] = TxBuffer[1];
TxBuffer[3] = 0x5A;
HAL_UART_Transmit(&huart1,TxBuffer,4,0xffff);
}
PrintfDebugUart("LED IS OPEN.\r\n");
}break;
case 3:
{
PrintfDebugUart("Over.\r\n");
}
default:
{
;
}
}
HAL_UART_Receive_IT(&huart1, RxBuffer, 4); //循环使能,才能不断接收
}
}
/* USER CODE END 4 */
实验结果
在手机上显示波形,且可以通过按键控制灯的亮灭: