日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

HC-05蓝牙模块遇到的问题与解决方法及实现和手机通信

發布時間:2024/3/13 编程问答 73 豆豆
生活随笔 收集整理的這篇文章主要介紹了 HC-05蓝牙模块遇到的问题与解决方法及实现和手机通信 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

文章目錄

    • 1、藍牙模塊的調試——解決無法與設置AT命令的問題
      • 1)問題1:沒有搜索到串口
          • 方法1:網上下載驅動
          • 方法2:自己更新驅動
      • 2)問題2:串口打開失敗--PL2303HXA自2012已停產,請聯系供貨商
          • 解決方法
          • 串口測試
      • 3)藍牙模塊的調試
      • 4)AT命令
    • 2、手機與藍牙模塊之間的傳輸——解決無法連接的問題
      • 1)設想1:手機的問題
      • 2)設想2:藍牙模塊的配置問題
      • 3)設想3:接線的問題
      • 4)設想4:串口調試助手的問題
    • 3、手機藍牙控制STM8單片機
      • 參考代碼
      • 可能會出現的問題

1、藍牙模塊的調試——解決無法與設置AT命令的問題

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

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

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

1)問題1:沒有搜索到串口

首先我們需要嘗試設置一下AT指令,但是連接串口的時候,你可能會遇到一下的問題:沒有搜索到串口,但在確保正確連線的情況下,已經正確的上電,但是沒有搜索的串口的原因,可能是沒有安裝驅動

方法1:網上下載驅動

在網上找了一個驅動,然后進行安裝再次嘗試


方法2:自己更新驅動



驅動安裝完成后需要重啟

  • 對比

安裝驅動之前

安裝驅動之后

2)問題2:串口打開失敗–PL2303HXA自2012已停產,請聯系供貨商

成功安裝了驅動之后又出現了一個問題,可以看到串口是可以被識別出來的,但打開失敗,無法正常的使用

還是失敗了,現在要解決停產的這個問題—“PL2303HXA自2012已停產,請聯系供貨商”

解決方法

參考鏈接
解決方法如下:
鏈接:https://pan.baidu.com/s/1jw1nsLGd23CagQ_dbkqu0w
提取碼:vc0c
在這里下載驅動并解壓

然后安裝驅動



然后右鍵點擊更新驅動程序




然后點擊下一步


完成

串口測試

打開串口進行測試一下

可以正常的配對,接下來,繼續進行藍牙模塊的調試

3)藍牙模塊的調試

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

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

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

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

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

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

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

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

4)AT命令

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

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

對于AT指令,有幾點注意:

  • AT+NAME?:獲得設備名稱,這個AT指令有很大可能性是沒有返回的,因為我也看到了很多的例子……,但是其他的指令都是沒有問題的,直接設置設備名稱就行了;
  • AT+UART?:獲得串口參數,串口的參數一共有三個,波特率、停止位、檢驗位。其取值如下:


其默認值為:9600,0,0。

設置藍牙參數

查看設置結果,設置成功

具體的AT指令集科研查看數據手冊,需要的可以私信或者評論一下

2、手機與藍牙模塊之間的傳輸——解決無法連接的問題

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

此時手機打開藍牙串口調試應用,用其來連接藍牙模塊。

正常的情況下,先在手機進行配對,然后在藍牙串口調試應用直接輸入字符串,電腦的串口上就可以成功的接受到了。

但是我在測試的時候,可以這次配對上,但是沒法正常連接

1)設想1:手機的問題

藍牙可以配對,但無法連接

嘗試了一下用手機和電腦和其他手機連接,發現均不可以
而使用另外一臺的華為手機則可以成功的實現與電腦進行配對。(小米手機配對失敗,而華為手機配對成功)

可見是我小米手機的藍牙配對問題。

隨后我就用了華為的那臺手機進行測試,竟然發現華為的手機也無法與藍牙模塊進行配對,得出了一個結論,那就是和手機無關,應該是藍牙模塊需要一些其他設置被搜尋到。

2)設想2:藍牙模塊的配置問題

查資料,發現,藍牙模塊需要被設置為從機才可以被查找,隨后進行了一番嘗試,首先去查AT指令集(正點原子有提供)

編寫AT指令進行設置,ok表明設置成功。

查詢,確實設置為從模式

但是結果還是失敗了。

這就表明,我設置的藍牙模式是沒有錯誤的1,應該是其他的問題

3)設想3:接線的問題

對于這個問題,我覺得是不可能的,因為我可以正常的配置AT指令

4)設想4:串口調試助手的問題

不斷的更換藍牙調試助手,名字就叫 藍牙串口,然后就可以成功連接上了

可以實現手機與串口段的信息發送

最后,成功解決,問題就出在串口調試助手上,得出的結論的就是,如果可以正常的配對,但無法正常連接的話,那就換你的手機或者是串口調試助手,因為藍牙的兼容問題使得配對比較麻煩。

如果需要手機的串口調試助手的apk可以私信或者評論一下

3、手機藍牙控制STM8單片機

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

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

