HC-05藍牙模塊,主從一體機原理總結


原理就是:手機通過藍牙傳輸到HC-05上,再通過串口通信和STM32通信;而之前一般都是電腦上通過USB線轉串口的方式,通過串口和STM32通信。本質上沒有區別的。

這個時候就應該更加深刻地體會到了本文開篇的一句話:說白了,只是個藍牙轉串口的設備,你只要知道串口怎么編程使用,就可以了,實現了所謂的透明傳輸。藍牙的相關一切都被封裝起來了,都不需要接觸到。

藍牙模塊的調試

准備工作

USB轉TTL模塊與HC-05藍牙模塊的接線:

兩模塊共地,兩模塊共VCC(VCC取5V);藍牙模塊的RX接轉換模塊的TX,藍牙模塊的TX接轉換模塊的RX。如下圖所示:

這個時候就要將轉換模塊連接到電腦上,然后利用串口調試助手進行藍牙模塊的調試。

附可能會用到的驅動:鏈接:https://pan.baidu.com/s/1bpYLfCr 密碼:yabv

藍牙模塊的調試

HC-05藍牙串口通訊模塊具有兩種工作模式:命令響應工作模式(AT)和自動連接工作模式。在自動連接工作模式下模塊又可分為主(Master)、從(Slave)和回環(Loopback)三種工作角色。

  • 當模塊處於自動連接工作模式時,將自動根據事先設定的方式連接的數據傳輸;
  • 當模塊處於命令響應工作模式時能執行AT命令,用戶可向模塊發送各種AT 指令,為模塊設定控制參數或發布控制命令。

怎么進入命令響應工作模式?

進入命令響應工作模式有兩種方法:

 

  • 模塊上電,未配對情況下就是AT模式,波特率為模塊本身的波特率,默認:9600,發送一次AT指令時需要置高一次PIO11;
  • PIO11 置高電平后,再給模塊上電,此時模塊進入AT 模式,波特率固定為:38400,可以直接發送AT指令。

什么叫做置高一次PIO11?

在藍牙模塊中有一個小按鍵,按一下就置高一次PIO11。也就是說,第一種方法需要每發送一次AT指令按一次;而第二種方式是長按的過程中上電,之后就無需再管了,直接發送AT命令即可。

需要注意一下,兩種進入命令響應工作模式的方式使用的波特率是不一樣的,建議使用第二種方式。

怎么區分進了命令響應工作模式呢?

在藍牙模塊上有燈,當燈快閃的時候,就是自動連接工作模式;當燈慢閃的時候,就是命令響應工作模式。

AT命令

進入到命令響應工作模式之后,就可以使用串口調試助手進行藍牙調試了。

首先有一點,AT指令不區分大小寫,均以回車、換行結尾。下面介紹常用的AT指令:

手機與藍牙模塊之間的傳輸(快速測試)

直接將藍牙模塊與轉換模塊連接,再講其連接到電腦上,藍牙模塊直接進入自動連接工作模式。

手機藍牙控制STM32單片機

之前的兩個例子都是相比較而言比較簡單的,這個例子將會涉及到程序的內容了。

實現功能:手機通過藍牙,向STM32單片機發送消息,STM32接收到消息之后原封不動的返回給手機。當然如果掌握了這個例子,也可以修改成,手機發送特定的消息,然后,STM32單片機做出相對應的動作。比如:點亮LED等、發動電機等等。

連接說明

 

 

使用USART1進行試驗,也就是說STM32選取PA9、PA10來和HC-05進行連接。同時手機通過藍牙來和HC-05進行連接。

原理就是:手機通過藍牙傳輸到HC-05上,再通過串口通信和STM32通信;而之前一般都是電腦上通過USB線轉串口的方式,通過串口和STM32通信。本質上沒有區別的。

