衡阳派盒市场营销有限公司

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

快速入門BlueNRG SDK固件開發流程

STM32單片機 ? 來源:STM32單片機 ? 2024-01-13 10:43 ? 次閱讀

01

前言

本文檔指導用戶快速地對 BlueNRG SDK 有一個直觀、清晰的認識,了解其軟件架構,以便順利地學會利用 SDK 開發自己的用戶固件。

本文檔所述 SDK 為 BlueNRG-LP/LPS 芯片的 SDK。閱讀本文檔前,用戶應先了解BlueNRG-LP/LPS 芯片的一些基本特性,以及其配套開發板的燒錄方式。

02

SDK 目錄

從 ST 官網下載 SDK 的安裝包,成功安裝后,即可獲得一個 SDK 目錄。見圖 1:

53730a20-b131-11ee-8b88-92fbcf53809c.jpg

圖1.SDK 目錄

各個目錄的功能說明見表 1:

537b16ca-b131-11ee-8b88-92fbcf53809c.jpg

表1. SDK 目錄說明

BlueNRG SDK 安裝目錄為用戶工程師開發 BlueNRG 平臺提供了一個便捷的入口,舉例來說,有以下幾個場景:

1. 硬件工程師設計 PCB 前,可通過 Docs 目錄找到硬件設計指導文檔。完成 PCBA 制作后,可自行使用 Navigator 工具通過串口燒錄 Firmware 下的應用固件,驗證板子功能。

2. 當工程師想用板子進行功耗、射頻測試時,也可在 Firmware 目錄下找到合適的已經編譯好的固件(測 SOC 藍牙功耗可用 Beacon,測射頻參數可用 DTM)

3. 固件工程師可在 Projects 目錄下找到豐富的例程,并且可使用 KEIL、IAR、WiSE 任一個IDE 打開工程、編譯、下載。

03

SDK 例程

SDK Projects 目錄包含了以下三類例程:

1. Periph_Examples:包含了芯片外設驅動例程。

2. External_Micro :包含了外部單片機的例程,應用于 BlueNRG 芯片在系統中作為協處理器的場景。

3. BLE_Examples :包含了藍牙相關的所有例程,這些例程的工程特性展示如下:

538e46c8-b131-11ee-8b88-92fbcf53809c.jpg

表2. BLE 例程說明

04

快速實現用戶固件功能

本章節指導用戶如何快速地在 SDK 中找到相應的 API 接口和位置,以便掌握在 SDK 例程上添加自己的配置和用戶邏輯代碼的方式。

在對 SDK 提供的例程的功能有所了解之后,假設用戶面臨的一個開發任務是:

1. BLE 從機功能,包含以下配置:

a. 一個服務,一個特征,特征具備 Write、Notify 屬性

b. 設備廣播名為“Hello”

2. 使用手機 BLE 工具和設備通訊,打印通訊過程產生的數據

3. 自定義協議,實現以下功能:

a. 控制 LED 亮滅

b. 定時 1s 上傳心跳包,內容為連接后的秒計數值

c. 每次按鍵上傳按鍵事件通知

基于以上任務,我們可以選擇 BLE_SerialPort 工程作為基礎工程并以此來進行固件開發。

4.1. 驗證原始工程

在添加用戶代碼之前,我們最好先驗證了原始工程(BLE_SerialPort)的功能,確保開發環境正常。新建一個用戶工程目錄,比如,test_sdk1.3.0,然后從 SDK 目錄拷貝以下文件到我們的用戶工程目錄,見圖 2:

539dfeb0-b131-11ee-8b88-92fbcf53809c.jpg

圖2.用戶工程目錄

打開 Projects > BLE_SerialPort 的 Keil 工程,勾選“Browse Information”選項,以便使能工程內函數的跳轉,同時選中 Server 工程配置,見圖 3,圖 4:

53af0764-b131-11ee-8b88-92fbcf53809c.jpg

圖3.Browse Information

53b92c76-b131-11ee-8b88-92fbcf53809c.jpg

圖4.選中 Server 工程配置

編譯、下載工程到開發板,工程運行起來后,應能見到以下打印信息

53d13186-b131-11ee-8b88-92fbcf53809c.jpg

圖5.BLE_SerialPort 工程 LOG 信息

使用 STBLE Toolbox 工具掃描該設備,應能看到設備名為“Sport_LP”,見圖 6:

53e0d33e-b131-11ee-8b88-92fbcf53809c.jpg

圖6.STBLE Toolbox 掃描頁面

