HC-04蓝牙模块与STM32通信_微光feng的博客-程序员ITS304_hc04蓝牙模块

技术标签: 串口通信  stm32  蓝牙  嵌入式  单片机  


前言

之前写了一篇文章叫蓝牙模块选型及基础知识介绍,当中提到了HC-04这款蓝牙模块。蓝牙模块单纯用AT指令并没有什么实际的意义,本文将用代码展示HC-04如何与STM32通信。
如果你不了解蓝牙以及不明白怎么选型可以先阅读蓝牙模块选型及基础知识介绍这篇文章。下面是文章的链接。
蓝牙模块选型及基础知识介绍


以下是本篇文章的正文内容

一、HC-04蓝牙通信程序

下面直接把代码贴上,代码使用STM32固件库V3.5

#include "hc04.h"

/**
  * @brief  串口3初始化
  * @param  bound:波特率
  * @retval 无
  */
void uart3_init(u32 bound)
{
    
	GPIO_InitTypeDef GPIO_InitStructure;
	USART_InitTypeDef USART_InitStructure;
	NVIC_InitTypeDef NVIC_InitStructure;
	 
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);
	RCC_APB1PeriphClockCmd(RCC_APB1Periph_USART3, ENABLE);
	
	//USART3_TX  
	GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10; //PB10
	GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
	GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;	//复用推挽输出
	GPIO_Init(GPIOB, &GPIO_InitStructure);
   
	//USART3_RX	  
	GPIO_InitStructure.GPIO_Pin = GPIO_Pin_11; //PB11
	GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING; //浮空输入
	GPIO_Init(GPIOB, &GPIO_InitStructure);

	//Usart3 NVIC 配置
	NVIC_InitStructure.NVIC_IRQChannel = USART3_IRQn;
	NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0; //抢占优先级
	NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1; //子优先级
	NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
	NVIC_Init(&NVIC_InitStructure);
	
	//USART 初始化设置
	USART_InitStructure.USART_BaudRate = bound; //串口波特率
	USART_InitStructure.USART_WordLength = USART_WordLength_8b; //字长为8位数据格式
	USART_InitStructure.USART_StopBits = USART_StopBits_1; //一个停止位
	USART_InitStructure.USART_Parity = USART_Parity_No; //无奇偶校验位
	USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None; //无硬件数据流控制
	USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx;	//收发模式
	USART_Init(USART3, &USART_InitStructure); //初始化串口3
	USART_ITConfig(USART3, USART_IT_RXNE, ENABLE); //开启串口接受中断
	USART_Cmd(USART3, ENABLE); //使能串口3 
}


/**
  * @brief  串口3接收中断
  * @param  无
  * @retval 无
  */
void USART3_IRQHandler(void)
{
    	
	if(USART_GetITStatus(USART3, USART_IT_RXNE) != RESET) //接收到数据
	{
    
		static int uart_receive=0; //蓝牙接收相关变量
		uart_receive = USART_ReceiveData(USART3); 

		switch (uart_receive)
		{
    
			case  '1': //如果接收到'1'
			    /*这里写相关应用*/		 
				break;
			
			case  '2': //如果接收到'2'
				/*这里写相关应用*/				
				break;		
			 
			default:
				/*这里写相关应用*/
				 break;
		 }
	}		
} 

如代码所示,与蓝牙模块通信只是简单的串口通信。代码可以实现字符的接收。可以自行添加字符的发送,也是使用串口发送字符就可以了。程序使用USART3,可自行修改成其他的串口。

头文件也非常简单。

#ifndef __HC04_H
#define __HC04_H

#include "stm32f10x.h"

  	
void uart3_init(u32 bound);

#endif /*__HC04_H*/

main函数中添加一下头文件并设置波特率就可以使用了。

uart3_init(9600);

二、注意事项

1.如果只实现简单的接收和发送,只连接VCC、GND、TXD、RXD就可以了。
2.模块与单片机连接时注意TXD接单片机RXD,RXD接单片机TXD。看单片机的原理图,按照原理图来接,不要单纯看丝印,丝印可能是反过来的。
3.蓝牙其他配置可通过AT指令来更改。
4.波特率默认9600。
5.ios要通过蓝牙助手或者小程序来连接。
6.HC-04只能做从机不能做主机。


结语

那么以上就是本篇文章的所有内容了。
本文如果有什么不对的或者需要改进的地方欢迎指出。

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/qq_46554815/article/details/113408773

智能推荐

IDEA报错:log4j:WARN No appenders could be found for logger (org.mybatis.generator.internal.db.Databas)_cici未完成的拼图的博客-程序员ITS304

报错信息:log4j:WARN No appenders could be found for logger (org.mybatis.generator.internal.db.DatabaseIntrospector).log4j:WARN Please initialize the log4j system properly.log4j:WARN See http://logging...

Vue 模板是如何编译的_前端同学的博客-程序员ITS304_vue模板编译

认识模板编译我们知道 <template></template> 这个是模板,不是真实的 HTML,浏览器是不认识模板的,所以我们需要把它编译成浏览器认识的原生的 HTML这一块的主要流程就是提取出模板中的原生 HTML 和非原生 HTML,比如绑定的属性、事件、指令等等经过一些处理生成 render 函数render 函数再将模板内容生成对应的 vnode再经过 patch 过程( Diff )得到要渲染到视图中的 vnode最后根据 vnode 创建真实的 DOM

