930电子网

 找回密码
 立即注册
艾克姆科技推出最新产品STC32G12K128开发板
查看: 21794|回复: 1

蓝牙开发常见问题24:nRF52xx默认发射功率是多少?如何修改发射功率?

[复制链接]

52

主题

354

帖子

6545

积分

版主

Rank: 7Rank: 7Rank: 7

积分
6545
发表于 2019-6-6 09:49:23 | 显示全部楼层 |阅读模式
问题1:nRF52xx默认发射功率是多少?
解答:nRF52832、nRF52810、nRF52840的默认发射功率都是0dBm,也就是如果您没有修改过发射功率,除非特殊说明,否则实验例子使用的发射都是默认值0dBm。

问题2:如何修改发射功率?
解答:各个版本的协议栈修改发射功率有所不同,这里以6.xx版本的协议栈为例说明修改的方法。6.xx版本的协议栈修改发射功率时需要根据角色去修改,也就是广播、连接和扫描的发射功率是分开改的,这种做法无疑增加了程序应用的灵活性,下面是修改的示例。

示例1:BLE串口透传中修改广播发射功率为-40dBm。

  1. int main(void)
  2. {
  3.     bool erase_bonds;

  4.     // Initialize.
  5.     uart_init();
  6.     log_init();
  7.     timers_init();
  8.     buttons_leds_init(&erase_bonds);
  9.     power_management_init();
  10.     ble_stack_init();
  11.     gap_params_init();
  12.     gatt_init();
  13.     services_init();
  14.     advertising_init();
  15.     conn_params_init();

  16.     // Start execution.
  17.     printf("\r\nUART started.\r\n");
  18.     NRF_LOG_INFO("Debug logging for UART over RTT started.");
  19.        
  20.         //设置广播的发射功率为-40dBm
  21.         //nRF52832可设置的值为:4,3,0,-4,-8,-12,-16,-20,-30,-40
  22.         //nRF52840可设置的值为:8,7,6,5,4,3,2,0,-4,-8,-12,-16,-20,-30,-40
  23.     uint32_t err_code = sd_ble_gap_tx_power_set(BLE_GAP_TX_POWER_ROLE_ADV, m_advertising.adv_handle, -40);
  24.     APP_ERROR_CHECK(err_code);
  25.                
  26.     advertising_start();

  27.     // Enter main loop.
  28.     for (;;)
  29.     {
  30.         idle_state_handle();
  31.     }
  32. }
复制代码
示例2:BLE串口透传中修改连接发射功率为4dBm。

  1. static void ble_evt_handler(ble_evt_t const * p_ble_evt, void * p_context)
  2. {
  3. uint32_t err_code;

  4.     switch (p_ble_evt->header.evt_id)
  5.     {
  6.         case BLE_GAP_EVT_CONNECTED:
  7.             NRF_LOG_INFO("Connected");
  8.             err_code = bsp_indication_set(BSP_INDICATE_CONNECTED);
  9.             APP_ERROR_CHECK(err_code);
  10.             m_conn_handle = p_ble_evt->evt.gap_evt.conn_handle;
  11.             err_code = nrf_ble_qwr_conn_handle_assign(&m_qwr, m_conn_handle);
  12.             APP_ERROR_CHECK(err_code);
  13.                                
  14.                                     //设置连接的发射功率为4dBm
  15.                   //nRF52832可设置的值为:4,3,0,-4,-8,-12,-16,-20,-30,-40
  16.                   //nRF52840可设置的值为:8,7,6,5,4,3,2,0,-4,-8,-12,-16,-20,-30,-40
  17.                   err_code = sd_ble_gap_tx_power_set(BLE_GAP_TX_POWER_ROLE_CONN, m_conn_handle, 4);
  18.                   APP_ERROR_CHECK(err_code);
  19.             break;

  20.         case BLE_GAP_EVT_DISCONNECTED:
  21.             NRF_LOG_INFO("Disconnected");
  22.             // LED indication will be changed when advertising starts.
  23.             m_conn_handle = BLE_CONN_HANDLE_INVALID;
  24.             break;

  25.         case BLE_GAP_EVT_PHY_UPDATE_REQUEST:
  26.         {
  27.             NRF_LOG_DEBUG("PHY update request.");
  28.             ble_gap_phys_t const phys =
  29.             {
  30.                 .rx_phys = BLE_GAP_PHY_AUTO,
  31.                 .tx_phys = BLE_GAP_PHY_AUTO,
  32.             };
  33.             err_code = sd_ble_gap_phy_update(p_ble_evt->evt.gap_evt.conn_handle, &phys);
  34.             APP_ERROR_CHECK(err_code);
  35.         } break;

  36.         case BLE_GAP_EVT_SEC_PARAMS_REQUEST:
  37.             // Pairing not supported
  38.             err_code = sd_ble_gap_sec_params_reply(m_conn_handle, BLE_GAP_SEC_STATUS_PAIRING_NOT_SUPP, NULL, NULL);
  39.             APP_ERROR_CHECK(err_code);
  40.             break;

  41.         case BLE_GATTS_EVT_SYS_ATTR_MISSING:
  42.             // No system attributes have been stored.
  43.             err_code = sd_ble_gatts_sys_attr_set(m_conn_handle, NULL, 0, 0);
  44.             APP_ERROR_CHECK(err_code);
  45.             break;

  46.         case BLE_GATTC_EVT_TIMEOUT:
  47.             // Disconnect on GATT Client timeout event.
  48.             err_code = sd_ble_gap_disconnect(p_ble_evt->evt.gattc_evt.conn_handle,
  49.                                              BLE_HCI_REMOTE_USER_TERMINATED_CONNECTION);
  50.             APP_ERROR_CHECK(err_code);
  51.             break;

  52.         case BLE_GATTS_EVT_TIMEOUT:
  53.             // Disconnect on GATT Server timeout event.
  54.             err_code = sd_ble_gap_disconnect(p_ble_evt->evt.gatts_evt.conn_handle,
  55.                                              BLE_HCI_REMOTE_USER_TERMINATED_CONNECTION);
  56.             APP_ERROR_CHECK(err_code);
  57.             break;

  58.         default:
  59.             // No implementation needed.
  60.             break;
  61.     }
  62. }
复制代码




回复

使用道具 举报

0

主题

1

帖子

14

积分

新手上路

Rank: 1

积分
14
发表于 2019-7-17 18:16:30 | 显示全部楼层
服了……
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|手机版|官方淘宝店|930电子网 ( 皖ICP备16000695号-2 )

GMT+8, 2024-12-4 16:33 , Processed in 0.063264 second(s), 22 queries .

快速回复 返回顶部 返回列表