作為嵌入式開發(fā)工程師,藍(lán)牙模塊怎能少呢?
藍(lán)牙模塊廣泛應(yīng)用在各種電子器件,比如手機(jī)、藍(lán)牙耳機(jī)/音箱、藍(lán)牙手環(huán)、掃地機(jī)器人,等等。大家在學(xué)嵌入式的時(shí)候,玩過的智能家居、智能小車、無人機(jī),都有藍(lán)牙模塊的應(yīng)用。
所以,藍(lán)牙模塊的學(xué)習(xí)勢(shì)在必行。
藍(lán)牙模塊的學(xué)習(xí)其實(shí)也沒大家想的那么難,只需要你玩好串口就行了,再加上會(huì)一些 AT 指令,你就可以稱得上藍(lán)牙高手了。但關(guān)于藍(lán)牙協(xié)議棧,那學(xué)起來估計(jì)沒一年半載下不來。
對(duì)于初學(xué)者來講,只需要懂得如何使用這個(gè)藍(lán)牙模塊,就已經(jīng)綽綽有余了。
1. 源碼下載及前置閱讀
本文首發(fā) 良許嵌入式網(wǎng) :https://www.lxlinux.net/e/ ,歡迎關(guān)注!
本文所涉及的源碼及安裝包如下(由于平臺(tái)限制,請(qǐng)點(diǎn)擊以下鏈接閱讀原文下載):
https://www.lxlinux.net/e/stm32/bluetooth-turorial.html
如前面所述,玩藍(lán)牙模塊就是玩串口,所以大家一定要先把串口玩好。如果你不懂得如何玩串口,可以看下面這篇文章:
STM32串口接收不定長(zhǎng)數(shù)據(jù)(接收中斷+超時(shí)判斷):https://www.lxlinux.net/e/stm32/stm32-usart-receive-data-using-rxne-time-out.html
如果你是個(gè)零基礎(chǔ)的小白,連 STM32 都沒見過,我也給你準(zhǔn)備了一個(gè)保姆級(jí)教程,手把手教你搭建好 STM32 開發(fā)環(huán)境,并教你如何下載程序,簡(jiǎn)直業(yè)界良心!
零基礎(chǔ)快速上手STM32開發(fā)(手把手保姆級(jí)教程):https://www.lxlinux.net/e/stm32/stm32-quick-start-for-beginner.html
如果你連代碼都不知道怎么燒錄到 STM32 的,可以參考下文,提供了 5 種代碼燒錄方式:
STM32下載程序的五種方法:https://www.lxlinux.net/e/stm32/five-ways-to-flash-program-to-stm32.html
2. 藍(lán)牙模塊介紹
2.1 型號(hào)介紹
現(xiàn)在市面上流行的藍(lán)牙模塊有很多,例如廣州匯承公司的藍(lán)牙模塊應(yīng)用非常的廣泛,它們公司生產(chǎn)的 HC 系列的藍(lán)牙模塊如下圖所示:
型號(hào) | 主/從機(jī) | 通信協(xié)議 | 工作頻段 | 通信距離 | 嵌入方式 | 空中速率 | 尺寸 |
---|---|---|---|---|---|---|---|
HC-02 | 從機(jī) | 藍(lán)牙2.0 / 藍(lán)牙4.0 | 2.4G | 10米 | 貼片 | 2Mbps | 26.9 * 13 * 2 mm |
HC-04 | 從機(jī) | 藍(lán)牙2.0 / 藍(lán)牙4.0 | 2.4G | 10米 | 貼片 | 60KB/s | 18.5 * 13 * 2 mm |
HC-05 | 主從機(jī)一體 | 藍(lán)牙2.0 | 2.4G | 10米 | 貼片 | 2Mbps | 27.0 * 13 * 2 mm |
HC-06 | 主從機(jī)一體 | 藍(lán)牙2.0 | 2.4G | 10米 | 貼片 | 2Mbps | 27.0 * 13 * 2 mm |
HC-08 | 主從機(jī)一體 | 藍(lán)牙4.0 | 2.4G | 80米 | 貼片 / 焊接 | 1Mbps | 26.9 * 13 * 2 mm |
HC-09 | 主從機(jī)一體 | 藍(lán)牙4.0 | 2.4G | 60米 | 貼片 / 焊接 | 3KB/s | 18.5 * 13 * 2 mm |
HC-42 | 主從機(jī)一體 | 藍(lán)牙5.0 | 2.4G | 40米 | 貼片 / 焊接 | 1Mbps / 2Mbps | 26.9 * 13 * 2 mm |
這些藍(lán)牙模塊,在主/機(jī)、工作頻段、通信距離、空中速率等方面都存在差異,大家可以根據(jù)自己的業(yè)務(wù)需求進(jìn)行選擇。
對(duì)于初學(xué)者而言,HC-08 是一款非常適合入門的藍(lán)牙模塊,本文就是以 HC-08 作為對(duì)象,介紹藍(lán)牙模塊的玩法。
HC-08 采用 TI CC25540 芯片方案,藍(lán)牙 BLE4.0 主從一體,通過 BLE 的軟件連接,傳輸速率 1Mbps ,傳輸距離 80m ,低功耗,詳細(xì)參數(shù)如下:
2.2 引腳介紹
HC-08 藍(lán)牙模塊是通過串口與單片機(jī)進(jìn)行通信,這個(gè)模塊既可以作為主機(jī)也可以作為從機(jī)(通過 AT 指令配置)。有些藍(lán)牙模塊不支持主機(jī)(如 HC-02 、HC-04),所以在使用時(shí)需要注意區(qū)分。
HC-08 藍(lán)牙模塊實(shí)物圖如下所示:
可以看到,HC-08 模塊一共有 6 個(gè)引腳,下面詳細(xì)介紹各個(gè)引腳的作用。
STATE:狀態(tài)輸出引腳。未連接時(shí),則為低電平。連接成功時(shí),則為高電平。可以在程序中作指示引腳使用;
RXD:串口接收引腳。接單片機(jī)的 TX 引腳(如果是5V MCU,需串聯(lián)一個(gè) 220R 電阻);
TXD:串口發(fā)送引腳。接單片機(jī)的 RX 引腳;
GND:接地電源;
VCC:輸入 3.2~6V 的電源(注意,上面一層郵票口的模塊不能接 5V 的電源,需要底板降壓至 3.3V);
KEY:主機(jī)用于清除配對(duì)的從機(jī)地址記憶(需要拉高電平 200ms 以上)。
上面的「連接」是指模塊通過藍(lán)牙協(xié)議連接上主機(jī)或從機(jī),并非物理意義上的連接。下同。
正常通信下,只需接 RXD、TXD、GND、VCC 四條線就夠了。
藍(lán)牙模塊上還有一個(gè) LED燈和一個(gè)小按鍵 (按鍵控制著引腳 KEY )。默認(rèn)情況下,當(dāng) LED燈閃爍時(shí)表示藍(lán)牙模塊當(dāng)前為從機(jī),正在等待連接。而長(zhǎng)亮的時(shí)候就代表已經(jīng)有主機(jī)連接上該模塊,可以正常進(jìn)行透?jìng)魍ㄓ嵙恕?p>當(dāng)按鍵按下后,主機(jī)將清除已被記錄的從機(jī)地址。另外,也可使用 AT+CLEAR 指令,實(shí)現(xiàn)「主機(jī)清除已記錄的從機(jī)地址」的功能。
注意,在硬件接線的時(shí)候藍(lán)牙模塊的 TXD 要和單片機(jī)的 RXD 相連接,藍(lán)牙模塊的 RXD 要和單片機(jī)的 TXD 相連接,也就是所謂的「交叉接線」。
3. 基本玩法
3.1 主/從機(jī)模式
3.1.1 主機(jī)模式
當(dāng)藍(lán)牙模塊處于主機(jī)模式的時(shí)候,可以與一個(gè)從機(jī)進(jìn)行連接。在此模式下可以對(duì)周圍設(shè)備進(jìn)行搜索并選擇需要連接的從機(jī)進(jìn)行連接。理論上,一個(gè)藍(lán)牙主端設(shè)備,可同時(shí)與 7 個(gè)藍(lán)牙從端設(shè)備進(jìn)行通訊。
一個(gè)具備藍(lán)牙通訊功能的設(shè)備,可以在兩個(gè)角色之間進(jìn)行切換。比如:平時(shí)工作在從機(jī)模式,等待其它主機(jī)來連接;在需要時(shí),可轉(zhuǎn)換為主機(jī)模式,向其它設(shè)備發(fā)起連接。一個(gè)藍(lán)牙設(shè)備以主機(jī)模式發(fā)起連接時(shí),需要知道對(duì)方的藍(lán)牙地址,配對(duì)密碼等信息,配對(duì)完成之后,可直接發(fā)起連接。
3.1.2 從機(jī)模式
當(dāng)藍(lán)牙模塊處于從機(jī)模式的時(shí)候,只能被主機(jī)搜索,不能主動(dòng)搜索。從機(jī)與主機(jī)連接以后,也可以和主機(jī)進(jìn)行發(fā)送和接收數(shù)據(jù)。
3.3.3 兩種工作模式有什么區(qū)別呢?
主機(jī)是指能夠搜索別人并主動(dòng)建立連接的一方,從機(jī)則不能主動(dòng)建立連接,只能等待主機(jī)連接自己。
如何進(jìn)入從機(jī)模式?
HC-08 上電之后,默認(rèn)情況下就是從機(jī)模式。如果需要手動(dòng)配置,可以使用 AT+ROLE=S 指令。
如何進(jìn)入主機(jī)模式?
我們需要通過 AT 指令 AT+ROLE=M 來設(shè)置藍(lán)牙模塊為主機(jī)模式。
3.2 什么是AT指令?
AT 指令(AT Commands)最早是由發(fā)明撥號(hào)調(diào)制解調(diào)器的賀氏公司為了控制撥號(hào)調(diào)制解調(diào)器而發(fā)明的控制協(xié)議。后來隨著網(wǎng)絡(luò)帶寬的升級(jí),速度很低的撥號(hào)調(diào)制解調(diào)器基本退出市場(chǎng),但是 AT 指令被保留了下來。
在嵌入式開發(fā)中,經(jīng)常是使用 AT 命令去控制各種通訊模塊,比如 WiFi 模塊、藍(lán)牙模塊、GPRS 模塊等等。一般就是主芯片通過硬件接口(比如串口、SPI)發(fā)送 AT 指令給通訊模塊,模塊接收到數(shù)據(jù)之后回應(yīng)響應(yīng)的數(shù)據(jù)。
3.3 常用的AT指令
AT 指令分為四種類型:
類型 | 格式 | 功能 |
---|---|---|
測(cè)試指令 | AT + < X > = ? | 查詢?cè)O(shè)置命令或內(nèi)部程序設(shè)置的參數(shù)及其取值范圍 |
查詢指令 | AT + < X > ? | 返回參數(shù)的當(dāng)前值 |
設(shè)置指令 | AT + < X > = < ... > | 設(shè)置用戶自定義的參數(shù)值 |
執(zhí)行指令 | AT + < X > | 執(zhí)行受模塊內(nèi)部程序控制的變參數(shù)不可變 |
藍(lán)牙模塊的 AT 指令相較于 ESP8266 要少非常多,后者有近百條。現(xiàn)在舉例一些常用指令,并使用這些指令一步一步的通過串口實(shí)現(xiàn)藍(lán)牙模塊的收發(fā)數(shù)據(jù)。
序號(hào) | AT指令(小寫 x 表示參數(shù)) | 作用 | 默認(rèn)狀態(tài) | 主/從生效 |
---|---|---|---|---|
1 | AT | 檢測(cè)串口是否正常工作 | - | M/S |
2 | AT+RX | 查看模塊基本參數(shù) | - | M/S |
3 | AT+DEFAULT | 恢復(fù)出廠設(shè)置 | - | M/S |
4 | AT+RESET | 模塊重啟 | - | M/S |
5 | AT+VERSION | 獲取模塊版本、 日期 | - | M/S |
6 | AT+ROLE=x | 主/從角色切換 | S | M/S |
7 | AT+NAME=xxx | 修改藍(lán)牙名稱 | HC-08 | M/S |
8 | AT+ADDR=xxxxxxxxxxxx | 修改藍(lán)牙地址 | 硬件地址 | M/S |
9 | AT+RFPM=x | 更改無線射頻功率 | 0(4dBm) | M/S |
10 | AT+BAUD=xx,y | 修改串口波特率 | 9600,N | M/S |
11 | AT+CONT=x | 是否可連接 | 0(可連) | M/S |
12 | AT+AVDA=xxx | 更改廣播數(shù)據(jù) | - | S |
13 | AT+MODE=x | 更改功耗模式 | 0 | S |
14 | AT+AINT=xx | 更改廣播間隔 | 320 | M/S |
15 | AT+CINT=xx,yy | 更改連接間隔 | 6,12 | M/S |
16 | AT+CTOUT=xx | 更改連接超時(shí)時(shí)間 | 200 | M/S |
17 | AT+CLEAR | 主機(jī)清除已記錄的從機(jī)地址 | - | M |
18 | AT+LED=x | LED 開/關(guān) | 1 | M/S |
19 | AT+LUUID=xxxx | 搜索 UUID | FFF0 | M/S |
20 | AT+SUUID=xxxx | 服務(wù) UUID | FFE0 | M/S |
21 | AT+TUUID=xxxx | 透?jìng)鲾?shù)據(jù) UUID | FFE1 | M/S |
22 | AT+AUST=x | 設(shè)置自動(dòng)進(jìn)入睡眠的時(shí)間 | 20 | S |
常用AT指令說明
請(qǐng)注意,只有當(dāng)藍(lán)牙模塊未連接上主/從機(jī),通過串口發(fā)送的數(shù)據(jù)才會(huì)被識(shí)別為 AT 指令。否則一旦連接上主/從機(jī),則發(fā)送的字符串則被視為普通數(shù)據(jù),直接透?jìng)鹘o對(duì)方。
測(cè)試指令
指令 響應(yīng) 功能 說明 AT OK 測(cè)試指令 最基礎(chǔ)的測(cè)試指令
當(dāng)模塊連接上 MCU 之后,我們不知道模塊是否連接到位、是否有虛連、模塊是否正常工作,我們可以發(fā)送 AT 這條指令進(jìn)行測(cè)試,如果接收到 OK 響應(yīng),則代表模塊一切正常,可以進(jìn)行后續(xù)的操作了。
模塊重啟指令
指令 響應(yīng) 功能 說明 AT+RESET OK 重啟藍(lán)牙模塊 藍(lán)牙模塊會(huì)自動(dòng)重啟,重啟 200ms 后可執(zhí)行新的操作 恢復(fù)出廠設(shè)置指令
指令 響應(yīng) 功能 說明 AT+DEFAULT OK 恢復(fù)出廠設(shè)置 注:不會(huì)清除主機(jī)已記錄的從機(jī)地址!若要清除,請(qǐng)?jiān)谖催B線狀態(tài)下使用 AT+CLEAR 指令進(jìn)行清除。
藍(lán)牙模塊會(huì)自動(dòng)重啟,重啟 200ms 后可進(jìn)行新的操作。更改功耗模式指令
指令 響應(yīng) 功能 說明 AT+MODE=? 0/1/2 獲取當(dāng)前功耗模式 獲取當(dāng)前功耗模式 AT+MODE=0 OK 更改功耗模式(僅限從機(jī)) 全速功耗模式(出廠默認(rèn)) AT+MODE=1 OK 更改功耗模式(僅限從機(jī)) 一級(jí)節(jié)能模式 AT+MODE=2 OK 更改功耗模式(僅限從機(jī)) 二級(jí)節(jié)能模式(睡眠模式)
節(jié)能模式說明:
一級(jí)節(jié)能模式是模塊最主要的低功耗模式,可為透?jìng)魈峁┑凸拇龣C(jī),也可以作為低功耗的廣播數(shù)據(jù);
二級(jí)節(jié)能模式是睡眠模式,在睡眠下時(shí)不可發(fā)現(xiàn)、不可連接,串口喚醒后可發(fā)現(xiàn)、可連接。
兩種節(jié)能模式都可以通過串口發(fā)送 1 個(gè)字節(jié)以上的數(shù)據(jù)來喚醒,但喚醒后前面幾個(gè)字節(jié)的數(shù)據(jù)可能會(huì)亂碼。
修改模塊角色指令
指令 響應(yīng) 功能 說明 AT+ROLE=? Master/Slave 獲取當(dāng)前模塊的主從機(jī)狀態(tài) 獲取當(dāng)前的藍(lán)牙模塊為主機(jī)/從機(jī)模式 AT+ROLE=M Master 設(shè)置為主機(jī)模式 設(shè)置后模塊將自動(dòng)重啟,重啟 200ms 后可進(jìn)行新的操作 AT+ROLE=S Slave 設(shè)置為從機(jī)模式 設(shè)置后模塊將自動(dòng)重啟,重啟 200ms 后可進(jìn)行新的操作 設(shè)置 LED 開/關(guān)指令
指令 響應(yīng) 功能 說明 AT+LED=? OK+LED=? 查詢LED工作模式 查詢LED當(dāng)前的工作模式 AT+LED=0 OK+LED=0 設(shè)置LED工作模式 設(shè)置LED的工作模式為關(guān)閉 AT+LED=1 OK+LED=1 設(shè)置LED工作模式 設(shè)置LED的工作模式為打開
使用指令關(guān)閉LED后再打開,需要重啟藍(lán)牙模塊才能生效
修改藍(lán)牙地址指令
指令 響應(yīng) 功能 說明 AT+ADDR=? (當(dāng)前藍(lán)牙模塊MAC地址) 獲取藍(lán)牙模塊MAC地址 地址必須為 12 位的 0~F 數(shù)字或大寫字符,即 16 進(jìn)制字符。 AT+ADDR=xxx OKsetADDR 修改藍(lán)牙模塊的MAC地址 建議不要修改模塊的 MAC 地址,避免沖突 查看軟件版本指令
指令 響應(yīng) 功能 說明 AT+VERSION HC-08V3.1, 2017-07-07 獲取軟件版本和發(fā)布日期 獲取軟件版本和發(fā)布日期 查看當(dāng)前基本參數(shù)
指令 響應(yīng) 功能 說明 AT+RX Name:HC-08 查詢模塊的基本參數(shù) 藍(lán)牙名是用戶設(shè)定的名字 Role:Slave 模塊角色(主/從) Baud:9600,NONE 串口波特率,校驗(yàn)位 Addr:xx,xx,xx,xx,xx,xx 藍(lán)牙地址 PIN :000000 藍(lán)牙密碼(密碼無效) 修改藍(lán)牙名稱指令
指令 響應(yīng) 功能 說明 AT+NAME=? OK+NAME=HC-08 獲取藍(lán)牙當(dāng)前名稱 獲取藍(lán)牙模塊的當(dāng)前名稱 AT+NAME=xxx OKsetNAME 設(shè)置藍(lán)牙名稱 設(shè)置藍(lán)牙模塊的名稱 設(shè)置模塊是否可連接指令
指令 響應(yīng) 功能 說明 AT+CONT=? Connectable/Non-Connectable 獲取藍(lán)牙模塊當(dāng)前是否可連接 設(shè)置可連接性,不可連接時(shí)主要用于廣播數(shù)據(jù) AT+CONT=0 OK 設(shè)置“可連接”成功 設(shè)置“可連接”成功 AT+CONT=1 OK 設(shè)置“不可連接”成功 設(shè)置“不可連接”成功 模式 主機(jī) 從機(jī) 可連接 中心(Central)可連接,連線后進(jìn)入普通透?jìng)髂J?/td> 外設(shè)(Peripheral)可連接,連線后進(jìn)入普通透?jìng)髂J?/td> 不可連接 觀察者(Observer)當(dāng)前模塊不能連接到其它模塊或者設(shè)備,但是會(huì)自動(dòng)掃描 HC-08 從機(jī)的廣播數(shù)據(jù)包,固定 2s 刷新一次 廣播者(Broadcaster)不會(huì)和主機(jī)連接,但可以結(jié)合低功耗模式 1,實(shí)現(xiàn)廣播數(shù)據(jù)包發(fā)送 設(shè)置連接超時(shí)指令
指令 響應(yīng) 功能 說明 AT+CTOUT=? OK+CTOUT=200(默認(rèn)) 查詢連接超時(shí)時(shí)間 查詢連接超時(shí)時(shí)間,單位 10ms,范圍 103200(100ms32s)。默認(rèn)為200 AT+CTOUT=100 OK+CTOUT=100 設(shè)置連接超時(shí)時(shí)間 設(shè)置連接超時(shí)時(shí)間為100ms 設(shè)置自動(dòng)進(jìn)入睡眠時(shí)間指令
指令 響應(yīng) 功能 說明 AT+AUST=? OK+AUST=20 查詢自動(dòng)睡眠定時(shí) (默認(rèn) 20s,該時(shí)間越小則越省電)設(shè)置的時(shí)間范圍為:1s~300s 。在低功耗模式下,激活模塊后如無操作,x 秒后將返回用戶原先所設(shè)置的低功耗模式 AT+AUST=100 OK+AUST=100 設(shè)置自動(dòng)睡眠時(shí)間 設(shè)置自動(dòng)睡眠時(shí)間為100s 修改串口波特率指令
指令 響應(yīng) 功能 說明 AT+BAUD=xx,y xx, y 設(shè)置串口 設(shè)置串口,參數(shù)如下表格 AT+BAUD=? 9600,NONE 查詢串口設(shè)置 查詢串口設(shè)置 xx 為串口波特率,y 為校驗(yàn)位
參數(shù) 串口波特率(xx) 參數(shù) 校驗(yàn)位(y) 1200 1200bps N 無校驗(yàn)NONE 2400 2400bps E 偶校驗(yàn)EVEN 4800 4800bps O 奇校驗(yàn)ODD 9600 9600bps(默認(rèn)波特率) 19200 19200bps 38400 38400bps 57600 57600bps 115200 115200bps
3.4 通信示意圖
4. 項(xiàng)目實(shí)戰(zhàn)
4.1 硬件準(zhǔn)備
STM32核心板
本文使用的是 STM32F103C8T6 最小系統(tǒng)板,價(jià)格很便宜,普遍 5~8 元。
ST-Link V2
ST-Link 是一種用于 STM32 微控制器的調(diào)試和編程工具,它可以通過 SWD 或 JTAG 接口與開發(fā)板進(jìn)行通信。一般價(jià)格在 6~8 元左右。
USB轉(zhuǎn)TTL
這玩意兒大家應(yīng)該非常熟悉了,通常我們用它來打印單片機(jī) log。
當(dāng)然,配合上位機(jī)(比如串口調(diào)試助手),我們也可以使用它對(duì)一些模組進(jìn)行調(diào)試,比如:wifi模塊、4G模組、藍(lán)牙,等等。
當(dāng)然價(jià)格也很便宜,普遍 5~8 元。
如果對(duì)這個(gè)工具使用不熟悉的小伙伴,可以閱讀下文:
零基礎(chǔ)快速上手STM32開發(fā)(手把手保姆級(jí)教程):https://www.lxlinux.net/e/stm32/stm32-quick-start-for-beginner.html
藍(lán)牙模塊
本文使用的是 HC-08 藍(lán)牙模塊,價(jià)格普遍 5~20 元左右。
4.2 PC串口助手調(diào)試
在項(xiàng)目開始前,我們需要使用 USB 轉(zhuǎn) TTL 工具對(duì)我們的藍(lán)牙模塊進(jìn)行測(cè)試,確保藍(lán)牙模塊工作正常。
硬件接線如下表格所示:
HC-08 | USB轉(zhuǎn)TTL |
---|---|
RXD | TXD |
TXD | RXD |
GND | GND |
VCC | 3V3 |
線路接好之后如下圖所示:
線路接好之后,將 USB 轉(zhuǎn) TTL 工具插入電腦,在串口助手輸入指令 AT ,模塊正常情況下會(huì)返回 OK 。
接著我們輸入 AT+VERSION ,獲取藍(lán)牙模塊的版本信息,結(jié)果如下:
在使用串口調(diào)試藍(lán)牙模塊的過程中,有可能會(huì)出現(xiàn)波特率正常、驅(qū)動(dòng)正常、藍(lán)牙模塊正常,且可以被手機(jī)連接上,但是輸入 AT 指令,卻沒有返回的情況,出現(xiàn)這種情況可以試試換個(gè)串口助手。
4.3 硬件接線
藍(lán)牙模塊確認(rèn)正常之后,我們就可以使用單片機(jī)通過編程的方式來操作藍(lán)牙模塊。
本文使用 串口2 連接藍(lán)牙,串口1 連接 USB 轉(zhuǎn) TTL 來打印 log。
HC-08 | STM32 | USB轉(zhuǎn)TTL |
---|---|---|
VCC | 3.3V | VCC |
RXD | A2 | |
TXD | A3 | |
GND | GND | GND |
A10 | TXD | |
A9 | RXD |
燒錄的時(shí)候接線如下表,如果不會(huì)燒錄的話可以看我之前的文章 STM32下載程序的五種方法:https://www.lxlinux.net/e/stm32/five-ways-to-flash-program-to-stm32.html。
ST-Link V2 | STM32 |
---|---|
SWCLK | SWCLK |
SWDIO | SWDIO |
GND | GND |
3.3V | 3V3 |
接好之后像這樣,我這里使用了面包板,用公對(duì)母的杜邦線將他們串在了一起
4.4 藍(lán)牙收發(fā)代碼編寫
藍(lán)牙模塊通過串口與 MCU 進(jìn)行通訊,所以第一步需要先做好串口的配置。
關(guān)于串口的配置,我寫過一篇文章手把手教你玩串口,大家可以移步下文查看:
STM32串口接收不定長(zhǎng)數(shù)據(jù)(接收中斷+超時(shí)判斷):https://www.lxlinux.net/e/stm32/stm32-usart-receive-data-using-rxne-time-out.html
具體代碼如下:
uint8_t bt_uart_rx_buf[BT_RX_BUF_SIZE];
uint8_t bt_uart_tx_buf[BT_TX_BUF_SIZE];
uint16_t bt_uart_rx_len = 0;
void bt_init(uint32_t baudrate)
{
bt_uart_handle.Instance = BT_INTERFACE; /* BT */
bt_uart_handle.Init.BaudRate = baudrate; /* 波特率 */
bt_uart_handle.Init.WordLength = UART_WORDLENGTH_8B; /* 數(shù)據(jù)位 */
bt_uart_handle.Init.StopBits = UART_STOPBITS_1; /* 停止位 */
bt_uart_handle.Init.Parity = UART_PARITY_NONE; /* 校驗(yàn)位 */
bt_uart_handle.Init.Mode = UART_MODE_TX_RX; /* 收發(fā)模式 */
bt_uart_handle.Init.HwFlowCtl = UART_HWCONTROL_NONE; /* 無硬件流控 */
bt_uart_handle.Init.OverSampling = UART_OVERSAMPLING_16; /* 過采樣 */
HAL_UART_Init(&bt_uart_handle); /* 使能BT */
}
void bt_rx_clear(void)
{
memset(bt_uart_rx_buf, 0, sizeof(bt_uart_rx_buf)); //清空接收緩沖區(qū)
bt_uart_rx_len = 0; //接收計(jì)數(shù)器清零
}
void BT_IRQHandler(void)
{
uint8_t receive_data = 0;
if(__HAL_UART_GET_FLAG(&bt_uart_handle, UART_FLAG_RXNE) != RESET){ //獲取接收RXNE標(biāo)志位是否被置位
if(bt_uart_rx_len >= sizeof(bt_uart_rx_buf)) //如果接收的字符數(shù)大于接收緩沖區(qū)大小,
上一篇:STM32: gcc下printf重定向
下一篇:手把手教你玩轉(zhuǎn)超聲波傳感器(原理+驅(qū)動(dòng))
設(shè)計(jì)資源 培訓(xùn) 開發(fā)板 精華推薦
- 英飛凌微控制器:以全新實(shí)惠套件和強(qiáng)大開發(fā)環(huán)境為開發(fā)者提供支持
- iTOP-i.MX6開發(fā)板設(shè)備數(shù)驅(qū)動(dòng)Menuconfig的用法
- 迅為IMX6ULL開發(fā)板Qt for Android搭建開發(fā)環(huán)境
- 迅為i.MX8M mini開發(fā)板Windots QT系統(tǒng)開發(fā)環(huán)境搭建
- 迅為IMX8MM開發(fā)板Yocto系統(tǒng)使用Gstarwmra(一)
- 迅為IMX8M mini開發(fā)板Linix系統(tǒng)修改默認(rèn)屏幕
- iTOP-4412開發(fā)板支持4G以上文件系統(tǒng)擴(kuò)展
- 迅為IMX8MM開發(fā)板Yocto系統(tǒng)設(shè)置開機(jī)自啟動(dòng)
- 迅為IMX6Q開發(fā)板 Buildroot文件系統(tǒng)mqtt測(cè)試
- 使用 Microchip Technology 的 MIC2772-T2T3YML 的參考設(shè)計(jì)
- 使用 NXP Semiconductors 的 TDA8543 的參考設(shè)計(jì)
- AM2S-4818SH30Z 18V 2瓦直流轉(zhuǎn)直流轉(zhuǎn)換器的典型應(yīng)用
- 使用 Analog Devices 的 LT1723 的參考設(shè)計(jì)
- 使用 ROHM Semiconductor 的 BD4857 的參考設(shè)計(jì)
- DC1908A-A,具有 LTC2338-18、18 位、1Msps、真正雙極低功率、單電源 ADC 的演示板
- LTC1473 的典型應(yīng)用 - 雙電源路徑開關(guān)驅(qū)動(dòng)器
- AM2G-0524SH30Z 24V 2 瓦 DC/DC 轉(zhuǎn)換器的典型應(yīng)用
- HDMI轉(zhuǎn)AV信號(hào)-MS1836
- USB Type-C 音頻適配器附件模式參考設(shè)計(jì)
- BOE(京東方)發(fā)布未來三年股東回報(bào)規(guī)劃 一攬子方案提升長(zhǎng)期投資價(jià)值
- 車載以太網(wǎng)-SOME/IP簡(jiǎn)介
- 圓柱電池市場(chǎng)“洗牌”醞釀,場(chǎng)景爭(zhēng)奪戰(zhàn)打響
- 4月15日德州儀器攜手庫(kù)卡發(fā)布新一代工業(yè)機(jī)器人控制器,定義安全與效率新標(biāo)桿
- 大眾汽車集團(tuán)在中國(guó)推出全新AI驅(qū)動(dòng)ADAS系統(tǒng) 面向下一代智能電動(dòng)汽車
- 納微電半導(dǎo)體推出最新SiCPAK?電源模塊
- “鈉新”、“驍遙雙核”……寧德時(shí)代開啟多核時(shí)代
- 地平線發(fā)布HSD「全家桶」,城市NOA戰(zhàn)局迎來「新變量」
- 地平線輔助駕駛系統(tǒng)發(fā)布:軟硬一體
- TrendForce:預(yù)計(jì)中國(guó)市場(chǎng)2025年人形機(jī)器人本體產(chǎn)值將超過45億人民幣
- 【EEWORLD第三十屆】2011年09月社區(qū)明星人物揭曉!
- 下載《TI MCU與無線連接技術(shù)研討會(huì)講座實(shí)錄》抽獎(jiǎng)贏好禮!
- 炎夏來臨,足不出戶也能盡享2018東芝PCIM在線展會(huì)
- TE 福利月|有獎(jiǎng)?wù){(diào)查、技術(shù)干貨、限時(shí)折扣
- 力源帶你了解安森美半導(dǎo)體開發(fā)神器——高度靈活的物聯(lián)網(wǎng)開發(fā)套件( IDK )!看視頻輕松答題享好禮!
- 【已結(jié)束】 電感應(yīng)用知識(shí)分享|MPS 有獎(jiǎng)直播
- 【提問有禮】TI MCU,今天你提問了嗎?
- TI 邀您填問卷贏好禮|私人定制專屬你的 2019 工業(yè)應(yīng)用方案
- 模擬世界的最重要構(gòu)成——信號(hào)鏈與電源
- 華泰聯(lián)合證券張輝:未來A股半導(dǎo)體企業(yè)價(jià)值或出現(xiàn)明顯分化
- 上市障礙逐步掃除,注冊(cè)制下的紅籌企業(yè)回歸迎發(fā)展新機(jī)
- 嫦娥七號(hào)將著陸月球南極 開展極區(qū)環(huán)境與資源勘查
- 精密傳動(dòng)裝置研發(fā)企業(yè)綠的諧波成功登陸科創(chuàng)板
- 三星半導(dǎo)體版圖的再次擴(kuò)大
- 微軟Surface Duo 2現(xiàn)身于Geekbench:驍龍888+Android 11系統(tǒng)
- 蘋果 Apple Watch Series 7 的仿冒品已經(jīng)在國(guó)內(nèi)出現(xiàn)
- 當(dāng)你按下快門拍照,你的手機(jī)在做數(shù)學(xué)題
- 榮耀50/Pro全新配色“榮耀密碼”官宣,將在周一亮相
- 華為EMUI 12海外上線:新特性公布了
- 請(qǐng)教 quartus 2
- 機(jī)器人學(xué)(斯坦福大學(xué)公開課)
- Build OS菜單及相應(yīng)的下拉一系列菜單全部顯灰色
- 數(shù)字調(diào)制系列:IQ調(diào)制基本理論
- 【樹莓派3B+測(cè)評(píng)】配置開發(fā)環(huán)境
- 2012TI杯中功率電阻的使用
- 超聲波測(cè)距好的資料
- C# .NET 四年開發(fā)經(jīng)驗(yàn)中高程->想轉(zhuǎn)作嵌入式領(lǐng)域--困惑!!!!!!你有同感嗎??
- stm32 編寫語音存儲(chǔ)回放(WT588D芯片)
- ICT是用于測(cè)試元件 屬性時(shí)用的