娇小w搡bbbb搡bbb,《第一次の人妻》,中国成熟妇女毛茸茸,边啃奶头边躁狠狠躁视频免费观看

手把手教你玩轉(zhuǎn)藍(lán)牙模塊(原理+驅(qū)動(dòng))

發(fā)布者:Yudie最新更新時(shí)間:2025-02-07 來源: jianshu關(guān)鍵字:藍(lán)牙模塊  驅(qū)動(dòng)  STM32 手機(jī)看文章 掃描二維碼
隨時(shí)隨地手機(jī)看文章

作為嵌入式開發(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.02.4G10米貼片2Mbps26.9 * 13 * 2 mm
HC-04從機(jī)藍(lán)牙2.0 / 藍(lán)牙4.02.4G10米貼片60KB/s18.5 * 13 * 2 mm
HC-05主從機(jī)一體藍(lán)牙2.02.4G10米貼片2Mbps27.0 * 13 * 2 mm
HC-06主從機(jī)一體藍(lán)牙2.02.4G10米貼片2Mbps27.0 * 13 * 2 mm
HC-08主從機(jī)一體藍(lán)牙4.02.4G80米貼片 / 焊接1Mbps26.9 * 13 * 2 mm
HC-09主從機(jī)一體藍(lán)牙4.02.4G60米貼片 / 焊接3KB/s18.5 * 13 * 2 mm
HC-42主從機(jī)一體藍(lán)牙5.02.4G40米貼片 / 焊接1Mbps / 2Mbps26.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)主/從生效
1AT檢測(cè)串口是否正常工作-M/S
2AT+RX查看模塊基本參數(shù)-M/S
3AT+DEFAULT恢復(fù)出廠設(shè)置-M/S
4AT+RESET模塊重啟-M/S
5AT+VERSION獲取模塊版本、 日期-M/S
6AT+ROLE=x主/從角色切換SM/S
7AT+NAME=xxx修改藍(lán)牙名稱HC-08M/S
8AT+ADDR=xxxxxxxxxxxx修改藍(lán)牙地址硬件地址M/S
9AT+RFPM=x更改無線射頻功率0(4dBm)M/S
10AT+BAUD=xx,y修改串口波特率9600,NM/S
11AT+CONT=x是否可連接0(可連)M/S
12AT+AVDA=xxx更改廣播數(shù)據(jù)-S
13AT+MODE=x更改功耗模式0S
14AT+AINT=xx更改廣播間隔320M/S
15AT+CINT=xx,yy更改連接間隔6,12M/S
16AT+CTOUT=xx更改連接超時(shí)時(shí)間200M/S
17AT+CLEAR主機(jī)清除已記錄的從機(jī)地址-M
18AT+LED=xLED 開/關(guān)1M/S
19AT+LUUID=xxxx搜索 UUIDFFF0M/S
20AT+SUUID=xxxx服務(wù) UUIDFFE0M/S
21AT+TUUID=xxxx透?jìng)鲾?shù)據(jù) UUIDFFE1M/S
22AT+AUST=x設(shè)置自動(dòng)進(jìn)入睡眠的時(shí)間20S

常用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)功能說明
    ATOK測(cè)試指令最基礎(chǔ)的測(cè)試指令