這個時候就應該更加深刻地體會到了本文開篇的一句話:說白了,只是個藍牙轉串口的設備,你只要知道串口怎么編程使用,就可以了,實現了所謂的透明傳輸。藍牙的相關一切都被封裝起來了,都不需要接觸到。

STM32控制程序

  1 #include "stm32f10x.h"
  2  
  3  
  4 void My_USART1_Init(void)
  5  
  6 {
  7  
  8 GPIO_InitTypeDef GPIO_InitStrue;
  9  
 10 USART_InitTypeDef USART_InitStrue;
 11  
 12 NVIC_InitTypeDef NVIC_InitStrue;
 13  
 14  
 15 RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);//GPIO端口使能
 16  
 17 RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1,ENABLE);//串口端口使能
 18  
 19  
 20 GPIO_InitStrue.GPIO_Mode=GPIO_Mode_AF_PP;
 21  
 22 GPIO_InitStrue.GPIO_Pin=GPIO_Pin_9;
 23  
 24 GPIO_InitStrue.GPIO_Speed=GPIO_Speed_10MHz;
 25  
 26 GPIO_Init(GPIOA,&GPIO_InitStrue);
 27  
 28  
 29 GPIO_InitStrue.GPIO_Mode=GPIO_Mode_IN_FLOATING;
 30  
 31 GPIO_InitStrue.GPIO_Pin=GPIO_Pin_10;
 32  
 33 GPIO_InitStrue.GPIO_Speed=GPIO_Speed_10MHz;
 34  
 35 GPIO_Init(GPIOA,&GPIO_InitStrue);
 36  
 37  
 38 USART_InitStrue.USART_BaudRate=115200;
 39  
 40 USART_InitStrue.USART_HardwareFlowControl=USART_HardwareFlowControl_None;
 41  
 42 USART_InitStrue.USART_Mode=USART_Mode_Tx|USART_Mode_Rx;
 43  
 44 USART_InitStrue.USART_Parity=USART_Parity_No;
 45  
 46 USART_InitStrue.USART_StopBits=USART_StopBits_1;
 47  
 48 USART_InitStrue.USART_WordLength=USART_WordLength_8b;
 49  
 50  
 51 USART_Init(USART1,&USART_InitStrue);
 52  
 53  
 54 USART_Cmd(USART1,ENABLE);//使能串口1
 55  
 56  
 57 USART_ITConfig(USART1,USART_IT_RXNE,ENABLE);//開啟接收中斷
 58  
 59  
 60 NVIC_InitStrue.NVIC_IRQChannel=USART1_IRQn;
 61  
 62 NVIC_InitStrue.NVIC_IRQChannelCmd=ENABLE;
 63  
 64 NVIC_InitStrue.NVIC_IRQChannelPreemptionPriority=1;
 65  
 66 NVIC_InitStrue.NVIC_IRQChannelSubPriority=1;
 67  
 68 NVIC_Init(&NVIC_InitStrue);
 69  
 70  
 71 }
 72  
 73  
 74 void USART1_IRQHandler(void)
 75  
 76 {
 77  
 78 u8 res;
 79  
 80 if(USART_GetITStatus(USART1,USART_IT_RXNE)!=RESET)
 81  
 82 {
 83  
 84 res= USART_ReceiveData(USART1);
 85  
 86 USART_SendData(USART1,res);
 87  
 88 }
 89  
 90 }
 91  
 92  
 93 int main(void)
 94  
 95 {
 96  
 97 NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);
 98  
 99 My_USART1_Init();
100  
101 while(1);
102  
103  
104 }
STM32控制程序

這段程序和【STM32】串口相關配置寄存器、庫函數(UART一般步驟)中的程序一模一樣,幾乎沒有什么改動。

區別就是,在UART實驗中,USART1是和USB轉串口模塊連接在一起的,然后與電腦上的串口調試助手進行通信;現在改成USART1是和藍牙模塊連接在一起的,然后和手機上的藍牙串口調試助手進行通信。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM