NRF52832开发代码基础配置以及Segger embedded studio 工程添加文件配置方法

工程编号和芯片对应关系

  1. pca10040 – nRF52832
  2. pca10040e – nRF52810
  3. pca10056 – nRF52840
  4. pca10056e – nRF52811
  5. pca10100 – nRF52833
  6. pca10100e – nRF52820

1.设置串口映射引脚

在使用NRF52832的模组测试官方给的串口例程的时候,发现当改了串口的引脚号之后,就不会出现广播。

解决方法: nrfx_uarte.c文件中,修改函数

 nrf_gpio_cfg_input(p_config->pselcts, NRF_GPIO_PIN_PULLUP);引脚状态为上拉,因为模块的引脚当串口使用的时候是悬空的,所以必须要有上拉才能有稳定的信号。

 

2.广播设置

路径nRF5_SDK_13.0.0_04a0bfd\examples\ble_peripheral\ble_app_uart

通过修改广播的发现模式设置nrf52832一直广播

BLE_GAP_ADV_FLAGS_LE_ONLY_LIMITED_DISC_MODE:有限可发现模式,不支持BR/EDR。

BLE_GAP_ADV_FLAGS_LE_ONLY_GENERAL_DISC_MODE:一般可发现模式,不支持BR/EDR。

有限可发现模式和一般可发现模式的主要区别是:

有限可发现模式有时间的限制,一般维持的时间是30秒,而一般可发现模式没有时间的限制。

有限可发现模式广播的间隔比一般可发现模式小。 从时间的限制上,我们可以看出有限可发现模式对连接的迫切性和目的性比一般可发现模式高,一个处于有限可发现模式的设备正在广播,那么他一定是刚被用户操作过并且极希望被连接。 一般情况下,设备首次开机、按下连接按钮,设备进入有限可发现模式比较合适。如果在有限可发现模式时间内没有被连接,可以转入一般可发现模式。 如果我们希望设备在没有被连接时一直保持广播,那么应该使用一般可发现模式,因为一般可发现模式是没有时间限制的。

在advertising_init()函数中修改,

将      advdata.flags = BLE_GAP_ADV_FLAGS_LE_ONLY_LIMITED_DISC_MODE

修改为 advdata.flags= BLE_GAP_ADV_FLAGS_LE_ONLY_GENERAL_DISC_MODE

然后修改广播超时时间为0

#define APP_ADV_TIMEOUT_IN_SECONDS      0

2.1 广播数据代码部分记录

在广播初始化的函数中,如果要修改官方工程默认的参数,需要调用协议闭源函数;

static void advertising_init(void)

{

    uint32_t               err_code;

    ble_advertising_init_t init;

    ble_advdata_conn_int_t adv_conn_params;

    int8_t tx_power_level           =TX_POWER_LEVEL;//设置发射功率

    memset(&init, 0, sizeof(init));

    init.advdata.name_type          = BLE_ADVDATA_FULL_NAME;//广播蓝牙名

    init.advdata.include_appearance = true;//广播外观

    init.advdata.flags              = BLE_GAP_ADV_FLAGS_LE_ONLY_GENERAL_DISC_MODE;//广播类型

    //init.advdata.flags              = BLE_GAP_ADV_FLAGS_LE_ONLY_LIMITED_DISC_MODE;

    init.advdata.p_tx_power_level=&tx_power_level;//广播发射功率

    init.srdata.uuids_complete.uuid_cnt = sizeof(m_adv_uuids) / sizeof(m_adv_uuids[0]);//广播UUID

    init.srdata.uuids_complete.p_uuids  = m_adv_uuids;

    init.config.ble_adv_fast_enabled  = true;//广播间隔

    init.config.ble_adv_fast_interval = APP_ADV_INTERVAL;

    init.config.ble_adv_fast_timeout  = APP_ADV_DURATION;

    init.evt_handler = on_adv_evt;

    adv_conn_params.min_conn_interval = MIN_CONN_INTERVAL;//连接间隔

    adv_conn_params.max_conn_interval = MAX_CONN_INTERVAL;

    init.advdata.p_slave_conn_int=&adv_conn_params;

    err_code = ble_advertising_init(&m_advertising, &init);

    APP_ERROR_CHECK(err_code);

    ble_advertising_conn_cfg_tag_set(&m_advertising, APP_BLE_CONN_CFG_TAG);

}

