1026|4

136

帖子

2

TA的资源

一粒金砂(高级)

楼主
 

【Microchip WBZ451 Curiosity】-4- 从0创建简易BLE广播 [复制链接]

本帖最后由 慕容雪花 于 2023-8-17 12:00 编辑

简介:

作为一个BLE外部设备,想要被发现就需要按一定时间间隔发送广播报文,本文主要涉及BLE的GAP协议部分,该协议是保证BLE设备能互相发现和连接的规范

GAP定义了蓝牙设备如何发现和建立与其他设备的安全或不安全连接。它处理一些一般模式的业务,比如询问、命名和搜索,还处理一些安全问题,比如担保。同时还处理一些有关连接的业务,比如链路建立、信道和连接建立。GAP规定的是一些一般性的运行任务。因此,它具有强制性,并作为所有其他蓝牙应用规范的基础。

 

软硬件资源:

手机app: Light Blue

开发工具链:MPLABX IDE, MCC Harmony

USB-Micro线缆

 

项目从0开始创建,细节如下:

新建一个harmony工程:

 

 

选择框架路径:

 

 

选择Device型号:

 

进入到MCC选择界面,选择MPLAB HARMONY这个开发框架。

 

等待一段时间后,进入到MCC图形化编辑界面。

 

 

添加BLE驱动:

 

 

之后项目图如下所示:

 

 

接下来配置用到的组件参数:

 

 

BLE Stack:

 

之后点击MCC,自动生成配置代码:

之后,有基础源文件需要手动修改,比如app.c里面要使能广播。

