【蓝牙小知识】—蓝牙常用基础函数接口

-------------------------------------------------------------------------------------------------------------------------------------

1、主机和从机传输数据的接口
从机接收数据的处理函数
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
从机发送通知任务给主机,一秒通知一次,单位625us,参数传入1600

主机写数据给从机,一秒一次

主机接收从机的通知数据的处理函数

 

2、蓝牙主机开启扫描设备

 

3、蓝牙主机取消扫描设备

 

4、蓝牙从机修改配对模式,添加密钥

 

5、动态修改发射功率

 

6、主机扫描设备时,将广播包数据和扫描应答包区分,得到设备的蓝牙名称

 

7、蓝牙从机/蓝牙主机主动断开连接设备

 

8、蓝牙更新扫描应答包和蓝牙广播包

 

9、CH582蓝牙获取MCU ID号

 

10、主机的扫描函数

GAP_SetParamValue(TGAP_DISC_SCAN, DEFAULT_SCAN_DURATION);是设置单次扫描时长,默认例程是1.5s
扫描间隔:
GAP_SetParamValue(TGAP_DISC_SCAN_INT, 30);
扫描窗口:
GAP_SetParamValue(TGAP_DISC_SCAN_WIND, 10);

 
11、从机的广播间隔

 

12、从机的连接间隔

 

13、开启DC-DC降低功耗

 

13、开启广播和关闭广播

 

14、获取芯片唯一的MAC地址

uint8_t MacAddr[6];
GetMACAddress(MacAddr);

 

15、调整2.4G发射功率
CONFIG.h中的配置宏 #define BLE_TX_POWER LL_TX_POWEER_0_DBM
LL_TX_POWEER_0_DBM 表示 0dbm发射功率。

 

16、调整晶振内置匹配电容
void HSECFG_Capacitance(HSECapTypeDef c); //外部高频32MHZ
void LSECFG_Capacitance(LSECapTypeDef c); //外部低频32.768KHZ

 

17、单载波
 可以在RF例程中初始化的时候,添加单载波的函数进行发送

 

17、AES加解密函数

 

18、查找具体handle值对应的属性

 

19、中断优先级配置

 

20、蓝牙主机发起连接

 extern bStatus_t GAPRole_CentralEstablishLink( uint8_t highDutyCycle, uint8_t whiteList, uint8_t addrTypePeer, uint8_t *peerAddr );

 

21、蓝牙串口 BLE_UART 的接收和发送数据接口

接收BLE蓝牙的数据,发送到UART串口中,

数据值——p_evt->data.p_data,

数据长度—— p_evt->data.length

 

手机蓝牙连接BLE_UART的蓝牙,发送数据给BLE_UART。

  通过回调函数ble_uart_add_service处理的,在回调函数on_bleuartServiceEvt中通过app_uart_tx_data将write的数据传递给app_uart_tx_fifo,然后通过app_drv_fifo_read_to_same_addr函数将app_uart_tx_fifo再将数据传递给串口3的发送保持寄存器R8_UART3_THR进行数据的发送

手机蓝牙连接BLE_UART的蓝牙,,BLE_UART发送数据给手机蓝牙

  主循环里的app_uart_process()一直在查询uart_rx_flag,uart_rx_flag为1时会调用tmos_start_task(Peripheral_TaskID, UART_TO_BLE_SEND_EVT, 2);任务将串口接收到的数据通过蓝牙发送出去,

  当串口中断会判断是否已经接收到串口发送过来的数据,接收到数据后,uart_rx_flag标志位至1。将串口发送过来的数据,用data接收,

利用app_drv_fifo_write_from_same_addr 函数,FIFO操作函数,用于从同一个地址写入数据,接收到的data数据写入接收FIFO app_uart_rx_fifo中。

 在主函数一直循环的app_uart_process()中,一直判断uart_rx_flag为1时会调用tmos_start_task(Peripheral_TaskID, UART_TO_BLE_SEND_EVT, 2);

   在TMOS任务中,UART_TO_BLE_SEND_EVT任务中进行蓝牙发送数据,先回判断是否notify通知是否准备好。,如果没有连接到对应的notify的handle值,就会清空接收的FIFO

   然后会判断FIFO长度,调用 app_drv_fifo_read 函数从FIFO中读取数据。读取的数据将被存储在 to_test_buffer 指向的缓冲区中

  在FIFo读取到数据之后, 会先读取到FIFO的数据长度,分配一个内存,内存分配成功之后。

  将从FIFO中读取的to_test_buffer数据复制到分配的内存noti.pValue。

  调用 ble_uart_notify 函数发送BLE通知

  如果BLE通知发送失败,会释放之前申请的内存,重新启动任务,但是如果发送成功,会重置读取到长度。

  内存分配失败之后,重新重启任务。

   如果是发送失败的情况下,会进入到case SEND_TO_BLE_SEND_FAILED中,重新分配内存,重新从FIFO中读取的to_test_buffer数据复制到分配的内存noti.pValue。然后再进行发送蓝牙BLE通知。

   将串口TX发送来的数据,先中断接收后,uart_rx_flag串口接收标志位为1后,启动UART_TO_BLE_SEND_EVT任务,在TMOS任务中,将存放串口数据的数组to_test_buffer,通过tmos_memcpy(req.pValue, to_test_buffer, req.len); 将串口数据复制到req.pValue之后,蓝牙发送这个req.pValue数组值。

 

 

posted on 2024-05-09 11:14  凡仕  阅读(588)  评论(0)    收藏  举报