Toggle navigation
首页
问答
文章
积分商城
专家
专区
更多专区...
文档中心
返回主站
搜索
提问
会员
中心
登录
注册
蓝牙BLE
SPI
RTT平台 Zephyr_Polling 软件包 BlueNRG2 SPI 使用说明
发布于 2023-09-21 00:05:33 浏览:716
订阅该版
[tocm] # RTT_Zephyr_Polling BlueNRG2 SPI 使用说明 >项目软件包地址:[RTT_PACKAGE_zephyr_polling](https://github.com/bobwenstudy/RTT_PACKAGE_zephyr_polling) 在RT-Thread平台下,利用 BlueNRG2 蓝牙芯片运行 RTT_Zephyr_Polling 协议栈。使用 SPI 作为 HCI 传输方式。 这里开发和测试使用的都是 NUCLEO-L476RG 硬件平台,其他 MCU 硬件理论上只需按实际情况在 RTT 中修改引脚等设置。 ## 硬件连接:NUCLEO-L476RG 使用 NUCLEO-L476RG 开发板配套的扩展板连接 BlueNRG2,使用 SPI 作为 HCI 传输方式,运行 RTT_Zephyr_Polling 蓝牙协议栈。 如下图连接好硬件即可: ![ba62.jpg](https://oss-club.rt-thread.org/uploads/20230920/82c022503e28c2c3ca622ed39ec6ba62.jpg.webp) ## 搭建 RT-Thread Studio 环境 参考[快速开始](https://www.rt-thread.org/document/site/#/development-tools/rtthread-studio/um/studio-user-begin) 完成 RT-Thread studio 环境的搭建。 ## 创建项目工程 创建 STM32L476 ST-NUCLEO 示例工程 ![image-20230904201553630.png](https://oss-club.rt-thread.org/uploads/20230920/46ad93ac552e9f527e483a477326adbd.png.webp) **打开 SPI1 BUS**(默认使用SPI的bus1,可在Kconfig中修改),保存 ![image-20230904201831081.png](https://oss-club.rt-thread.org/uploads/20230920/54a0f4701282bdeb4867288135d3aa0f.png.webp) >这里RTT代码因为版本问题(v5.0.1, 如果使用v4.0.5不会有问题),编译会报错。`RT_WEAK` 字段在新版已经被 `rt_weak` 替换。这里替换一下就可以正常编译。 ![image-20230904202031215.png](https://oss-club.rt-thread.org/uploads/20230920/e20e8a2184bf0f522442c5764bc90de3.png.webp) ## SPI引脚修改 当前在RTT的BSP中 NUCLEO-L476RG 的默认的`SPI1_SCK`为`PA5`。而在实际的硬件连接中时,SPI1 连接的`SCK`引脚为`PB3`。将其修改为`PB3`,保存,generate code。这里可能需要将CubeMX多余的生成文件手动删除。 打开项目工程中的 cubemx_config.ioc,修改SPI1的引脚: ![image-20230904195935890.png](https://oss-club.rt-thread.org/uploads/20230920/54b87711d019ebd9573750031022f89e.png.webp) ## zephyr_polling 软件包配置 在 RTT Studio 的软件包中心添加zephyr_polling软件包,配置项如下: ![2023-09-20-20-09-49.png](https://oss-club.rt-thread.org/uploads/20230920/c514eb054f46990176cc8d5e457a2af6.png.webp) ## 配置说明: 蓝牙芯片选择: 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,可以看到项目资源目录成功添加。 ![image-20230904202821655.png](https://oss-club.rt-thread.org/uploads/20230920/fd14bd32a76c11e931928e8f70bc117b.png.webp) 编译项目代码,下载。 ## Beacon例程运行 上一步中已经配置使用 Beacon 例程。 协议栈启动入口已导出为 cmd,输入`zephyr`开启一个线程运行Beacn例程。 ```C++ static int zephyr(void) { static rt_thread_t tid = RT_NULL; rt_kprintf("zephyr_polling_init \r\n"); 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"); ``` 运行时串口打印如下: ```shell 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) ``` 其中 ```shell >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 配置参数。 ```shell > 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 搜索蓝牙信号,即可成功观察到蓝牙设备地址为` 02:80:e1:00:00:f5 `的beacon设备。
## 心率例程运行 ### 软件包配置 软件包配置如下,选择 peripheral_hr(外围设备_心率): ![image-20230904202537973.png](https://oss-club.rt-thread.org/uploads/20230920/710af648f2b178acd894a7db437e126c.png.webp) ### 运行 心率例程主要提供了两个 GATT 服务:电池电量、心率数据。其中电池电量服务返回的是伪电量值,数值从 100% 随时间递减到 0% 循环;心率服务返回的是随机心率数据(单位bpm)。 输入`zephyr`运行Example 使用nRF Connect软件连接蓝牙:
获取心率服务和电池电量服务: ![image-20230904203746912.png](https://oss-club.rt-thread.org/uploads/20230920/62c5702fa6a93d3a2ec42a342df0478f.png.webp) 此时串口输出: ```shell 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 ``` ## 数据吞吐例程运行与测试 ### 软件包配置 ![2023-09-20-22-24-11.png](https://oss-club.rt-thread.org/uploads/20230920/316f10f5c13ea1636cbc77bf354c23fd.png.webp) ### 运行 数据吞吐例程内部逻辑是将接收到的数据转发回中心设备。主要提供了两个 GATT 服务:write 和 notify。前者用于接收中心设备发来的数据,后者用于向连接的中心设备发送数据。 输入`zephyr`运行Example。 手机端使用 BLE调试宝(类似的BLE APP应该都行)连接设备,开启notify服务:
连续发送数据:
收发数据没有丢包。 串口打印如下: ```shell 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 ```
0
条评论
默认排序
按发布时间排序
登录
注册新账号
关于作者
paradox
这家伙很懒,什么也没写!
文章
7
回答
1
被采纳
0
关注TA
发私信
相关文章
1
BBB的SPI驱动
2
求个SPI上挂两个或多个设备的使用例子
3
SPI设备有个bug
4
spi flash 的fatfs使用一段时间后读写文件出现故障
5
SPI驱动
6
请教rt_spi_configure函数理解
7
SPI FLASH挂载的问题
8
SPI-FLASH 文件系统 SPIFFS
9
求助一个完整的 spi flash 驱动
10
关于同时使用文件系统与SPI FLASH的问题
推荐文章
1
RT-Thread应用项目汇总
2
玩转RT-Thread系列教程
3
国产MCU移植系列教程汇总,欢迎查看!
4
机器人操作系统 (ROS2) 和 RT-Thread 通信
5
五分钟玩转RT-Thread新社区
6
【技术三千问】之《玩转ART-Pi》,看这篇就够了!干货汇总
7
关于STM32H7开发板上使用SDIO接口驱动SD卡挂载文件系统的问题总结
8
STM32的“GPU”——DMA2D实例详解
9
RT-Thread隐藏的宝藏之completion
10
【ART-PI】RT-Thread 开启RTC 与 Alarm组件
热门标签
RT-Thread Studio
串口
Env
LWIP
SPI
AT
Bootloader
Hardfault
CAN总线
FinSH
ART-Pi
USB
DMA
文件系统
RT-Thread
SCons
RT-Thread Nano
线程
MQTT
STM32
RTC
FAL
rt-smart
I2C_IIC
ESP8266
UART
WIZnet_W5500
ota在线升级
PWM
cubemx
flash
freemodbus
BSP
packages_软件包
潘多拉开发板_Pandora
定时器
ADC
flashDB
GD32
socket
编译报错
中断
Debug
rt_mq_消息队列_msg_queue
SFUD
msh
keil_MDK
ulog
C++_cpp
MicroPython
本月问答贡献
xusiwei1236
8
个答案
2
次被采纳
踩姑娘的小蘑菇
1
个答案
2
次被采纳
用户名由3_15位
7
个答案
1
次被采纳
bernard
4
个答案
1
次被采纳
RTT_逍遥
3
个答案
1
次被采纳
本月文章贡献
聚散无由
2
篇文章
15
次点赞
catcatbing
2
篇文章
5
次点赞
Wade
2
篇文章
4
次点赞
Ghost_Girls
1
篇文章
6
次点赞
YZRD
1
篇文章
2
次点赞
回到
顶部
发布
问题
投诉
建议
回到
底部