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

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

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

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

文章目錄

    • 1、藍(lán)牙模塊的調(diào)試——解決無法與設(shè)置AT命令的問題
      • 1)問題1:沒有搜索到串口
          • 方法1:網(wǎng)上下載驅(qū)動(dòng)
          • 方法2:自己更新驅(qū)動(dòng)
      • 2)問題2:串口打開失敗--PL2303HXA自2012已停產(chǎn),請聯(lián)系供貨商
          • 解決方法
          • 串口測試
      • 3)藍(lán)牙模塊的調(diào)試
      • 4)AT命令
    • 2、手機(jī)與藍(lán)牙模塊之間的傳輸——解決無法連接的問題
      • 1)設(shè)想1:手機(jī)的問題
      • 2)設(shè)想2:藍(lán)牙模塊的配置問題
      • 3)設(shè)想3:接線的問題
      • 4)設(shè)想4:串口調(diào)試助手的問題
    • 3、手機(jī)藍(lán)牙控制STM8單片機(jī)
      • 參考代碼
      • 可能會(huì)出現(xiàn)的問題

1、藍(lán)牙模塊的調(diào)試——解決無法與設(shè)置AT命令的問題

USB轉(zhuǎn)TTL模塊與HC-05藍(lán)牙模塊的接線:

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

這個(gè)時(shí)候就要將轉(zhuǎn)換模塊連接到電腦上,然后利用串口調(diào)試助手進(jìn)行藍(lán)牙模塊的調(diào)試。

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

首先我們需要嘗試設(shè)置一下AT指令,但是連接串口的時(shí)候,你可能會(huì)遇到一下的問題:沒有搜索到串口,但在確保正確連線的情況下,已經(jīng)正確的上電,但是沒有搜索的串口的原因,可能是沒有安裝驅(qū)動(dòng)

方法1:網(wǎng)上下載驅(qū)動(dòng)

在網(wǎng)上找了一個(gè)驅(qū)動(dòng),然后進(jìn)行安裝再次嘗試


方法2:自己更新驅(qū)動(dòng)



驅(qū)動(dòng)安裝完成后需要重啟

  • 對比

安裝驅(qū)動(dòng)之前

安裝驅(qū)動(dòng)之后

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

成功安裝了驅(qū)動(dòng)之后又出現(xiàn)了一個(gè)問題,可以看到串口是可以被識別出來的,但打開失敗,無法正常的使用

還是失敗了,現(xiàn)在要解決停產(chǎn)的這個(gè)問題—“PL2303HXA自2012已停產(chǎn),請聯(lián)系供貨商”

解決方法

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

然后安裝驅(qū)動(dòng)



然后右鍵點(diǎn)擊更新驅(qū)動(dòng)程序




然后點(diǎn)擊下一步


完成

串口測試

打開串口進(jìn)行測試一下

可以正常的配對,接下來,繼續(xù)進(jìn)行藍(lán)牙模塊的調(diào)試

3)藍(lán)牙模塊的調(diào)試

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

  • 當(dāng)模塊處于自動(dòng)連接工作模式時(shí),將自動(dòng)根據(jù)事先設(shè)定的方式連接的數(shù)據(jù)傳輸;
  • 當(dāng)模塊處于命令響應(yīng)工作模式時(shí)能執(zhí)行AT命令,用戶可向模塊發(fā)送各種AT 指令,為模塊設(shè)定控制參數(shù)或發(fā)布控制命令。
    怎么進(jìn)入命令響應(yīng)工作模式?

進(jìn)入命令響應(yīng)工作模式有兩種方法:

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

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

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

怎么區(qū)分進(jìn)了命令響應(yīng)工作模式呢?

在藍(lán)牙模塊上有燈,當(dāng)燈快閃的時(shí)候,就是自動(dòng)連接工作模式;當(dāng)燈慢閃的時(shí)候,就是命令響應(yīng)工作模式,當(dāng)燈慢閃兩下的時(shí)候就是與手機(jī)正常連接模式。

4)AT命令

進(jìn)入到命令響應(yīng)工作模式之后,就可以使用串口調(diào)試助手進(jìn)行藍(lán)牙調(diào)試了。

首先有一點(diǎn),AT指令不區(qū)分大小寫,均以回車、換行結(jié)尾。下面介紹常用的AT指令:

