蓝牙模块STM32学习笔记:使用HC05蓝牙模块进行通信

STM32 HAL库+CubeMX串口通讯HC-05

  • 前言
  • 软件及硬件准备
  • 硬件连接
  • 蓝牙模块调试
  • CubeMX配置
  • keil软件编写
  • 实验
  • 注意事项
  • 前言

    我所使用的开发板为STM32F405RG,蓝牙模块为HC-05。本文是为自己留作笔记用,也是给大家分享一下蓝牙模块的基本使用,如有不对,还望指出。

    软件及硬件准备

    软件:
    keil5
    CubeMX
    XCOM
    硬件:
    主控板:STM32F405RG(也可以使用STM32其他型号)
    蓝牙模块:HC-05
    USB转TTL

    硬件连接

    本文只做简单使用介绍,故只需连接其中四个引脚即可
    VCC —— 5v(3.6v~6v都可,一般直接连上单片机的5v接口)
    GND —— GND
    TXD —— 连接单片机的RX
    RXD —— 连接单片机的TX
    (这里是新手最容易出错的地方,你可以把蓝牙模块和单片机看作是两个同等关系的物体,而不是从属关系,一边发送,另一边自然是接收,所以TX连RX,RX连TX)

    蓝牙模块调试

    在开始之前,如果你使用的是全新的蓝牙模块,你可以选择不对其做任何调试,将蓝牙模块按上一节的连接方式与单片机相连即可,这样你使用的就是蓝牙模块的初始化设置,比如波特率为9600
    如果你需要对蓝牙模块进行其他修改或者你已经忘记了你的蓝牙模块的设置,那么就需要用到USB转TTL来对蓝牙模块进行设置

    连接方式 与上一节中所讲的一致,只是对象从单片机换成了USB转TTL

    连接好之后,按住蓝牙模块上的按键,将USB连接到你的电脑上,插上之后松开按键

    这是为了让你的蓝牙模块进入AT指令模式,该状态下,蓝牙模块的波特率为固定值38400
    我们可以在这个模式下修改普通模式的一些设定,比如波特率、奇偶校验等
    注意,如果不按住按键,插入USB口的话,蓝牙模块的红色指示灯是快闪状态
    当进入AT模式的时候,红色指示灯为一秒一闪的状态,可通过观察指示灯来初步判断是否进入到 AT模式

    然后打开XCOM

    一定要记住勾选左下角的发送新行

    AT指令不区分大小写,下面介绍常用的AT指令:

    指令 返回 作用
    AT OK 测试指令
    AT+RESET OK 模块复位
    AT+VERSION? +VERSION:(?) OK 获得软件版本号
    AT+ORGL OK 恢复默认状态
    AT+ADDR? +ADDR:(?)OK 获得蓝牙模块地址
    AT+NAME=(?) OK 设置设备名称
    AT+NAME? +NAME:(?)OK 获得设备名称
    AT+PSWD=(?) OK 设置模块密码
    AT+PSWD? +PSWD:(?)OK 获得模块密码
    AT+UART=波特率,停止位,奇偶校验 OK 设置串口参数
    AT+UART? +UART:波特率,停止位,奇偶校验 OK 获得串口参数
    参数名称 取值
    波特率 2400、4800、9600、19200、38400、5760、115200、230400、460800、921600、1382400
    停止位 0:1位 \ 1:2位
    校验位 0:NONE \1:Odd \ 2:Even

    输入AT,测试是否进入AT模式

    返回OK,现在可以输入AT+RESET对蓝牙模块复位,或者使用其他指令对其进行修改,我个人喜欢波特率为115200所以我会修改蓝牙模块

    修改蓝牙模块的名字

    查看是否修改成功

    修改串口波特率为115200,停止位1 无校验

    检查一下是否修改成功,到这一步,蓝牙模块就算是配置好了

    CubeMX配置

    创建工程我就不多说了,直接来USART配置吧

    如图,按照刚才蓝牙模块的配置就行
    如果最后蓝牙发送的数据是乱码,可以回去检查一下你的时钟树,晶振频率是否和你的开发板一致

    CubeMX到这儿就结束了,配置好之后就可以直接创建工程了

    keil软件编写

     /* USER CODE BEGIN WHILE */
    	uint8_t RX;
    	HAL_UART_Transmit(&huart2,"ready\r\n",7,HAL_MAX_DELAY);//发送函数 串口号,发送内容,内容长度,HAL_MAX_DELAY \r\n算两个字节
      while (1)
      {
        /* USER CODE END WHILE */
    		
        /* USER CODE BEGIN 3 */
    		HAL_UART_Receive(&huart2,&RX,1,HAL_MAX_DELAY);//接收函数,放在while(1)里,让它一直接收, 串口号,存储位置,长度,HAL_MAX_DELAY
    		switch(RX){
    			case '0':HAL_UART_Transmit(&huart2,"stop\r\n",6,HAL_MAX_DELAY);break;//stop四个字节+\r\n 一共6个字节
    			case '1':HAL_UART_Transmit(&huart2,"forward\r\n",9,HAL_MAX_DELAY);break;
    			default:HAL_UART_Transmit(&huart2,"none\r\n",6,HAL_MAX_DELAY);break;
    		}
    			
      }
      /* USER CODE END 3 */
    }
    
    

    在main.c中编写上面的代码,即可实现串口通讯,如果是控制蓝牙小车,把case后面的发送函数,改为控制函数即可
    将程序烧写到开发板中,使用手上的蓝牙串口软甲,便可以和单片机实现串口通讯,以及控制小车运动

    实验

    打开手机上的蓝牙串口软件,并链接蓝牙模块

    这是我所用的蓝牙串口软件,在实验中,我发现有些商家给的软件并不好用,甚至就是因为软件问题,导致实验一直不成功


    首次连接需要点击右上角的放大镜开始搜索,然后在下方的其他设备里找到蓝牙模块,连接过一次之后就能像我图片上那样直接连接


    连接好之后可以设置按键,方便操控小车

    这里可以改成聊天界面,可以看见手机和单片机的通讯记录

    注意事项

    1. TX和RX一定是反着接的
    2. 蓝牙模块的波特率和你串口的波特率要一致
    3. 如果单片机返回的是乱码,先确认波特率是否一致,然后去看时钟树里的晶振频率是否和所用开发板的晶振频率一致
    4. 发送函数里的数据长度,要根据你的发送内容修改

    本文仅供个人学习,如有不对,还望指正,相互学习

    物联沃分享整理
    物联沃-IOTWORD物联网 » 蓝牙模块STM32学习笔记:使用HC05蓝牙模块进行通信

    发表评论