當(dāng)模塊連接上 MCU 之后,我們不知道模塊是否連接到位、是否有虛連、模塊是否正常工作,我們可以發(fā)送 AT 這條指令進(jìn)行測(cè)試,如果接收到 OK 響應(yīng),則代表模塊一切正常,可以進(jìn)行后續(xù)的操作了。

  • 模塊重啟指令

    指令響應(yīng)功能說明
    AT+RESETOK重啟藍(lán)牙模塊藍(lán)牙模塊會(huì)自動(dòng)重啟,重啟 200ms 后可執(zhí)行新的操作
  • 恢復(fù)出廠設(shè)置指令

    指令響應(yīng)功能說明
    AT+DEFAULTOK恢復(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=0OK更改功耗模式(僅限從機(jī))全速功耗模式(出廠默認(rèn))
    AT+MODE=1OK更改功耗模式(僅限從機(jī))一級(jí)節(jié)能模式
    AT+MODE=2OK更改功耗模式(僅限從機(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=MMaster設(shè)置為主機(jī)模式設(shè)置后模塊將自動(dòng)重啟,重啟 200ms 后可進(jìn)行新的操作
    AT+ROLE=SSlave設(shè)置為從機(jī)模式設(shè)置后模塊將自動(dòng)重啟,重啟 200ms 后可進(jìn)行新的操作
  • 設(shè)置 LED 開/關(guān)指令

    指令響應(yīng)功能說明
    AT+LED=?OK+LED=?查詢LED工作模式查詢LED當(dāng)前的工作模式
    AT+LED=0OK+LED=0設(shè)置LED工作模式設(shè)置LED的工作模式為關(guān)閉
    AT+LED=1OK+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=xxxOKsetADDR修改藍(lán)牙模塊的MAC地址建議不要修改模塊的 MAC 地址,避免沖突
  • 查看軟件版本指令

    指令響應(yīng)功能說明
    AT+VERSIONHC-08V3.1, 2017-07-07獲取軟件版本和發(fā)布日期獲取軟件版本和發(fā)布日期
  • 查看當(dāng)前基本參數(shù)

    指令響應(yīng)功能說明
    AT+RXName: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=xxxOKsetNAME設(shè)置藍(lán)牙名稱設(shè)置藍(lán)牙模塊的名稱
  • 設(shè)置模塊是否可連接指令

    指令響應(yīng)功能說明
    AT+CONT=?Connectable/Non-Connectable獲取藍(lán)牙模塊當(dāng)前是否可連接設(shè)置可連接性,不可連接時(shí)主要用于廣播數(shù)據(jù)
    AT+CONT=0OK設(shè)置“可連接”成功設(shè)置“可連接”成功
    AT+CONT=1OK設(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=100OK+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=100OK+AUST=100設(shè)置自動(dòng)睡眠時(shí)間設(shè)置自動(dòng)睡眠時(shí)間為100s
  • 修改串口波特率指令

    指令響應(yīng)功能說明
    AT+BAUD=xx,yxx, y設(shè)置串口設(shè)置串口,參數(shù)如下表格
    AT+BAUD=?9600,NONE查詢串口設(shè)置查詢串口設(shè)置

    xx 為串口波特率,y 為校驗(yàn)位

    參數(shù)串口波特率(xx)參數(shù)校驗(yàn)位(y)
    12001200bpsN無校驗(yàn)NONE
    24002400bpsE偶校驗(yàn)EVEN
    48004800bpsO奇校驗(yàn)ODD
    96009600bps(默認(rèn)波特率)

    1920019200bps

    3840038400bps

    5760057600bps

    115200115200bps

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-08USB轉(zhuǎn)TTL
RXDTXD
TXDRXD
GNDGND
VCC3V3

線路接好之后如下圖所示:

線路接好之后,將 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-08STM32USB轉(zhuǎn)TTL
VCC3.3VVCC
RXDA2
TXDA3
GNDGNDGND

A10TXD

A9RXD

燒錄的時(shí)候接線如下表,如果不會(huì)燒錄的話可以看我之前的文章 STM32下載程序的五種方法:https://www.lxlinux.net/e/stm32/five-ways-to-flash-program-to-stm32.html。

ST-Link V2STM32
SWCLKSWCLK
SWDIOSWDIO
GNDGND
3.3V3V3

接好之后像這樣,我這里使用了面包板,用公對(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ū)大小,

[1] [2]
關(guān)鍵字:藍(lán)牙模塊  驅(qū)動(dòng)  STM32 引用地址:手把手教你玩轉(zhuǎn)藍(lán)牙模塊(原理+驅(qū)動(dòng))

上一篇:STM32: gcc下printf重定向
下一篇:手把手教你玩轉(zhuǎn)超聲波傳感器(原理+驅(qū)動(dòng))

小廣播
設(shè)計(jì)資源 培訓(xùn) 開發(fā)板 精華推薦

最新單片機(jī)文章

 
EEWorld訂閱號(hào)

 
EEWorld服務(wù)號(hào)

 
汽車開發(fā)圈

 
機(jī)器人開發(fā)圈

電子工程世界版權(quán)所有 京ICP證060456號(hào) 京ICP備10001474號(hào)-1 電信業(yè)務(wù)審批[2006]字第258號(hào)函 京公網(wǎng)安備 11010802033920號(hào) Copyright ? 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
主站蜘蛛池模板: 昌江| 达州市| 扎鲁特旗| 白城市| 西藏| 汉沽区| 大连市| 进贤县| 富民县| 县级市| 汝阳县| 黑河市| 呈贡县| 花莲市| 永新县| 关岭| 双峰县| 青冈县| 鹤壁市| 花莲市| 调兵山市| 蓬安县| 宜春市| 兴业县| 方山县| 桐柏县| 富民县| 昌都县| 城市| 商城县| 偃师市| 简阳市| 平谷区| 庆元县| 永新县| 民县| 宁明县| 信宜市| 楚雄市| 论坛| 措勤县|