e = app_timer_stop(m_timer1); //停止定时器
12 APP_ERROR_CHECK(err_code);
13 break;
14 case BLE_SEND_CMD :
15 send_state = true; //允许发送
16 err_code = app_timer_start(m_timer1, TIMER_INTERVAL, NULL); //启动定时器
17 APP_ERROR_CHECK(err_code);
18 break;
19 default:
20 SEGGER_RTT_printf(0, "Invalid command\n");// 此处打印信息
21 break;
22 }
23 }
整个程序的框架基本上就是这样,通过蓝牙接收的命令打开定时器,定时器中断将发送函数加入调度,主循环轮转到发送时进行数据发送
通过修改 length 改变发送包的大小
通过修改TIMER_INTERVAL 修改定时器时间
两者配合改变数据发送速率。
到了这里,就得修改ATT_MTU了,不然244个字节根本发不了,打开sdk_config.h
1 // <h> nRF_SoftDevice
2
3 //==========================================================
4 // <e> NRF_SDH_BLE_ENABLED - nrf_sdh_ble - SoftDevice BLE event handler
5 //==========================================================
6 #ifndef NRF_SDH_BLE_ENABLED
7 #define NRF_SDH_BLE_ENABLED 1
8 #endif
9 // <h> BLE Stack configuration - Stack configuration parameters
10
11 // <i> These values are not used directly by the SoftDevice handler but the application or other libraries might depend on them.
12 // <i> Keep them up-to-date with the desired configuration.
13 //==========================================================
14 // <o> NRF_SDH_BLE_PERIPHERAL_LINK_COUNT - Maximum number of peripheral links.
15 #ifndef NRF_SDH_BLE_PERIPHERAL_LINK_COUNT
16 #define NRF_SDH_BLE_PERIPHERAL_LINK_COUNT 1
17 #endif
18
19 // <o> NRF_SDH_BLE_CENTRAL_LINK_COUNT - Maximum number of central links.
20 #ifndef NRF_SDH_BLE_CENTRAL_LINK_COUNT
21 #define NRF_SDH_BLE_CENTRAL_LINK_COUNT 0
22 #endif
23
24 // <o> NRF_SDH_BLE_TOTAL_LINK_COUNT - Maximum number of total concurrent connections using the default configuration.
25 #ifndef NRF_SDH_BLE_TOTAL_LINK_COUNT
26 #define NRF_SDH_BLE_TOTAL_LINK_COUNT 1
27 #endif
28
29 // <o> NRF_SDH_BLE_GAP_EVENT_LENGTH - The time set aside for this connection on every connection interval in 1.25 ms units.
30 #ifndef NRF_SDH_BLE_GAP_EVENT_LENGTH
31 #define NRF_SDH_BLE_GAP_EVENT_LENGTH 8 //默认值3
32 #endif
33
34 // <o> NRF_SDH_BLE_GATT_MAX_MTU_SIZE - Static maximum MTU size.
35 #ifndef NRF_SDH_BLE_GATT_MAX_MTU_SIZE
36 #define NRF_SDH_BLE_GATT_MAX_MTU_SIZE 247 //默认值23
37 #endif
38
39 // <o> NRF_SDH_BLE_GATTS_ATTR_TAB_SIZE - Attribute Table size in bytes. The size must be a multiple of 4.
40 #ifndef NRF_SDH_BLE_GATTS_ATTR_TAB_SIZE
41 #define NRF_SDH_BLE_GATTS_ATTR_TAB_SIZE 1408
42 #endif
43
44 // <o> NRF_SDH_BLE_VS_UUID_COUNT - The number of vendor-specific UUIDs.
45 #ifndef NRF_SDH_BLE_VS_UUID_COUNT
46 #define NRF_SDH_BLE_VS_UUID_COUNT 1 //默认为0
47 #endif
这里修改了3个地方,
NRF_SDH_BLE_GAP_EVENT_LENGTH 这个是每个间隔预留给连接的时间
NRF_SDH_BLE_GATT_MAX_MTU_SIZE 这个就是最大MTU了
NRF_SDH_BLE_VS_UUID_COUNT 这个因为我加了两个自定义服务,所以也要改成1
接下来通过修改 length 和 TIMER_INTERVAL 编译下载后来测试速率了
注意的是,因为修改过NRF_SDH_BLE_GATT_MAX_MTU_SIZE,所以RAM的地址会发生改变,打开sdk_config.h,修改
1 //==========================================================
2 // <e> NRF_LOG_ENABLED - Logging module for nRF5 SDK
3 //==========================================================
4 #ifndef NRF_LOG_ENABLED
5 #define NRF_LOG_ENABLED 1
6 #endif