STM32CubeIDE基础学习-HC05蓝牙模块和手机通信

STM32CubeIDE基础学习-HC05蓝牙模块和手机通信


文章目录


前言

前面的文章学习了串口通过轮询和中断的简单使用方法,现在就来用这个串口实践一下,巩固串口使用轮询的方式实现串口通信,实现手机和蓝牙串口模块通信。

STM32CubeIDE基础知识学习回顾

实验目的:

学习使用蓝牙无线串口和手机进行通信功能的使用,实现手机蓝牙调试助手发送指令给蓝牙模块从而通过给单片机串口处理,进而实现单片机控制LED的功能。


第1章 硬件连接

接线如下表所示

引脚标号 单片机 HC05蓝牙模块
1 5V VCC
2 GND GND
3 PB11 TXD
4 PB10 RXD

注意

1、单片机串口配置的波特率是多少,那么蓝牙模块的通信波特率也需要对应设置为多少才行,也就是两者的通信波特率需要保持一致才行,不然手机会显示乱码的。

2、本实验可以直接使用蓝牙模块的通信功能,不用配置相关功能及参数了,所以代码不用添加配置指令代码,直接添加串口功能代码即可。

第2章 工程配置

本实验将采用前面的LED工程作为模板,直接拷贝在上面添加串口功能配置即可。

按照标号的顺序依次配置即可,如下图所示:

串口模式选择异步通信,下面串口的参数可以随意自己设置合适的,我设置波特率为115200,8位数据位,1位停止位,无奇偶校验。

参数配置完成后如下图所示:

可以看到芯片处多了一个USART3的定义。

到此,串口3相关配置就完成了,生成工程就可以编写代码了。

第3章 代码编写

生成代码后,可以看到main文件里面多了一个串口3的初始化函数,如下图所示:

进去该函数以后,可以看到相关串口参数定义,如下图所示:

串口引脚配置如下图所示:

当检查代码没有问题以后,就可以进行功能代码的编写了。

3.1 手机指令控制LED

变量定义如下图所示:

代码片示例如下:

c 复制代码
  /* USER CODE BEGIN 1 */
	char bufcahr[] = "system is ready!";    /* 开机提示 */
	uint8_t rx_buf = 0; 
  /* USER CODE END 1 */

main函数里面编写串口轮询功能代码如下图所示:

代码片示例如下:

c 复制代码
  /* Infinite loop */
  /* USER CODE BEGIN WHILE */
  HAL_UART_Transmit(&huart3, (uint8_t *)bufcahr, sizeof(bufcahr), 1000);  /* 开机提示 */

  while (1)
  {
	  HAL_UART_Receive(&huart3, (uint8_t *)&rx_buf, sizeof(rx_buf), 1000);/* 串口接收 */

	  if (rx_buf == 'O')           /* 开灯指令 */
	  {
		  LED(0);                  /* 点亮LED */
	  }
	  else if (rx_buf == 'F')      /* 关灯指令 */
	  {
		  LED(1);                  /* 关闭LED */
	  }
	  else
	  {
		  HAL_UART_Transmit(&huart3, (uint8_t *)"please input cmd!", 17, 1000);/* 发送提示 */
	  }
    /* USER CODE END WHILE */
    /* USER CODE BEGIN 3 */
  }

在while循环外面写一个串口发送函数,用来提示正常开机并且说明串口正常,从而可以发送控制指令。

接着在while循环里面添加串口接收函数,用来接收手机发给蓝牙的指令。

下面添加if判断,如果判断接收的指令和手机发过来的一致,那么就执行里面开/关灯的功能操作,否则就执行后面的提示语句。

第4章 实验现象

编译下载代码后,等待手机蓝牙调试助手正常连接蓝牙名字后,就可以进入消息收发对话模式界面了。

按一下开发板复位按键,可以看到打印一条开机提示语句,接着就可以输入控制指令'O'或'F'了。效果如下图所示。

或者直接在按钮控制界面点击按钮控制即可,提前编辑好相关指令就行,如下图所示:

发送大写字母O就可以看到单片机的LED被点亮了,发送大写字母F就可以看到单片机的LED熄灭了。

如果要有提示,可以在LED功能代码下面添加串口发送函数提示即可。如下图所示:


总结

通过蓝牙模块实现无线通信,从而实现串口控制功能。主要手机指令发送正确基本没有什么问题的。

APP可以直接在手机应用商店搜索下载,一般搜索蓝牙调试助手就行(具体需要下载测试才行)。

相关推荐
alfiy4 分钟前
Elasticsearch学习笔记(六)使用集群令牌将新加点加入集群
笔记·学习·elasticsearch
爱学的小涛14 分钟前
【NIO基础】基于 NIO 中的组件实现对文件的操作(文件编程),FileChannel 详解
java·开发语言·笔记·后端·nio
爱学的小涛15 分钟前
【NIO基础】NIO(非阻塞 I/O)和 IO(传统 I/O)的区别,以及 NIO 的三大组件详解
java·开发语言·笔记·后端·nio
莫负初19 分钟前
Pytest 使用Pycharm右键直接运行测试脚本正常,控制台命令pytest运行收集不到用例无法正常测试 no tests ran in 0.01s
ide·pycharm·pytest
北极无雪19 分钟前
Spring源码学习:SpringMVC(4)DispatcherServlet请求入口分析
java·开发语言·后端·学习·spring
望森FPGA33 分钟前
HDLBits中文版,标准参考答案 |3.1.1 Basic Gates | 基本门电路
学习·fpga开发
JavaGPT42 分钟前
prometheus学习笔记之PromQL
笔记·学习·prometheus
害羞的白菜1 小时前
Nginx基础详解5(nginx集群、四七层的负载均衡、Jmeter工具的使用、实验验证集群的性能与单节点的性能)
linux·运维·笔记·jmeter·nginx·centos·负载均衡
纪伊路上盛名在1 小时前
如何初步部署自己的服务器,达到生信分析的及格线
linux·运维·服务器·python·学习·r语言·github
江将好...1 小时前
定时器实验(Proteus 与Keil uVision联合仿真)
单片机·嵌入式硬件