sota结果是什么意思_只有达到SOTA的方法才能发文章吗_weixin_39743369的博客-程序员ITS304

最近关注了一个问题:只有达到 state of the art 精度的方法才能发文章吗?得赞同最多的回答分享了ICML审稿人的话,说的非常好:The academic is not an army race. It does not really matter how fancy the model is. It does not really matter whether the model c...

浙江工商大学和杭电计算机哪个好,浙江工业大学、杭电、浙江理工大学、浙江工商大学哪所值得报考?..._Clarlie的博客-程序员ITS304

有人问,浙江工业大学、杭州电子科技大学、浙江工商大学和浙江理工大学,哪个学校更值得选择?这4所大学都是浙江省的普通高校。不过,这几所大学的实力并不太弱,也许要好于部分211大学。原因是,浙江的高等教育跟它的教育强省地位不符合。浙江只有浙大一所985兼211大学。在双一流名单里,也只有3所学校上榜,除了浙大,还有宁波大学和中国美术学院。中国美院实力很强,但属于艺术类学校,对大部分考生不适合。综合性院...

[SPI]SPI协议详解_weixin_30539625的博客-程序员ITS304

转自:https://my.oschina.net/freeblues/blog/674001.SPI协议简介1.1.SPI协议概括  SPI,是英语Serial Peripheral interface的缩写,顾名思义就是串行外围设备接口。是Motorola首先在其MC68HCXX系列处理器上定义的。SPI接口主要应用在 EEPROM,FLASH,实时时钟,AD转换器,还有数字信...

JDK、JRE和JVM之间的关系_Sun-yz的博客-程序员ITS304_jdk jre jvm三者之间的关系

作为一个Java开发者,只会用Java,却不知什么是JDK、JRE和JVM是什么,以及他们之间有什么联系。本文总结了JDK,JRE,JVM三者的关系与区别。JDK、JRE和JVM之间的关系一、JDK二、JRE三、JVM四、三者的联系五、三者的区别六、总结一、JDKJDK是Java开发工具包,其中包括编译工具(javac.exe)打包工具(jar.exe)等,也包括JRE。在JDK的安装目录下有一个jre目录,里面有两个文件夹bin和lib,在这里可以认为bin里的就是jvm,lib中则是jvm工.

随便推点

SpringBoot接口返回图片_前端的哭的博客-程序员ITS304_springboot 返回图片

使用 ResponseEntity 返回结果,设置HttpHeader中的content-type,如:image/[email protected](method = RequestMethod.GET)public ResponseEntity getFile(@RequestParam long id) { Result result = fileService.getFile(id); if (result.getCode() == 1) { MediaTy..

Stata:聚类标准误的纠结_arlionn的博客-程序员ITS304_聚类标准误

全文阅读:Stata:聚类标准误的纠结| 连享会主页目录1.背景介绍 1.1 聚类还是不聚类,这是一个问题 1.2 如果本应该聚类,但没有聚类会怎样 2.实操准备 2.1 模拟设置 2.2 主要程序 3. 主要结果 3.1 不同情况下的结果对比 3.2 基本结论 4.参考资料 5. 相关推文 本文主要编译自下文:Source:To cluster or not to cluster 1.背景介绍1.1 聚类还是不聚类,这是一个问题.

【Unity3d】用RenderTexture实现粘液拖尾_新媒体的博客-程序员ITS304_unity 粘液

利用Render Texture可以模拟实现影子,同样的使用Render Texture也可以实现虫子等物体经过时在其他物体上留下的粘液痕迹效果(别问我为什么要做这么恶心的东西,罪恶之源是teamlab,模仿的这个团队做的一个效果)。首先在物体正上方新建一个摄像机负责观察物体截取RenderTexture,这里使用了之前讲过的透明窗体的脚本将物体以外的画面颜色抠掉。使用方法见【Unity3d】窗体透

Eclipse下NDK开发与调试_dj0379的博客-程序员ITS304

Eclipse下NDK开发一、关于NDK:NDK全称:Native Development Kit。 1、NDK是一系列工具的集合。 NDK提供了一系列的工具,帮助开发者快速开发C(或C++)的动态库,并能自动将so和Java应用一起打包成apk。这些工具对开发者的帮助是巨大的。 NDK集成了交叉编译器,并提供了相应的mk文件隔离CPU、平台、ABI等差异,开发人员只需要简

路由器ping自身接口ping不通的解决过程_weixin_33713707的博客-程序员ITS304

这是我解决在一次实验时,解决路由器ping不通自身接口的过程。 转载于:https://blog.51cto.com/hutiansheng/232537

2021-07-15_sinat_29805979的博客-程序员ITS304

PYQT的使用:一、PYQT的环境搭建:系统环境:centos7开发环境:PYQT5.6学习时间:提示:这里可以添加计划学习的时间例如:1、 周一至周五晚上 7 点—晚上9点2、 周六上午 9 点-上午 11 点3、 周日下午 3 点-下午 6 点学习产出:提示:这里统计学习计划的总量例如:1、 技术笔记 2 遍2、CSDN 技术博客 3 篇3、 学习的 vlog 视频 1 个...