• STM32驱动HC05蓝牙串口通信模块


    前言

    时不可以苟遇,道不可以虚行。


    今天分享一下最近学习的 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 */
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    /* 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 */
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    /* USER CODE BEGIN PD */
    
    uint8_t RxBuffer[4];		//接收数据包的变量
    uint8_t TxBuffer[4];		//发送数据包的变量
    uint8_t wave[100] = {0}; 
    
    /* USER CODE END PD */
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
      /* 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 */
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    /* 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 */
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39

    实验结果

    在手机上显示波形,且可以通过按键控制灯的亮灭:

    在这里插入图片描述

  • 相关阅读:
    新版Mongodb(6.0以上)找不到mongo.exe
    Methoxy-PEG-PLGA,mPEG-PLGA是一种可生物降解的两亲性嵌段共聚物
    proxomx虚机无法启动的奇怪问题
    数据库-MySQL-基础(6)- DCL
    java计算机毕业设计科研团队管理系统源码+mysql数据库+系统+lw文档+部署
    SEUSS:Skip Redundant Paths to Make Serverless Fast 阅读报告
    计算机毕业设计 SSM+Vue旅游信息平台系统 景区旅游系统 旅游咨询信息系统 旅游网址管理系统Java Vue MySQL数据库 远程调试 代码讲解
    溅射生长的铜和钨薄膜的应力调整
    MySQL事务
    细胞膜修饰两亲性接枝聚合物/荧光探针/荧光染料/水凝胶/仿生纳米颗粒(ICNPs)的研究与制备
  • 原文地址:https://blog.csdn.net/WandZ123/article/details/125982006