本帖最后由 wws2002 于 2024-11-21 17:26 编辑
书接上回:STM32WB09KE测评】+进阶方向+BLE钥匙功能实验https://bbs.21ic.com/icview-3414504-1-1.html
在实现了利用钥匙端(手机)发送解锁和闭锁指令成功之后,经过摸索和百度,终于实现了读取BLE的RSSI值,主要可以参考这边应用文档:AN5270 STM32WB Bluetooth® Low Energy wireless interface
https://www.st.com/resource/en/application_note/an5270-stm32wb-bluetooth-low-energy-wireless-interface-stmicroelectronics.pdf
详细的解释了读取函数HCI_READ_RSSI 的用法,这里我做了一些弯路,下面一一道来:
HCI_READ_RSSI函数的详细参数:
tBleStatus hci_read_rssi(uint16_t Connection_Handle, int8_t* RSSI) 这个函数在ble_stack_user_cfg.c中定义,一定要留意这个RSSI的数据类型,我开始就定义错了,定义成unit8_t的无符号的了,然后读出来是错的,以为还有什么换算成负的RSSI,经过一番折腾,而且网上有很多文章也是定义的是错误的。后来仔细阅读发现是有符号整型 主要关注两个参数, BLE的连接句柄uint16_t Connection_Handle,返回RSSI的数据,这个是int数据类型,再次强调一下。返回数据没有定义,先不管。
然后还在P2P_SERVER_Notification这个函数中添加代码,在控制接闭锁的同时上报钥匙端的信号强调数据。分析可以看到P2P_SERVER_Notification这个函数的输入参数一个结构体指针:- typedef struct
- {
- P2P_SERVER_OpcodeEvt_t EvtOpcode;
- P2P_SERVER_Data_t DataTransfered;
- uint16_t ConnectionHandle;
- uint16_t AttributeHandle;
- uint8_t ServiceInstance;
- /* USER CODE BEGIN Service1_NotificationEvt_t */
- /* USER CODE END Service1_NotificationEvt_t */
- } P2P_SERVER_NotificationEvt_t;
其中第三个参数ConnectionHandle正好是BLE连接的句柄,可以直接适用,在定义一个RSSI返回值就可以了。
在函数开始位置定义RSSI返回值(再次提醒是int8),然后再收到开闭锁指令的位置读取rssi数据并通过串口打印出来(模拟发送给车身锁控单元),详细如下代码。
然后编译,下载运行,用手机APP连接STM32WB09KE评估板,调试串口可以看到获取的RSSI数据了。
|