至此,原始工程已經正常運行起來了。該工程實現了自定義服務、特征的功能,并能通過串口和手機進行數據的收發。要完成此次開發任務,我們只需在特定位置修改一些代碼即可。

4.2. 配置 BLE 從機功能

原始工程有兩個特征,一個負責發(TX_CHR_UUID),一個負責收(RX_CHR_UUID)。按照要求,我們需要把他們合并為一個可以收、發的特征。圖 6 演示了定義新的特征 UUID 并注釋掉舊的兩個特征 UUID 的方式:

53f17356-b131-11ee-8b88-92fbcf53809c.jpg

圖7.特征 UUID

協議棧提供了 ble_gatt_chr_def_t 類型結構體,用戶可以定義一個結構體變量并賦值,以此來聲明一個特征。圖 7 展示了我們所需的特征配置的相關賦值過程,圖中可見特征的 UUID 聲明,特征 notify、write 屬性聲明,特征的特征描述符聲明等信息。另外,舊的兩個特征應該注釋掉。

53fe6cdc-b131-11ee-8b88-92fbcf53809c.jpg

圖8.定義特征

將新的特征配置賦值給服務聲明,特征的數量修改為 1 個:

541a9448-b131-11ee-8b88-92fbcf53809c.jpg

圖9.特征聲明賦值給服務聲明

上述服務、特征相關的數據結構配置完畢,我們還需要將這些配置通過 API 傳遞給協議棧。

首先,需要先定義一個新的句柄,所謂句柄,簡單地說,用戶在進行數據收發的時候,需要選擇在哪個特征上進行數據收發,此時便需要句柄來指定特征(句柄本質上便是 attribute 的handle 字段)。原來的兩個句柄也要注釋掉,見圖 10

542262a4-b131-11ee-8b88-92fbcf53809c.jpg

圖10. 句柄

然后,將上文定義好的服務、特征通過 aci_gatt_srv_add_service 函數一次性傳送給協議棧,協議棧對這些配置進行解析、構建完整的 ATT 屬性表,保存在內存中。之后,用戶可使用aci_gatt_srv_get_char_decl_handle 接口獲取已分配好的句柄(見圖 11),此后的數據交互過程將頻繁使用該句柄。

542a672e-b131-11ee-8b88-92fbcf53809c.jpg

圖11. 獲取句柄

至此,GATT 相關的配置已經完成。但是,由于上層大量引用了舊的兩個句柄進行數據收發,因此此時編譯會出現比較多的錯誤,此處暫不處理這些錯誤,先完成其他的 BLE 配置。

接下來修改藍牙地址,并修改廣播名,見圖 12:

54343d12-b131-11ee-8b88-92fbcf53809c.jpg

圖12. 藍牙地址和廣播名

廣播名的長度改變后,應注意指定其長度:

54472d78-b131-11ee-8b88-92fbcf53809c.jpg

圖13. 廣播名長度

LOCAL_NAME 設置的是廣播包里的設備名,當設備連接成功后,主機會從 GAP Profile 的device name 特征里獲取另外一個設備名,此處應保持這兩個名字一致:

5450bbc2-b131-11ee-8b88-92fbcf53809c.jpg

圖14. 設備名

54596e7a-b131-11ee-8b88-92fbcf53809c.jpg

圖15. 設置設備名

至此,關于藍牙的應用配置即告完畢。接下來可進行數據通訊相關的配置、實現。

4.3.和手機進行通訊

上一小節配置完從機功能后,編譯會產生大量錯誤,是因為 BLE 的通訊過程會比較多地引用舊的句柄。循著解決這些編譯錯誤的操作,我們能了解到 BLE 通訊的過程。具體操作如下:

全局搜索舊的發送句柄(TXCharHanlde),我們找到了用于數據發送的協議棧 API,修正之 :

546a6522-b131-11ee-8b88-92fbcf53809c.jpg

圖16. 發送 Notify

手機使能訂閱后,會通過圖 17 的回調函數通知上層。此時應該修改為新的特征句柄,同時,添加一些打印指示 notify 的使能、禁用狀態:

547e3822-b131-11ee-8b88-92fbcf53809c.jpg

圖17. 使能訂閱回調

添加新的特征句柄全局變量聲明,注釋掉舊的:

54873fb2-b131-11ee-8b88-92fbcf53809c.jpg

圖18. 句柄聲明