原理就是:手機通過藍牙傳輸到HC-05上,再通過串口通信和STM8通信;而之前一般都是電腦上通過USB線轉串口的方式,通過串口和STM8通信。本質上沒有區別的。
這個時候就應該更加深刻地體會到了本文開篇的一句話:說白了,只是個藍牙轉串口的設備,你只要知道串口怎么編程使用,就可以了,實現了所謂的透明傳輸。藍牙的相關一切都被封裝起來了,都不需要接觸到。

知道了只是簡單的串口通信,那么代碼就很容易實現了

手機app的控制界面設計如下:

參考代碼

/****************************************************************/ //接收單字符函數UART1_ReceiveByte(),無形參data,有返回值,返回接收到的數據 //采用查詢的方法實現 /****************************************************************/ u8 UART1_ReceiveByte(void) {// printf("進入UART1_ReceiveByte函數...\r\n");u8 UART1_RX_BUF; //定義接收數據暫存變量while (!(UART1_SR & 0x20)); //等待接收標志UART1_SR&=0xDF; //清零接收標志位RXNEUART1_RX_BUF=UART1_DR; //取回接收到的數據// printf("取回接收到的數據\r\n");return UART1_RX_BUF; //返回暫存變量中的數據給調用者 }/****************************************************************/ //初始化函數UART1_Init(),無形參和返回值 /****************************************************************/ void UART1_Init(void) {//1.設定通信數據位數,此處設定為8位數據位,無校驗位UART1_CR1 = 0x00;//**************************************************//展開UART1_CR1賦值二進制數值為:0000 0000 //含義:R8=0; 接收數據位不存在第9位// T8=0; 發送數據位不存在第9位// UARTD=0; 使能UART功能// M=0; 一個起始位,8個數據位,n個停止位// n取決于UART1_CR3中的STOP[1:0]位// WAKE=0; UART被空閑總線喚醒// PCEN=0: (UART模式)奇偶校驗控制被禁止// PS=0; 偶校驗(校驗功能未啟用)// PIEN=0; 校驗中斷被禁止//*************************************************//2.設定通信停止位位數,此處設定為1位停止位UART1_CR3 = 0x00;//**************************************************//展開UART1_CR3賦值二進制數值為:0000 0000 //含義:保留位=0;必須保持清零// LINEN=0;LIN模式被禁止// STOP=00;配置為“00”,1個停止位// CLKEN、CPOL、CPHA、LBCL這幾位在UART3上不存在//*************************************************//3.配置通信波特率參數,此處配置為9600bps(16MHz頻率下)UART1_BRR2 = 0x03;UART1_BRR1 = 0x68;//4.使能發送和接收功能 // UART1_CR2 = 0x0C;UART1_CR2 = 0x2C;//**************************************************//展開UART1_CR2賦值二進制數值為:0010 1100 //含義:TIEN=0;發送中斷被禁止// TCIEN=0;發送中斷完成被禁止// RIEN=1;接收中斷開啟// ILIEN=0;IDLE中斷被禁止// TEN=1;發送功能使能// REN=1;接收功能使能// RWU=0;(UART模式)正常工作模式// PIEN=0;未發送斷開字符//************************************************* }/****************************************************************/ //發送字符重定向函數putchar(),有形參ch,有返回值 /****************************************************************/ int putchar(int ch) { UART3_SendByte((u8)ch);// UART1_SendByte((u8)ch);//將Printf內容發往串口return (ch); }//接收中斷服務函數 //**************************中斷函數區域************************** #pragma vector = UART1_R_RXNE_vector //0x14 __interrupt void UART1_RX_IRQHandler(void) { if(UART1_SR&0x20){ //若UART1確實接收到了數據UART1_SR&=0xDF; //清零接收標志位RXNE}cmd=UART1_DR; //取回串口數據// printf("進入中斷服務函數...\r\n"); // cmd = UART1_ReceiveString(1);switch(cmd) //判斷串口接收命令值{case 'a':Motor_TurnLeft(); //左轉break;case 'd':Motor_TurnRight(); //右轉break;case 'w':Motor_GoForward(); //直走break;case 's': Motor_GetBack(); //后退break;case 'p': Motor_BeParking(); //停車break;case 'n': //功能二:實現跟隨模式 //printf("模式二:實現跟隨模式 \r\n");LED1 = 1; //熄燈Motor_BeParking();InfraredFollow_Module();break;case 'b': //功能三:實現避障模式//printf("模式三:實現避障模式 \r\n");LED1 = 1; //熄燈Motor_BeParking();InfraredAvoidance_Module();breakdefault:printf("【ERROR】,沒有此功能\r\n");break;}}

關于中斷向量號的查詢可以查看這里:IAR中斷向量表與中斷服務函數的編寫

可能會出現的問題

在通過手機設置一些按鍵,在電腦的串口調試助手上可能會看到中斷函數會調用兩次,重復的執行

但是我又換了一個串口調試助手就又沒有問題了…真是頭疼

參考鏈接:【常用模塊】HC-05藍牙串口通信模塊使用詳解(實例:手機藍牙控制STM32單片機)

總結

以上是生活随笔為你收集整理的HC-05蓝牙模块遇到的问题与解决方法及实现和手机通信的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。