在RT-Thread平臺下,利用 BlueNRG2 藍牙芯片運行 RTT_Zephyr_Polling 協議棧。使用 SPI 作為 HCI 傳輸方式。
這里開發和測試使用的都是 NUCLEO-L476RG 硬件平臺,其他 MCU 硬件理論上只需按實際情況在 RTT 中修改引腳等設置。
硬件連接:NUCLEO-L476RG
使用 NUCLEO-L476RG 開發板配套的擴展板連接 BlueNRG2,使用 SPI 作為 HCI 傳輸方式,運行 RTT_Zephyr_Polling 藍牙協議棧。
如下圖連接好硬件即可:
搭建 RT-Thread Studio 環境
參考快速開始 完成 RT-Thread studio 環境的搭建。
創建項目工程
創建 STM32L476 ST-NUCLEO 示例工程
打開 SPI1 BUS(默認使用SPI的bus1,可在Kconfig中修改),保存
這里RTT代碼因為版本問題(v5.0.1 202309),編譯會報錯。RT_WEAK 字段在新版已經被 rt_weak 替換。這里替換一下就可以正常編譯。
SPI引腳修改
當前在RTT的BSP中 NUCLEO-L476RG 的默認的SPI1_SCK為PA5。而在實際的硬件連接中時,SPI1 連接的SCK引腳為PB3。將其修改為PB3,保存,generate code。這里可能需要將CubeMX多余的生成文件手動刪除。
打開項目工程中的 cubemx_config.ioc,修改SPI1的引腳:
zephyr_polling 軟件包配置
在 RTT Studio 的軟件包中心添加zephyr_polling軟件包,配置項如下:
配置說明:
藍牙芯片選擇: bluenrg2
運行平臺選擇: 使用 SPI 作為 HCI 通信接口
HCI 傳輸設置:選擇使用 rt-thread SPI。這里使用的硬件平臺是 STM32L476 ST-NUCLEO,且使用配套擴展板連接,使用默認配置即可。
如果換用其他硬件環境,但仍然使用 bluenrg2 藍牙芯片,需要根據實際情況修改:SPI BUS(SPI總線)、SPI INDEX(SPI設備號)等。其中特別要注意,bluenrg2 的 SPI 通信除了MISO、MOSI、SCK三個基本信號線外,還需要一個由 MCU 控制的 CS_PIN 和一個由 bluenrg2 控制的 IRQ_PIN。這兩個引腳需要根據實際情況在這里設置。
這里先使用Beacon信標例程進行測試。保存設置,等待文件更新。
刷新 setting,可以看到項目資源目錄成功添加。
編譯項目代碼,下載。
Beacon例程運行
上一步中已經配置使用 Beacon 例程。
協議棧啟動入口已導出為 cmd,輸入zephyr開啟一個線程運行Beacn例程。
static int zephyr(void) {
static rt_thread_t tid = RT_NULL;
rt_kprintf("zephyr_polling_init rn");
tid = rt_thread_create("zephyr_polling_main",
zephyr_polling_main, RT_NULL,
4096,
5, 5);
if (tid != RT_NULL)
{
rt_thread_startup(tid);
}
return 0;
}
// INIT_APP_EXPORT(zephyr_polling_init);
MSH_CMD_EXPORT(zephyr, "zephyr_polling start");
運行時串口打印如下:
initialize rti_board_start:0 done
initialize drv_pm_hw_init:0 done
initialize rt_hw_spi_init:0 done
| /
RT - Thread Operating System
/ | 5.0.1 build Sep 20 2023 21:08:57
2006 - 2022 Copyright by RT-Thread team
do components initialization.
initialize rti_board_end:0 done
initialize stm32l4_hw_lptim_init:0 done
initialize finsh_system_init:0 done
msh >zephyr
zephyr_polling_init
bt_init_hci_driver
SPI_init_process device_name: spi10, spi_name: spi1, rate: 1000000, databits: 8, LSB_MSB: 1, Master_Slave: 0, CPOL: 0, CPHA: 1
SPI_init_process cs_pin_num: 1, irq_pin_num: 0
hci_driver_open, SPI_config_finish
I: (bt_hci_core)hci_init():3230: work start.
msh >prepare_event_process, step: 1
prepare_event_process, step: 2
prepare_event_process, step: 3
prepare_event_process, step: 4
prepare_event_process, step: 5
I: (bt_hci_core)hci_init_end():3205: work end.
I: (bt_hci_core)bt_dev_show_info():3008: Identity: 02:80:e1:00:00:f5 (public)
I: (bt_hci_core)bt_dev_show_info():3042: HCI: version 5.2 (0x0b) revision 0x1222, manufacturer 0x0030
I: (bt_hci_core)bt_dev_show_info():3044: LMP: version 5.2 (0x0b) subver 0x0015
Bluetooth initialized
Beacon started, advertising as 02:80:e1:00:00:f5 (public)
其中
SPI_init_process device_name: spi10, spi_name: spi1, rate: >1000000, databits: 8, LSB_MSB: 1, Master_Slave: 0, CPOL: 0, CPHA: 1
SPI_init_process cs_pin_num: 1, irq_pin_num: 0
hci_driver_open, SPI_config_finish
是 HCI 使用的 SPI 配置參數。
prepare_event_process, step: 1
prepare_event_process, step: 2
prepare_event_process, step: 3
prepare_event_process, step: 4
prepare_event_process, step: 5
是芯片廠商設計的 bluenrg2 芯片啟動流程(bluenrg2 不需要boot流程,但是有一系列的prepare流程)
手機端使用 nRF Connect 搜索藍牙信號,即可成功觀察到藍牙設備地址為0280e10000:f5的beacon設備。
心率例程運行
軟件包配置
軟件包配置如下,選擇 peripheralhr(外圍設備心率):
運行
心率例程主要提供了兩個 GATT 服務:電池電量、心率數據。其中電池電量服務返回的是偽電量值,數值從 100% 隨時間遞減到 0% 循環;心率服務返回的是隨機心率數據(單位bpm)。
輸入zephyr運行Example
使用nRF Connect軟件連接藍牙:
獲取心率服務和電池電量服務:
此時串口輸出:
initialize rti_board_start:0 done
initialize drv_pm_hw_init:0 done
initialize rt_hw_spi_init:0 done
| /
RT - Thread Operating System
/ | 5.0.1 build Sep 20 2023 22:16:27
2006 - 2022 Copyright by RT-Thread team
do components initialization.
initialize rti_board_end:0 done
initialize stm32l4_hw_lptim_init:0 done
initialize finsh_system_init:0 done
msh >zephyr
zephyr_polling_init
bt_init_hci_driver
SPI_init_process device_name: spi10, spi_name: spi1, rate: 1000000, databits: 8, LSB_MSB: 1, Master_Slave: 0, CPOL: 0, CPHA: 1
SPI_init_process cs_pin_num: 1, irq_pin_num: 0
hci_driver_open, SPI_config_finish
I: (bt_hci_core)hci_init():3230: work start.
msh >prepare_event_process, step: 1
prepare_event_process, step: 2
prepare_event_process, step: 3
prepare_event_process, step: 4
prepare_event_process, step: 5
I: (bt_hci_core)hci_init_end():3205: work end.
E: (bt_smp)smp_self_test():5695: smp_self_test start
I: (bt_hci_core)bt_dev_show_info():3008: Identity: 02:80:e1:00:00:f5 (public)
I: (bt_hci_core)bt_dev_show_info():3042: HCI: version 5.2 (0x0b) revision 0x1222, manufacturer 0x0030
I: (bt_hci_core)bt_dev_show_info():3044: LMP: version 5.2 (0x0b) subver 0x0015
Bluetooth initialized
Advertising successfully started
Connected
BAS Notifications enabled
HRS notifications enabled
數據吞吐例程運行與測試
軟件包配置
運行
數據吞吐例程內部邏輯是將接收到的數據轉發回中心設備。主要提供了兩個 GATT 服務:write 和 notify。前者用于接收中心設備發來的數據,后者用于向連接的中心設備發送數據。
輸入zephyr運行Example。
手機端使用 BLE調試寶(類似的BLE APP應該都行)連接設備,開啟notify服務:
連續發送數據:
收發數據沒有丟包。
串口打印如下:
initialize rti_board_start:0 done
initialize drv_pm_hw_init:0 done
initialize rt_hw_spi_init:0 done
| /
RT - Thread Operating System
/ | 5.0.1 build Sep 20 2023 22:39:47
2006 - 2022 Copyright by RT-Thread team
do components initialization.
initialize rti_board_end:0 done
initialize stm32l4_hw_lptim_init:0 done
initialize finsh_system_init:0 done
msh >zephyr
zephyr_polling_init
bt_init_hci_driver
SPI_init_process device_name: spi10, spi_name: spi1, rate: 1000000, databits: 8, LSB_MSB: 1, Master_Slave: 0, CPOL: 0, CPHA: 1
SPI_init_process cs_pin_num: 1, irq_pin_num: 0
hci_driver_open, SPI_config_finish
I: (bt_hci_core)hci_init():3230: work start.
msh >prepare_event_process, step: 1
prepare_event_process, step: 2
prepare_event_process, step: 3
prepare_event_process, step: 4
prepare_event_process, step: 5
I: (bt_hci_core)hci_init_end():3205: work end.
E: (bt_smp)smp_self_test():5695: smp_self_test start
I: (bt_hci_core)bt_dev_show_info():3008: Identity: 02:80:e1:00:00:f5 (public)
I: (bt_hci_core)bt_dev_show_info():3042: HCI: version 5.2 (0x0b) revision 0x1222, manufacturer 0x0030
I: (bt_hci_core)bt_dev_show_info():3044: LMP: version 5.2 (0x0b) subver 0x0015
Bluetooth initialized
throughput_svc_init()
Advertising successfully started
I: (bt_hci_core)bt_sleep_prepare_work():4040: start
I: (bt_hci_core)bt_sleep_prepare_work():4046: end
I: (bt_hci_core)bt_sleep_wakeup_work_start():4058: start
I: (bt_hci_core)bt_sleep_wakeup_work_start():4061: end
I: (bt_hci_core)bt_sleep_wakeup_work_end():4072: start
I: (bt_hci_core)bt_sleep_wakeup_work_end():4074: end
Connected
-
藍牙芯片
+關注
關注
17文章
376瀏覽量
46055 -
SPI接口
+關注
關注
0文章
258瀏覽量
34387 -
RT-Thread
+關注
關注
31文章
1291瀏覽量
40169 -
MCU控制器
+關注
關注
0文章
27瀏覽量
6885 -
STM32L476
+關注
關注
0文章
7瀏覽量
3789
發布評論請先 登錄
相關推薦
評論