關于舊的發送句柄(TXCharHanlde)的問題已經全部解決。繼續搜索舊的接收句柄(RXCharHanlde),我們應能找到設備接收手機數據的函數接口,將其中的句柄替換為新的特征句柄,見圖 19:

5495c2e4-b131-11ee-8b88-92fbcf53809c.jpg

圖19. 數據接收回調函數

至此,我們應該能通過全部編譯過程,并且已經找到了數據發送、接收的位置。此時可以在這些位置添加數據發送、接收的打印函數。接收數據的用戶接口見圖 20:

54a48e82-b131-11ee-8b88-92fbcf53809c.jpg

圖20. 用戶接收 BLE 數據

關于發送數據,原始工程實現了以下處理流程:

1. 從串口接收數據

2. 解析數據為命令并緩存這些命令

3. 通過輪詢的方式,不斷將命令緩沖區里的命令發送出去

該處理流程不適用于我們的任務要求,我們需要先取消這部分功能,見圖 21

54b3cabe-b131-11ee-8b88-92fbcf53809c.jpg

圖21. 取消原有的數據處理流程

然后設計自己的發送函數,見圖 22:

54c3f696-b131-11ee-8b88-92fbcf53809c.jpg

圖22. 自定義 BLE 數據發送函數

至此,藍牙的通訊功能已經全部實現完畢。用戶可通過:

? Data_Received()接口接收數據

? user_send_data_over_ble()接口發送數據

4.4.添加其它功能

根據任務要求,我們還需實現下面三個功能:

1. 控制 LED 亮滅

2. 定時 1s 上傳心跳包,內容為連接后的秒計數值

3. 每次按鍵上傳按鍵事件通知下面開始逐個實現:

4.4.1. 控制 LED 亮滅

首先,實現 LED 亮滅處理函數,

54cdbeb0-b131-11ee-8b88-92fbcf53809c.jpg

圖23. LED 命令處理函數

將其添加到 BLE 數據接收函數處,見圖 24。LED 控制功能實現完畢。

54dc98cc-b131-11ee-8b88-92fbcf53809c.jpg

圖24. 接收數據后進行 LED 命令處理

4.4.2. 每秒上傳心跳包

首先,實現心跳上傳處理函數,實現當設備連接后,每秒上傳一個 4 字節的計數值,并使用0xaa 作為命令字。見圖 25:

54fb8bf6-b131-11ee-8b88-92fbcf53809c.jpg

圖25. 心跳上傳處理

將心跳處理函數添加到系統任務處理函數 App_Tick 中,App_Tick 會在 main loop 中不斷地被調用。心跳包需要在藍牙連接成功并且使能了訂閱之后才可以發送。另外,使用 timeout_flag變量來控制其每秒只被調用一次,實現方法如下:

5506316e-b131-11ee-8b88-92fbcf53809c.jpg

圖26. 心跳處理

上述 timeout_flag 變量需要使用每秒循環的軟件定時器來周期性置位。軟件定時器的應用方式很簡單。

首先,實例化一個定時器,并定義超時回調函數:

55136212-b131-11ee-8b88-92fbcf53809c.jpg

圖27. 軟件定時器實例化

然后,在 Serial_port_DeviceInit 函數的末端位置注冊超時回調函數并啟動定時器。

5521f0fc-b131-11ee-8b88-92fbcf53809c.jpg

圖28. 啟動定時器

4.4.3. 上傳按鍵事件

首先,實現按鍵回調函數,該函數在按鍵按下時被調用。發送按鍵事件前,應檢查此時藍牙是否處理連接、已訂閱狀態。見圖 29:

55367874-b131-11ee-8b88-92fbcf53809c.jpg

圖29. 按鍵回調

按鍵中斷服務函數中調用:

55468aca-b131-11ee-8b88-92fbcf53809c.jpg

圖30. 按鍵中斷服務函數

至此,開發任務的要求已經全部實現完畢。接下來進行功能驗證。

4.5.驗證功能

用戶工程運行起來后,用 STBLE Toolbox 掃描,可見廣播名已經修改過來了。

554d954a-b131-11ee-8b88-92fbcf53809c.jpg

圖31. 用戶工程廣播名

連上設備并點擊 Notify 開關以使能訂閱,可觀察到底部已經開始接收到設備的心跳包數據(以 AA 開頭的 5 字節數據),該數據每秒鐘變化一次,見圖 32:

555e29fa-b131-11ee-8b88-92fbcf53809c.jpg

圖32. 使能訂閱

通過 LOG 也能觀察到心跳包發送情況,此時如果按動按鍵,也能觀察到按鍵事件已經發送:

