HC-04蓝牙模块与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只能做从机不能做主机。


结语

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

猜你喜欢

转载自blog.csdn.net/qq_46554815/article/details/113408773