對于AT指令,有幾點(diǎn)注意:

  • AT+NAME?:獲得設(shè)備名稱,這個(gè)AT指令有很大可能性是沒有返回的,因?yàn)槲乙部吹搅撕芏嗟睦印?#xff0c;但是其他的指令都是沒有問題的,直接設(shè)置設(shè)備名稱就行了;
  • AT+UART?:獲得串口參數(shù),串口的參數(shù)一共有三個(gè),波特率、停止位、檢驗(yàn)位。其取值如下:


其默認(rèn)值為:9600,0,0。

設(shè)置藍(lán)牙參數(shù)

查看設(shè)置結(jié)果,設(shè)置成功

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

2、手機(jī)與藍(lán)牙模塊之間的傳輸——解決無法連接的問題

直接將藍(lán)牙模塊與轉(zhuǎn)換模塊連接,再講其連接到電腦上,藍(lán)牙模塊直接進(jìn)入自動(dòng)連接工作模式。

此時(shí)手機(jī)打開藍(lán)牙串口調(diào)試應(yīng)用,用其來連接藍(lán)牙模塊。

正常的情況下,先在手機(jī)進(jìn)行配對,然后在藍(lán)牙串口調(diào)試應(yīng)用直接輸入字符串,電腦的串口上就可以成功的接受到了。

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

1)設(shè)想1:手機(jī)的問題

藍(lán)牙可以配對,但無法連接

嘗試了一下用手機(jī)和電腦和其他手機(jī)連接,發(fā)現(xiàn)均不可以
而使用另外一臺(tái)的華為手機(jī)則可以成功的實(shí)現(xiàn)與電腦進(jìn)行配對。(小米手機(jī)配對失敗,而華為手機(jī)配對成功)

可見是我小米手機(jī)的藍(lán)牙配對問題。

隨后我就用了華為的那臺(tái)手機(jī)進(jìn)行測試,竟然發(fā)現(xiàn)華為的手機(jī)也無法與藍(lán)牙模塊進(jìn)行配對,得出了一個(gè)結(jié)論,那就是和手機(jī)無關(guān),應(yīng)該是藍(lán)牙模塊需要一些其他設(shè)置被搜尋到。

2)設(shè)想2:藍(lán)牙模塊的配置問題

查資料,發(fā)現(xiàn),藍(lán)牙模塊需要被設(shè)置為從機(jī)才可以被查找,隨后進(jìn)行了一番嘗試,首先去查AT指令集(正點(diǎn)原子有提供)

編寫AT指令進(jìn)行設(shè)置,ok表明設(shè)置成功。

查詢,確實(shí)設(shè)置為從模式

但是結(jié)果還是失敗了。

這就表明,我設(shè)置的藍(lán)牙模式是沒有錯(cuò)誤的1,應(yīng)該是其他的問題

3)設(shè)想3:接線的問題

對于這個(gè)問題,我覺得是不可能的,因?yàn)槲铱梢哉5呐渲肁T指令

4)設(shè)想4:串口調(diào)試助手的問題

不斷的更換藍(lán)牙調(diào)試助手,名字就叫 藍(lán)牙串口,然后就可以成功連接上了

可以實(shí)現(xiàn)手機(jī)與串口段的信息發(fā)送

最后,成功解決,問題就出在串口調(diào)試助手上,得出的結(jié)論的就是,如果可以正常的配對,但無法正常連接的話,那就換你的手機(jī)或者是串口調(diào)試助手,因?yàn)樗{(lán)牙的兼容問題使得配對比較麻煩。

如果需要手機(jī)的串口調(diào)試助手的apk可以私信或者評論一下

3、手機(jī)藍(lán)牙控制STM8單片機(jī)

之前的兩個(gè)例子都是相比較而言比較簡單的,這個(gè)例子將會(huì)涉及到程序的內(nèi)容了。

實(shí)現(xiàn)功能:手機(jī)通過藍(lán)牙,向STM8單片機(jī)發(fā)送消息,STM8接收到消息之后原封不動(dòng)的返回給手機(jī)。當(dāng)然如果掌握了這個(gè)例子,也可以修改成,手機(jī)發(fā)送特定的消息,然后,STM8單片機(jī)做出相對應(yīng)的動(dòng)作。比如:點(diǎn)亮LED等、發(fā)動(dòng)電機(jī)等等。

原理就是:手機(jī)通過藍(lán)牙傳輸?shù)紿C-05上,再通過串口通信和STM8通信;而之前一般都是電腦上通過USB線轉(zhuǎn)串口的方式,通過串口和STM8通信。本質(zhì)上沒有區(qū)別的。
這個(gè)時(shí)候就應(yīng)該更加深刻地體會(huì)到了本文開篇的一句話:說白了,只是個(gè)藍(lán)牙轉(zhuǎn)串口的設(shè)備,你只要知道串口怎么編程使用,就可以了,實(shí)現(xiàn)了所謂的透明傳輸。藍(lán)牙的相關(guān)一切都被封裝起來了,都不需要接觸到。