556e0b2c-b131-11ee-8b88-92fbcf53809c.jpg

圖33. 用戶工程 LOG

05

小結

跑完了上述用戶任務開發的流程后,相信用戶對 BlueNRG SDK 的軟件架構應有所理解了。BlueNRG SDK 的軟件層次架構為 STM32 典型的三層架構,分別為驅動層、中間層、用戶層:

55845fe4-b131-11ee-8b88-92fbcf53809c.jpg

圖34. 軟件層次架構

上述添加用戶功能的整個過程,其實只改動到了用戶層的功能,用戶層包含以下幾個文件:

55902630-b131-11ee-8b88-92fbcf53809c.jpg

圖35. 用戶層文件

這些文件的含義是:

? serial_port.c,用戶應用邏輯的實現

? BLE_SerialPort_main.c,程序入口,程序主流程

? gatt_db.c,BLE GATT 層功能的實現

? rf_device_it.c,存放所有的中斷服務函數

上述用戶固件的功能,大多都在 serial_port.c 中實現。BLE_SerialPort_main.c 函數則實現了系統的主要流程。簡單來說,BlueNRG SDK 的裸機系統即是一個前后臺系統。藍牙事件、按鍵中斷等屬于前臺處理,負責置位相關標志位和狀態,main 函數的 while1 屬于后臺處理,運行藍牙協議棧、用戶任務處理等后臺任務,見圖 36:

55a71ce6-b131-11ee-8b88-92fbcf53809c.jpg

圖36. 系統流程

BlueNRG SDK 中的絕大多數例程都使用了本文檔所述的軟件架構,即前后臺系統。該軟件架構比較簡單,優點是用戶能非常快速地掌握其流程,能夠依據本文檔的示例快速構建自己的用戶功能。缺點是功能比較簡單,用戶需要在此基礎上再添加一個調度器以應對復雜功能的要求。






審核編輯:劉清

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 單片機
    +關注

    關注

    6039

    文章

    44583

    瀏覽量

    636495
  • soc
    soc
    +關注

    關注

    38

    文章

    4182

    瀏覽量

    218506
  • 固件
    +關注

    關注

    10

    文章

    558

    瀏覽量

    23068
  • 協處理器
    +關注

    關注

    0

    文章

    75

    瀏覽量

    18193
  • DTM
    DTM
    +關注

    關注

    0

    文章

    8

    瀏覽量

    7409
  • SDK
    SDK
    +關注

    關注

    3

    文章

    1039

    瀏覽量

    46028
  • BlueNRG
    +關注

    關注

    0

    文章

    15

    瀏覽量

    9653

原文標題:實戰經驗 | 快速入門 BlueNRG SDK 固件開發