在这里要广播的数据如果太多,出现广播的字节不够用,会优先将设备广播名称由全名自动切换为短名。

 3.设置MTU

nRF52832的MTU最大支持247字节,但是SDK默认的不是最大, 修改方法如下:

1.改变"sdk_config.h"头文件中相关宏

// NRF_SDH_BLE_GATT_MAX_MTU_SIZE - Static maximum MTU size.

#ifndef NRF_SDH_BLE_GATT_MAX_MTU_SIZE

#define NRF_SDH_BLE_GATT_MAX_MTU_SIZE 247

#endif

2.修改nrf_ble_gatt_att_mtu_periph_set()函数的入参

    err_code = nrf_ble_gatt_att_mtu_periph_set(&m_gatt, 64);

    APP_ERROR_CHECK(err_code);

 默认的是64,最大可以改成247。

3.修改如下两个宏的值

#define OPCODE_LENGTH 1

#define HANDLE_LENGTH 2

这两个宏默认值1和2,总共占用3个字节。这是NUS协议层的头部需要占用的空间,可以不要。将这两个宏的值改为0,省出3个字节来。

4.用手机连接测试。如果手机蓝牙是4.2及以上的话,就会看到主从机之间协商的MTU为247

4.nRF52832 BLE4.2 广播数据量和消耗的时间

发送数据量和时间

1,前导码,1个字节

2,接入地址,4个字节

3,包头,2字节

4,广播地址,6个字节

5,有效数据,0~31个字节

 

如果PHY是1Mbps,1bit需要的时间1us,那发送一次广播包数据量:

 

1 + 4 + 2 + 6 +31 = 44个字节(有效数据按照最大31计算)

蓝牙4.2的广播数据31字节,蓝牙5.0的广播数据255字节

详情连接:https://blog.csdn.net/H_O_W_E/article/details/50628568?utm_medium=distribute.pc_relevant_download.none-task-blog-2~default~blogcommendfrombaidu~default-2.nonecase&dist_request_id=1330144.32790.16182100650660959&depth_1-utm_source=distribute.pc_relevant_download.none-task-blog-2~default~blogcommendfrombaidu~default-2.nonecas

  1. SES工程添加.c/.h的文件方法(Segger embedded studio )

5.1添加文件

1自己写了一个keysensor.c和keysensor.h文件,然后要添加我的工程中去,首先可以在工程中新建一个文件夹专门放自定义的库文件

NRF52832开发代码基础配置以及Segger embedded studio 工程添加文件配置方法_第1张图片

NRF52832开发代码基础配置以及Segger embedded studio 工程添加文件配置方法_第2张图片

 

2建好文件夹之后,将自定义的库文件添加进去,自定义的文件可以直接添加或者拷贝其他工程现有的文件

NRF52832开发代码基础配置以及Segger embedded studio 工程添加文件配置方法_第3张图片

NRF52832开发代码基础配置以及Segger embedded studio 工程添加文件配置方法_第4张图片

 

注意添加的时候只需要添加.C文件就可以了。.h文件会自动添加。

 

  1. 接下来需要将添加的自定义文件的相对路径添加到工程中,不然编译会报错

5.2添加工程文件路径

1.点击工程名右键,选择option

NRF52832开发代码基础配置以及Segger embedded studio 工程添加文件配置方法_第5张图片

 

2.选择 common

NRF52832开发代码基础配置以及Segger embedded studio 工程添加文件配置方法_第6张图片

 

3.选择 preprocessor,然后双击右侧User include directories

NRF52832开发代码基础配置以及Segger embedded studio 工程添加文件配置方法_第7张图片

 

  1. 开始添加路径(参考https://blog.csdn.net/sihaiwenshu/article/details/89789865)

 

  1. 添加路径使用相对路径即可。
  2. NRF52832开发代码基础配置以及Segger embedded studio 工程添加文件配置方法_第8张图片

本例子中,自定义的文件的绝对路径是:E:\8.Project_Number\BLE_LED\examples\ble_peripheral\ble_app_blinky

添加相对路径写成:../../../ble_app_blinky

注意:此处的工程一级目录的路径我们认为是:BLE_LED

你可能感兴趣的:(nordic,蓝牙知识,物联网)