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只能做從機不能做主機。





結語

那麼以上就是本篇文章的所有內容了。
本文如果有什麼不對的或者需要改進的地方歡迎指出。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章