void APP_Tasks ( void )
{
    APP_Msg_T    appMsg[1];
    APP_Msg_T   *p_appMsg;
    p_appMsg=appMsg;

    /* Check the application's current state. */
    switch ( appData.state )
    {
        /* Application's initial state. */
        case APP_STATE_INIT:
        {
            bool appInitialized = true;
            //appData.appQueue = xQueueCreate( 10, sizeof(APP_Msg_T) );
            APP_BleStackInit();
            // Start Advertisement
            //https://onlinedocs.microchip.com/pr/GUID-C5EAF60E-9124-427C-A0F1-F2DBE662EA92-en-US-1.2.1/index.html?GUID-C4D5F735-FEC4-4FA5-A778-C997D5A536AE
            //Parameter	Description
            //[in] enable	Advertising control option.
            //[in] duration	Duration for advertising. (Unit: 10 ms) Set to 0 to continuously advertise
            BLE_GAP_SetAdvEnable(0x01, 0x00);

另外,生成的配置代码里面没有Device Address,需要收到配置。该处位于app_ble.c

void APP_BleConfigAdvance()
{
    uint8_t devName[]={GAP_DEV_NAME_VALUE};
    BLE_GAP_Addr_T devAddr;

    BLE_SMP_Config_T                smpParam;
   
    BLE_DM_Config_T                 dmConfig;
    BLE_GAP_ServiceOption_T         gapServiceOptions;
    
    // Configure Device Name
    BLE_GAP_SetDeviceName(sizeof(devName), devName);    /* Device Name */
            
    devAddr.addrType = BLE_GAP_ADDR_TYPE_PUBLIC;
    devAddr.addr[0] = 0xE9;
    devAddr.addr[1] = 0xEA;
    devAddr.addr[2] = 0xEB;
    devAddr.addr[3] = 0xEC;
    devAddr.addr[4] = 0xED;
    devAddr.addr[5] = 0xEE;

    // Configure device address
    BLE_GAP_SetDeviceAddr(&devAddr);

 

编译,烧录

 

 

原因分析:报错,猜测可能是USB-HUB的问题,所以直接插接在电脑上的USB口。修改后,成功下载!

 

 

之后进行测试:

 

按下RST,打开手机app:

 

 

关于广播报文中的RAW data,格式可以参考:Here is how the 31 bytes Advertising data and Scan response data should look like(Chapter 11 Part C Vol 3).

 

 

比如上文第二个截图中的0x020104:

0x02 = length 2 octects    
0x01 = AD type flags     
0x04 = BR_EDR_NOT_SUPPORTED

 

相关资料:

PIC32CX-BZ2/WBZ45x蓝牙协议栈API:

https://onlinedocs.microchip.com/pr/GUID-C5EAF60E-9124-427C-A0F1-F2DBE662EA92-en-US-1.2.1/index.html?GUID-94489357-3C47-427B-84D1-73FC2ACC68FA 

 

项目文件树:

│  app.c
│  app.h
│  app_idle_task.c
│  app_idle_task.h
│  app_user_edits.c
│  main.c

├─app_ble
│      app_ble.c
│      app_ble.h
│      app_ble_handler.c
│      app_ble_handler.h

├─config
│  └─default
│      │  config.h
│      │  configuration.h
│      │  definitions.h
│      │  device.h
│      │  device_cache.h
│      │  device_vectors.h
│      │  exceptions.c
│      │  framework_defs.h
│      │  FreeRTOSConfig.h
│      │  freertos_hooks.c
│      │  harmony-manifest-success.yml
│      │  initialization.c
│      │  interrupts.c
│      │  interrupts.h
│      │  libc_syscalls.c
│      │  startup_xc32.c
│      │  tasks.c
│      │  toolchain_specifics.h
│      │  user.h
│      │  WBZ451.ld
│      │
│      ├─ble
│      │  ├─lib
│      │  │  │  ble_stack.a
│      │  │  │
│      │  │  └─include
│      │  │          att_uuid.h
│      │  │          ble_dtm.h
│      │  │          ble_gap.h
│      │  │          ble_l2cap.h
│      │  │          ble_smp.h
│      │  │          bt_sys.h
│      │  │          bt_sys_log.h
│      │  │          gap_defs.h
│      │  │          gatt.h
│      │  │          host_hci_defs.h
│      │  │          mba_error_defs.h
│      │  │          stack_mgr.h
│      │  │
│      │  └─middleware_ble
│      │      ├─ble_dm
│      │      │      ble_dm.c
│      │      │      ble_dm.h
│      │      │      ble_dm_aes.c
│      │      │      ble_dm_aes.h
│      │      │      ble_dm_conn.c
│      │      │      ble_dm_conn.h
│      │      │      ble_dm_dds.c
│      │      │      ble_dm_dds.h
│      │      │      ble_dm_info.c
│      │      │      ble_dm_info.h
│      │      │      ble_dm_internal.h
│      │      │      ble_dm_sm.c
│      │      │      ble_dm_sm.h
│      │      │
│      │      ├─ble_gcm
│      │      │      ble_dd.h
│      │      │      ble_scm.h
│      │      │
│      │      ├─ble_log
│      │      │      ble_log.h
│      │      │
│      │      └─ble_util
│      │              byte_stream.h
│      │              mw_assert.h
│      │
│      ├─crypto
│      │  │  crypto.h
│      │  │
│      │  └─src
│      │          crypto.c
│      │
│      ├─default.mhc
│      │      settings.yml
│      │
│      ├─driver
│      │  ├─device_support
│      │  │  │  pic32cx_bz2_device_support.a
│      │  │  │
│      │  │  └─include
│      │  │          info_block.h
│      │  │          pmu_system.h
│      │  │          rf_system.h
│      │  │          sleep_system.h
│      │  │
│      │  └─pds
│      │      │  pds.a
│      │      │
│      │      └─include
│      │              pds.h
│      │              pds_config.h
│      │
│      ├─osal
│      │      osal.h
│      │      osal_definitions.h
│      │      osal_freertos.c
│      │      osal_freertos.h
│      │      osal_freertos_extend.c
│      │      osal_freertos_extend.h
│      │
│      ├─peripheral
│      │  ├─clk
│      │  │      plib_clk.c
│      │  │      plib_clk.h
│      │  │
│      │  ├─cmcc
│      │  │      plib_cmcc.c
│      │  │      plib_cmcc.h
│      │  │
│      │  ├─evsys
│      │  │      plib_evsys.c
│      │  │      plib_evsys.h
│      │  │
│      │  ├─gpio
│      │  │      plib_gpio.c
│      │  │      plib_gpio.h
│      │  │
│      │  ├─nvic
│      │  │      plib_nvic.c
│      │  │      plib_nvic.h
│      │  │
│      │  └─nvm
│      │          plib_nvm.c
│      │          plib_nvm.h
│      │
│      └─stdio
│              xc32_monitor.c

├─packs
│  ├─CMSIS
│  │  └─CMSIS
│  │      └─Core
│  │          └─Include
│  │                  cachel1_armv7.h
│  │                  cmsis_armcc.h
│  │                  cmsis_armclang.h
│  │                  cmsis_armclang_ltm.h
│  │                  cmsis_compiler.h
│  │                  cmsis_gcc.h
│  │                  cmsis_iccarm.h
│  │                  cmsis_version.h
│  │                  core_cm4.h
│  │                  mpu_armv7.h
│  │
│  └─WBZ451_DFP
│      │  wbz451.h
│      │
│      ├─component
│      │      ac.h
│      │      adchs.h
│      │      aes.h
│      │      arb.h
│      │      ble.h
│      │      btzbsys.h
│      │      ccl.h
│      │      cfg.h
│      │      cmcc.h
│      │      cru.h
│      │      dmac.h
│      │      dmt.h
│      │      dscon.h
│      │      dsu.h
│      │      eic.h
│      │      evsys.h
│      │      freqm.h
│      │      fuses.h
│      │      gpio.h
│      │      hmatrixb.h
│      │      icm.h
│      │      nvm.h
│      │      pac.h
│      │      pche.h
│      │      pfw.h
│      │      pmu.h
│      │      pps.h
│      │      pukcc.h
│      │      qspi.h
│      │      ramecc.h
│      │      rcon.h
│      │      rtc.h
│      │      sercom.h
│      │      tc.h
│      │      tcc.h
│      │      trng.h
│      │      wdt.h
│      │      zigbee.h
│      │
│      ├─instance
│      │      ac.h
│      │      adchs.h
│      │      aes.h
│      │      arb.h
│      │      ble.h
│      │      btzbsys.h
│      │      ccl.h
│      │      cfg.h
│      │      cmcc.h
│      │      cru.h
│      │      dmac.h
│      │      dmt.h
│      │      dscon.h
│      │      dsu.h
│      │      eic.h
│      │      evsys.h
│      │      freqm.h
│      │      fuses.h
│      │      gpioa.h
│      │      gpiob.h
│      │      hmatrix.h
│      │      icm.h
│      │      nvm.h
│      │      pac.h
│      │      pche.h
│      │      pfw.h
│      │      pmu.h
│      │      pps.h
│      │      qspi.h
│      │      ramecc.h
│      │      rcon.h
│      │      rtc.h
│      │      sercom0.h
│      │      sercom1.h
│      │      sercom2.h
│      │      sercom3.h
│      │      tc0.h
│      │      tc1.h
│      │      tc2.h
│      │      tc3.h
│      │      tcc0.h
│      │      tcc1.h
│      │      tcc2.h
│      │      trng.h
│      │      wdt.h
│      │      zigbee.h
│      │
│      └─pio
│              wbz451.h

└─third_party
    ├─rtos
    │  └─FreeRTOS
    │      └─Source
    │          │  croutine.c
    │          │  event_groups.c
    │          │  FreeRTOS_tasks.c
    │          │  list.c
    │          │  queue.c
    │          │  stream_buffer.c
    │          │  timers.c
    │          │
    │          ├─include
    │          │      croutine.h
    │          │      deprecated_definitions.h
    │          │      event_groups.h
    │          │      FreeRTOS.h
    │          │      list.h
    │          │      message_buffer.h
    │          │      mpu_prototypes.h
    │          │      mpu_wrappers.h
    │          │      portable.h
    │          │      projdefs.h
    │          │      queue.h
    │          │      semphr.h
    │          │      stack_macros.h
    │          │      stream_buffer.h
    │          │      task.h
    │          │      timers.h
    │          │
    │          └─portable
    │              ├─GCC
    │              │  └─SAM
    │              │      └─ARM_CM4F
    │              │              port.c
    │              │              portmacro.h
    │              │
    │              └─MemMang
    │                      heap_4.c
    │
    └─wolfssl
        └─wolfssl
            │  certs_test.h
            │
            └─wolfcrypt
                │  aes.h
                │  arc4.h
                │  asn.h
                │  asn_public.h
                │  blake2-impl.h
                │  blake2-int.h
                │  blake2.h
                │  camellia.h
                │  chacha.h
                │  chacha20_poly1305.h
                │  cmac.h
                │  coding.h
                │  compress.h
                │  cpuid.h
                │  cryptocb.h
                │  curve25519.h
                │  curve448.h
                │  des3.h
                │  dh.h
                │  dsa.h
                │  ecc.h
                │  ed25519.h
                │  ed448.h
                │  error-crypt.h
                │  fe_448.h
                │  fe_operations.h
                │  fips_test.h
                │  ge_448.h
                │  ge_operations.h
                │  hash.h
                │  hc128.h
                │  hmac.h
                │  idea.h
                │  integer.h
                │  logging.h
                │  md2.h
                │  md4.h
                │  md5.h
                │  memory.h
                │  mem_track.h
                │  misc.h
                │  mpi_class.h
                │  mpi_superclass.h
                │  pkcs11.h
                │  pkcs12.h
                │  pkcs7.h
                │  poly1305.h
                │  pwdbased.h
                │  rabbit.h
                │  random.h
                │  rc2.h
                │  ripemd.h
                │  rsa.h
                │  selftest.h
                │  settings.h
                │  sha.h
                │  sha256.h
                │  sha3.h
                │  sha512.h
                │  signature.h
                │  sp.h
                │  sp_int.h
                │  srp.h
                │  tfm.h
                │  types.h
                │  visibility.h
                │  wc_encrypt.h
                │  wc_pkcs11.h
                │  wc_port.h
                │  wolfevent.h
                │  wolfmath.h
                │
                ├─port
                │  └─pic32
                │          CryptoLib_cf_pb.h
                │          CryptoLib_ClearFlags_pb.h
                │          CryptoLib_Comp_pb.h
                │          CryptoLib_CondCopy_pb.h
                │          CryptoLib_CRT_pb.h
                │          CryptoLib_Div_pb.h
                │          CryptoLib_ExpMod_pb.h
                │          CryptoLib_FastCopy_pb.h
                │          CryptoLib_Fill_pb.h
                │          CryptoLib_Fmult_pb.h
                │          CryptoLib_GCD_pb.h
                │          CryptoLib_GF2NEccAdd_pb.h
                │          CryptoLib_GF2NEccConv_pb.h
                │          CryptoLib_GF2NEccDbl_pb.h
                │          CryptoLib_GF2NEccMul_pb.h
                │          CryptoLib_GF2NEcDsa_pb.h
                │          CryptoLib_Hardware_pb.h
                │          CryptoLib_Headers_pb.h
                │          CryptoLib_JumpTable_pb.h
                │          CryptoLib_mapping_pb.h
                │          CryptoLib_PrimeGen_pb.h
                │          CryptoLib_Rc_pb.h
                │          CryptoLib_RedMod_pb.h
                │          CryptoLib_Rng_pb.h
                │          CryptoLib_SelfTest_pb.h
                │          CryptoLib_Services_pb.h
                │          CryptoLib_Smult_pb.h
                │          CryptoLib_Square_pb.h
                │          CryptoLib_Swap_pb.h
                │          CryptoLib_typedef_pb.h
                │          CryptoLib_ZpEccAddSub_pb.h
                │          CryptoLib_ZpEccAdd_pb.h
                │          CryptoLib_ZpEccConv_pb.h
                │          CryptoLib_ZpEccDbl_pb.h
                │          CryptoLib_ZpEccMul_pb.h
                │          CryptoLib_ZpEccQuickDualMul_pb.h
                │          CryptoLib_ZpEcDsa_pb.h
                │          crypt_aes_hw.h
                │          crypt_aes_hwInt.h
                │          crypt_aes_sam6149.h
                │          crypt_aes_u2238.h
                │          crypt_crya_saml11.h
                │          crypt_ecc_ba414e.h
                │          crypt_ecc_pukcl.h
                │          crypt_pukcl_definitions.h
                │          crypt_pukcl_functions.h
                │          crypt_rng_hw.h
                │          crypt_rsa_pukcl.h
                │          crypt_sha1_hw.h
                │          crypt_sha224_hw.h
                │          crypt_sha256_hw.h
                │          crypt_sha384_hw.h
                │          crypt_sha512_hw.h
                │          crypt_sha_hw.h
                │          crypt_sha_sam11105.h
                │          crypt_sha_sam6156.h
                │          crypt_tdes_hw.h
                │          crypt_tdes_hwInt.h
                │          crypt_tdes_sam6150.h
                │          crypt_wolfcryptcb.h
                │          pic32mz-crypt.h
                │
                └─src
                    │  aes.c
                    │  arc4.c
                    │  asm.c
                    │  asn.c
                    │  blake2b.c
                    │  blake2s.c
                    │  camellia.c
                    │  chacha.c
                    │  chacha20_poly1305.c
                    │  cmac.c
                    │  coding.c
                    │  compress.c
                    │  cpuid.c
                    │  cryptocb.c
                    │  curve25519.c
                    │  curve448.c
                    │  des3.c
                    │  dh.c
                    │  dsa.c
                    │  ecc.c
                    │  ecc_fp.c
                    │  ed25519.c
                    │  ed448.c
                    │  error.c
                    │  evp.c
                    │  fe_448.c
                    │  fe_low_mem.c
                    │  fe_operations.c
                    │  ge_448.c
                    │  ge_low_mem.c
                    │  ge_operations.c
                    │  hash.c
                    │  hc128.c
                    │  hmac.c
                    │  idea.c
                    │  integer.c
                    │  logging.c
                    │  md2.c
                    │  md4.c
                    │  md5.c
                    │  memory.c
                    │  misc.c
                    │  pkcs12.c
                    │  pkcs7.c
                    │  poly1305.c
                    │  pwdbased.c
                    │  rabbit.c
                    │  random.c
                    │  rc2.c
                    │  ripemd.c
                    │  rsa.c
                    │  sha.c
                    │  sha256.c
                    │  sha3.c
                    │  sha512.c
                    │  signature.c
                    │  sp_arm32.c
                    │  sp_arm64.c
                    │  sp_armthumb.c
                    │  sp_c32.c
                    │  sp_c64.c
                    │  sp_cortexm.c
                    │  sp_dsp32.c
                    │  sp_int.c
                    │  sp_x86_64.c
                    │  srp.c
                    │  tfm.c
                    │  wc_dsp.c
                    │  wc_encrypt.c
                    │  wc_pkcs11.c
                    │  wc_port.c
                    │  wolfevent.c
                    │  wolfmath.c
                    │
                    └─port
                        └─pic32
                                crypt_aes_sam6149.c
                                crypt_aes_u2238.c
                                crypt_ecc_ba414e.c
                                crypt_ecc_pukcl.c
                                crypt_pukcl_functions.c
                                crypt_rng_sam6334.c
                                crypt_rng_u2242.c
                                crypt_rsa_pukcl.c
                                crypt_sam_u2803.c
                                crypt_sha1_sam11105.c
                                crypt_sha1_sam6156.c
                                crypt_sha224_sam11105.c
                                crypt_sha224_sam6156.c
                                crypt_sha256_sam11105.c
                                crypt_sha256_sam6156.c
                                crypt_sha384_sam6156.c
                                crypt_sha512_sam6156.c
                                crypt_tdes_sam6150.c
                                crypt_wolfcryptcb.c
                                pic32mz-crypt.c

 

 

此帖出自RF/无线论坛

最新回复

生成的配置代码里面没有Device Address,需要收到配置,谢谢提醒   详情 回复 发表于 2023-8-18 07:27
点赞 关注
 

回复
举报

7175

帖子

2

TA的资源

版主

沙发
 

这配置BLE看起来还是挺麻烦的。

此帖出自RF/无线论坛

点评

是的,对我这种小白还是有一定难度的。不过这也是个学习的好机会,毕竟Microchip还提供了图形化配置,自动生成代码。  详情 回复 发表于 2023-8-18 07:32
 
 

回复

1702

帖子

0

TA的资源

五彩晶圆(初级)

板凳
 

生成的配置代码里面没有Device Address,需要收到配置,谢谢提醒

此帖出自RF/无线论坛

点评

我也是看到有规范说必须加上地址。共同学习,共同进步!Microchip的文档做的是相当不错的!  详情 回复 发表于 2023-8-18 12:21
 
 
 

回复

136

帖子

2

TA的资源

一粒金砂(高级)

4
 
wangerxian 发表于 2023-8-17 15:31 这配置BLE看起来还是挺麻烦的。

是的,对我这种小白还是有一定难度的。不过这也是个学习的好机会,毕竟Microchip还提供了图形化配置,自动生成代码。

此帖出自RF/无线论坛
 
 
 

回复

136

帖子

2

TA的资源

一粒金砂(高级)

5
 
火辣西米秀 发表于 2023-8-18 07:27 生成的配置代码里面没有Device Address,需要收到配置,谢谢提醒

我也是看到有规范说必须加上地址。共同学习,共同进步!Microchip的文档做的是相当不错的!

此帖出自RF/无线论坛
 
 
 

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

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
推荐帖子
无所不能的matlab,你心动吗?

先来看看它的系统仿真-------引擎!!! 18681 再来看看它支持的东东!!! 18682 Matlab常用工具箱   MATLA ...

cycloneIII_3c25的原装开发板到手了-发资料

整快板子上的外设不是很多,但是存储器资源丰富。并预留了一个HSMC接口,可以用来扩展。有三张光盘,一张是介绍开发板的使用,例 ...

添加并美化SEED-EXP430F5529 LCD背光(TPS75105DSKR正常工作!)

在Ti申请的TPS75105DSKR器件今天到了! 花了点时间其焊接上了! 112980 为了测试TPS75105DSKR器件是否正常工作! 我自己添 ...

KiCad 开源元件库收集

KiCad 官方 https://gitee.com/KiCAD-CN https://github.com/kicad Digikey KiCad 元件库 https://github.com/digikey/dig ...

干货速递:数字电源技术扫盲

数字电源具有高性能和高可靠性的特点,其设计非常灵活。随著IC厂商不断推出新型号、性能更好的数字电源IC产品以及用户对数字电 ...

陶瓷天线和PCB天线以及IPEX天线三者间哪个更好?

物联网设计上有多种天线,常见的有陶瓷天线和PCB天线以及IPEX天线三种天线,而IPEX天线又可以细分很多天线,那么不同的场景可能 ...

【拓普微智能显示模块】之二:上电测试

TOPWAY普能程示模 HMT070ETD,优点; 1,组态式的设计方式,设计用户界面过程中不需要写任何代码。 2,内置实时组态式操作系统 ...

【花雕动手做】有趣好玩的音乐可视化系列小项目(17)--光导纤维灯

偶然心血来潮,想要做一个声音可视化的系列专题。这个专题的难度有点高,涉及面也比较广泛,相关的FFT和FHT等算法也相当复杂,不 ...

基于UWB的智能手机高精度安全室内导航

智能手机已经成为我们日常生活中必不可少的一部分,而随着技术的不断进步,智能手机的功能也越来越强大。最近,一种基于超宽带( ...

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