知道了只是簡單的串口通信,那么代碼就很容易實(shí)現(xiàn)了

手機(jī)app的控制界面設(shè)計(jì)如下:

參考代碼

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

關(guān)于中斷向量號的查詢可以查看這里:IAR中斷向量表與中斷服務(wù)函數(shù)的編寫

可能會(huì)出現(xiàn)的問題

在通過手機(jī)設(shè)置一些按鍵,在電腦的串口調(diào)試助手上可能會(huì)看到中斷函數(shù)會(huì)調(diào)用兩次,重復(fù)的執(zhí)行

但是我又換了一個(gè)串口調(diào)試助手就又沒有問題了…真是頭疼

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

總結(jié)

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

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 中文字字幕第183页 欧美特级一级片 | 曰本无码人妻丰满熟妇啪啪 | 91黄色免费网站 | 欧美粗大猛烈 | 乌克兰黄色片 | 男男play呻吟动漫网站 | 久久五月综合 | 特黄特色大片免费视频大全 | 99一级片 | 色女仆影院 | 黄色高清视频在线观看 | 久久五月激情 | 黄瓜视频色版 | 狠狠激情| 激情五月婷婷 | 91精品人妻一区二区三区四区 | 国产精品日韩欧美一区二区三区 | av高清 | 久久波多野 | 久久久久久久久成人 | 美日韩精品视频 | 欧美日韩一区二区区别是什么 | 朝鲜黄色片 | 久久亚洲综合国产精品99麻豆精品福利 | 国产女人叫床高潮大片免费 | 永久免费看片在线播放 | 中文字幕精品在线观看 | 五月天丁香网 | 综合另类 | av有声小说一区二区三区 | 亚洲激情免费 | 国产一级片免费在线观看 | 亚洲一区高清 | 国产理论 | 日韩欧美高清在线观看 | 国产精品第3页 | 少妇又色又爽又高潮极品 | xx久久| 一级黄色片大全 | 91叼嘿视频 | 亚洲免费视 | 爱久久视频 | 雪花飘电影在线观看免费高清 | 日韩高清在线观看一区 | 欧美一级性视频 | 久久国产精品免费 | 91在线观看免费高清完整版在线观看 | 精品网站999 | 黄页在线观看 | 国产免费小视频 | 有码av在线 | 骑骑上司妻电影 | 亚洲天堂二区 | 亚州精品国产精品乱码不99按摩 | 精品无码av在线 | 久久久久久久久久久久久女国产乱 | 欧美日韩在线中文字幕 | 精品久久久久久久久久久aⅴ | 黄色片在哪里看 | 丰满熟妇人妻中文字幕 | www色婷婷 | 亚洲AV无码一区二区伊人久久 | 关之琳三级全黄做爰在线观看 | www免费黄色| 天天夜碰日日摸日日澡性色av | 艳妇av| 天堂av中文在线观看 | 婷婷综合视频 | 青青草伊人 | 99久久精品一区二区成人 | 8x国产一区二区三区精品推荐 | 水牛影视av一区二区免费 | 337p粉嫩日本欧洲亚洲大胆 | 日韩青青草 | 色视频线观看在线播放 | www麻豆 | 国产妇女乱一性一交 | 精品一区二区日韩 | 亚洲三级黄色片 | 尹人综合在线 | 天堂久久精品忘忧草 | 亚洲福利一区二区 | 欧美456| 国产欧美日韩高清 | 老鸭窝成人 | 欧美日韩免费一区二区三区 | 国产suv精品一区 | 国产精品久久久久久妇女 | 2020国产精品 | 九九视频网 | 久久一区二区三区视频 | 在线观看特色大片免费网站 | 久久情趣视频 | 日韩裸体视频 | 日韩成人av一区 | 精品免费一区二区三区 | 97看片吧| 亚洲国产精品无码久久 | 免费视频网站在线观看入口 |