文章出處:【微信號:STM32_STM8_MCU,微信公眾號:STM32單片機】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦

    CW32快速開發入門

    CW32快速開發入門
    的頭像 發表于 04-24 18:56 ?2040次閱讀
    CW32<b class='flag-5'>快速</b><b class='flag-5'>開發</b><b class='flag-5'>入門</b>

    BlueNRG-2N處理器不需要使用特定固件就可以進行外部閃爍嗎

    大家好,我正在使用 STM32L4 開發定制板,并希望包含一個“即用型”BLE 模塊,例如 BlueNRG-2 系列。我擁有 X-NUCLEO-BNRG2A1 并對其進行了徹底測試。發現
    發表于 12-16 07:47

    哪個固件BlueNRG-M2SP模塊的默認固件呢?

    以根據所需用途在 BlueNRG-M2SP 模塊上下載不同的固件。如果我訂購 20 個 BlueNRG-M2SP 模塊,它們會預裝特定固件,還是我必須分別對每個模塊進行編程?如果它們確
    發表于 12-19 08:02

    BlueNRG-LP、BlueNRG-LPS(無線)固件升級程序

    本應用筆記介紹運行于隨 BlueNRG-LP、BlueNRG-LPS 片上系統提供的 Bluetooth?低功耗(LE)棧之上的 BlueNRG-LP、BlueNRG-LPS 無線(O
    發表于 08-14 10:19

    FPGA/SOPC開發快速入門教程

    FPGA/SOPC開發快速入門教程
    發表于 08-06 16:56 ?79次下載
    FPGA/SOPC<b class='flag-5'>開發</b><b class='flag-5'>快速</b><b class='flag-5'>入門</b>教程

    基于BlueNRG開發手冊

    STM32單片機基于BlueNRG開發手冊
    發表于 11-25 14:55 ?90次下載

    CC2640 SDK應用入門教程二

    CC2640 SDK開發套件的基本入門教程,主要介紹了如何利用SDK工具實現藍牙操控,通過手機APP來實現LED燈的開關、閃爍、亮度調節及其他場景功能的掌握。
    發表于 02-14 17:21 ?71次下載

    ESP8266快速入門指南的詳細免費下載

    本文檔的主要內容詳細介紹的是ESP8266快速入門指南的詳細免費下載包括了:第 1 章 快速玩轉開發板 介紹如何使用開發板,燒錄可運行
    發表于 03-19 08:00 ?37次下載
    ESP8266<b class='flag-5'>快速</b><b class='flag-5'>入門</b>指南的詳細免費下載

    涂鴉標準模組MCU SDK開發流程

    的對接成本,MCU SDK 已搭建通訊及協議解析架構。將 MCU SDK 添加至自己的工程并配置相關信息后,既可以快速的完成 MCU 程序開發。在涂鴉 IoT 平臺通過自定義產品功能自
    發表于 10-28 20:36 ?12次下載
    涂鴉標準模組MCU <b class='flag-5'>SDK</b><b class='flag-5'>開發</b><b class='flag-5'>流程</b>

    ST BlueNRG藍牙開發平臺

    ST BlueNRG藍牙開發平臺
    發表于 12-08 13:51 ?20次下載
    ST <b class='flag-5'>BlueNRG</b>藍牙<b class='flag-5'>開發</b>平臺

    使用MicroPython開發ESP32(01):快速入門

    文章目錄為什么使用MicroPython開發ESP32快速入門開發板準備開發工具選擇固件下載與燒錄我的總結為什么使用MicroPython
    發表于 12-29 18:49 ?22次下載
    使用MicroPython<b class='flag-5'>開發</b>ESP32(01):<b class='flag-5'>快速</b><b class='flag-5'>入門</b>

    高級開發套件快速入門指南

    高級開發套件快速入門指南
    發表于 01-30 18:51 ?0次下載
    高級<b class='flag-5'>開發</b>套件<b class='flag-5'>快速</b><b class='flag-5'>入門</b>指南

    Evaluation SDK 4-1 快速入門指南

    Evaluation SDK 4-1 快速入門指南
    發表于 04-19 19:31 ?0次下載
    Evaluation <b class='flag-5'>SDK</b> 4-1 <b class='flag-5'>快速</b><b class='flag-5'>入門</b>指南

    高級開發套件快速入門指南

    高級開發套件快速入門指南
    發表于 07-03 20:20 ?0次下載
    高級<b class='flag-5'>開發</b>套件<b class='flag-5'>快速</b><b class='flag-5'>入門</b>指南

    鴻蒙開發實例【使用高德地圖鴻蒙SDK】(一)

    使用高德地圖鴻蒙SDK快速入門指南。
    的頭像 發表于 03-22 16:59 ?858次閱讀
    鴻蒙<b class='flag-5'>開發</b>實例【使用高德地圖鴻蒙<b class='flag-5'>SDK</b>】(一)
    微信百家乐官网群资源| 百乐坊百家乐官网娱乐城| 百家乐官网真人娱乐场开户注册| 百家乐代理网址| 风水24山头| 大中华百家乐的玩法技巧和规则| 大发888娱乐场 b8| 百家乐官网投注很好| 网上百家乐娱乐场| 大发888娱乐场1888| 澳门百家乐官网备用网址| 免费百家乐游戏机| 德州扑克读牌| 澳门百家乐官网赢钱公式不倒翁| 赌场百家乐赢钱| 赌场里的美少年| 布加迪百家乐官网的玩法技巧和规则| 百家乐路单走势图| E世博线上娱乐城| 大西洋百家乐官网的玩法技巧和规则| 百家乐是娱乐场| 百家乐官网赢的秘籍在哪| 百家乐八卦投注法| 平博娱乐| 做生意大门方位风水| 大发888官方 论坛| 金沙娱乐城| 好运来百家乐官网现金网| 百家乐官网科学打法| bet365代理| 百家乐官网视频百家乐官网| 百家乐官网视频双扣下载| 百家乐官网棋牌交| 百家乐官网正品| 百家乐投注信用最好的| 水果机破解器| 乐山市| 百家乐官网楼梯缆大全| 百家乐有作弊的吗| 全讯网xb112| k7百家乐官网最小投注|