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_DELAYswitch(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. 发送函数里的数据长度,要根据你的发送内容修改

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

STM32学习笔记——HC05相关推荐

  1. STM32学习笔记——HC05蓝牙模块的配置流程

    两块HC05,现将二者分别配置为主机.从机 首先,一直按住HC05模块上的小按键,然后给其上电,直到上电完成,松开小按键.此时你会发现,模块上的指示灯1 秒亮 1 次,模块进入 AT 状态.我用USB ...

  2. stm32学习笔记----双串口同时打开时的printf()问题

    stm32学习笔记----双串口同时打开时的printf()问题 最近因为要使用串口2外接PN532芯片实现通信,另一方面,要使用串口1来将一些提示信息输出到上位机,于是重定义了printf(),使其 ...

  3. STM32学习笔记 | 引起电源和系统异常复位的原因

    关注+星标公众号,不错过精彩内容 每一块处理器都有复位的功能,不同处理器复位的类型可能有差异,引起复位的原因也可能有多种. STM32的复位功能非常强大,可通过软件.硬件和一些事件触发系统复位,而且通 ...

  4. 《STM32学习笔记》4——核心功能电路与编程(下)

    接上文,文中的图片,大多数来自视频的截图(来自洋桃电子). 欢迎大家批评指正! STM32学习笔记-专栏 文章目录 一.蜂鸣器驱动 1.蜂鸣器介绍 2.蜂鸣器电路 3.蜂鸣器程序 二. MIDI 音乐 ...

  5. 【STM32学习笔记-点亮LED灯】

    STM32学习笔记-点亮LED灯 文章目录 STM32学习笔记-点亮LED灯 一.原理图分析 二.代码分析 1.mian函数 2.led.c函数 3.led.h函数 4.函数文件整理 5.LED_In ...

  6. STM32学习笔记(四)丨TIM定时器及其应用(定时中断、内外时钟源选择)

    本篇文章包含的内容 一.TIM 定时器 1.1 TIM 定时器简介 1.2 TIM 定时器类型及其工作原理简介 1.2.1 基本定时器工作原理及其结构 1.2.2 通用定时器工作原理及其结构 1.2. ...

  7. STM32学习笔记(六)丨TIM定时器及其应用(输入捕获丨测量PWM波形的频率和占空比)

    本篇文章包含的内容 一.输入捕获 1.1 输入捕获简介 1.2 输入捕获通道的工作原理 1.3 输入捕获的主从触发模式 1.4 输入捕获和PWMI结构 二.频率的测量方法 2.1 测频法 2.2 测周 ...

  8. STM32学习笔记(15)——SPI协议

    STM32学习笔记(15)--SPI协议 一.SPI协议简介 1. 物理层 2. 协议层 (1) 通讯的开始与停止 (2)时钟极性CPOL.时钟相位CPHA 二.STM32的SPI外设 1. 通讯引脚 ...

  9. crh寄存器_牛人的STM32学习笔记(寄存器版本).doc

    牛人的STM32学习笔记(寄存器版本) 一.GPIO口的配置 STM32的DGPIO口最多可以有7组(GPIOa~GPIOg),而每一组GPIO口均有16个双向IO组成.并且没个IO口均可配置成8种模 ...

  10. STM32学习笔记(13)——模数转换ADC

    这个月一直忙于准备考试,已经考完一半科目了,偷闲写了这篇文章.因为还没考完试,估计还得咕一段时间了. STM32学习笔记(13)--模数转换ADC 第一部分:ADC功能框图 一.输入电压 二.输入通道 ...

最新文章

  1. java中strictfp关键字,java strictfp关键字用法大全详解
  2. 汇编语言第二课作业2.1
  3. 【多线程高并发】查看Java代码对应的汇编指令教程
  4. 今天第一次开通blog
  5. 现代软件工程系列 学生和老师都不容易
  6. 通过条形码扫描器攻击工控系统
  7. 楚留香服务器维护时间,2019年06月28日官方维护公告
  8. HTTP协议学习总结三(常见http响应头)
  9. 服务器主板的无线驱动,驱动天空 - 品牌主板 - 服务器主板 SERVER
  10. hdoj 5934 强连通分量+缩点 模版题(Java版)
  11. 【语言小知识】-java中将 两个int[] 型数组 整合到一起的方法
  12. Android 入门教程:安装 Android Studio
  13. WiFi技术概述:WiFi那些事
  14. 苏东坡有一句“八风吹不动,独坐紫金台“ 人生智慧
  15. 如何顺利接手一个中途的项目
  16. L1-079 天梯赛的善良 (20 分)python
  17. 立法禁食猫狗肉属本末倒置
  18. shopee海外仓如何申请及 收 费 标 准
  19. JDK8下载及安装教程之windows版、linux版
  20. 搜索大数据,不应被忽视的金矿

热门文章

  1. 鸿蒙系统只能从商城安装软件,鸿蒙系统安装不了第三方软件是为什么?鸿蒙系统怎么安装第三方app...
  2. 大一c语言餐馆叫号系统,专业体检中心排队叫号系统厂家
  3. matlab sil,丰田使用高精度发动机模型和SIL+M前置开发发动机控制系统
  4. 利用ArcGIS的计算几何批量计算线要素长度
  5. centos7下安装yasm过程
  6. python多行注释快捷键
  7. ios睡眠分析 卧床 睡眠_苹果ios14睡眠记录功能 让用户清楚的了解自己的睡眠_娱乐频道_中华网...
  8. ZTE MF971V LTE Cat6 MiFi Review
  9. Day2 | SpringBoot电商mall项目学习
  10. Linux的动态库和静态库