1697|0

274

帖子

8

TA的资源

纯净的硅(初级)

楼主
 

【无接触的人脸识别门禁系统】+ 5-EFR32BG22蓝牙主机的创建 [复制链接]

 

EFR32BG22是silicon公司的蓝牙芯片,能实现BLE的主机和从机功能。内部包含一个cortex-M33内核。

使用EFR32BG22需要使用其配套的IDE,"simplicity studio"。这个IDE用起来也挺方便的,当把开发板接上电脑的时候,会自动识别出芯片型号。

点击"start"按键,能够进入对应芯片的界面,通过选择相应的例子,就能够很快的开始一个项目的开发,这点还是挺便捷的。这里选择了BLE的client的一个例程。

在这个例程中发现,BLE的协议栈也是事件驱动的,貌似类似的协议栈都是事件驱动的方式构成的。源代码主要集中在 'app.c''main.c' 中。

一、 main.c

int main(void)
{
  // Initialize Silicon Labs device, system, service(s) and protocol stack(s).
  // Note that if the kernel is present, processing task(s) will be created by this call.
  sl_system_init();
  // Initialize the application. For example, create periodic timer(s) or task(s) if the kernel is present.
  app_init();
  while (1) {
    // Do not remove this call: Silicon Labs components process action routine must be called from the super loop.
    sl_system_process_action();
    // Application process.
    app_process_action();
    // Let the CPU go to sleep if the system allows it.
    sl_power_manager_sleep();

  }
}

用户如果想添加自己的代码,可以选择在 app_init()app_process_action() 中添加。

二、 app.c

这文件里主要关注的是事件处理函数。整个蓝牙的事件处理函数在'app.c'中,函数名是 void sl_bt_on_event(sl_bt_msg_t* evt)

如果作为BLE的客户端,那么需要扫描设备、连接设备、发现服务以及特性,还需要处理BLE服务端的notify事件、对服务端的特性进行读写操作。

因此主要用到的事件如下:

  1. 事件 sl_bt_evt_scanner_scan_report_id ,这个事件表明扫描到了设备,需要在这个事件中判断扫描到的设备是否为需要连接的,可以通过地址或者名字判断设备,如果设备是需要连接的那个,那么就要执行停止扫描函数,并建立连接
  2. 事件 sl_bt_evt_connection_opened_id ,表明已经建立一个连接,需要在这个事件里调用发现服务的函数
  3. 事件 sl_bt_evt_gatt_service_id ,表明发现了服务
  4. 事件 sl_bt_evt_gatt_characteristic_id ,表明发现了特性,在这个事件里需要判断特性是否为我们要操作的特性,需要根据UUID判断
  5. 事件 sl_bt_evt_gatt_procedure_completed_id ,这个事件比较杂,是某个行为完成的一个事件,这个行为可能是服务扫描完成,也可能是特性扫描完成。当服务扫描完成后,需要开始扫描对应的特性
  6. 事件 sl_bt_evt_gatt_characteristic_value_id ,表明收到了服务端的某个特性的通知

还有特性的读写函数:

// 读函数
sl_status_t sl_bt_gatt_read_characteristic_value(uint8_t connection,
                                                 uint16_t characteristic);
// 写函数
sl_status_t sl_bt_gatt_write_characteristic_value(uint8_t connection,
                                                  uint16_t characteristic,
                                                  size_t value_len,
                                                  const uint8_t* value);

读写函数有好多种,这里只列举了用到的函数。

三、总结

至此就基本完成BLE客户端的代码编写了,实现了连接服务端,找到需要的特性进行读写,同时能够接收到服务端主动发送的notify。接下来就需要操作一下EFR32BG22上的外设了。

 

点赞 关注
 
 

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

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
推荐帖子
Luminary系列所有型号的选型工具

Luminary的函数库和图形库,上面集成的东西很丰富,很多工程师都会喜欢。 可以按着对外设的需求,来选。想要USB,就点“USB ...

单片机操作2.4寸TFT彩屏的源码与大家共享!含SD驱动!

元旦在淘宝上,花39个银子,淘了块2.4寸的TFT彩屏模块,,用店主提供的代码,用STC的51单片机,驱动起来,也显示图片了,发帖庆祝 ...

[Open Source]YS18-3荧光管电子时钟100%开源放送(软件源工程及代码.硬件原理图)

YS18-3的荧光管电子时钟曾是饱含了我所有期待的完美的荧光管电子时钟,它的功能比较完备,也受到了很多DIYer的关注与支持。 ...

Helper2416开发板移植ucgui(嵌入式linux运行ucgui)

本帖最后由 Gyroxp 于 2015-1-30 17:28 编辑 一些简单的应用,使用ucgui作为图形界面可能更加方便快捷。得益于ucgui良好 ...

求推荐:想买本C8051F单片机的书!

需要用C8051F580单片机开发产品。我做软件,C语言。 想买本 这方面的书。求推荐! 谢谢!

MSP430F149 I/O口控制

所谓IO口控制就是控制单片机的端口输出0或1,或者读出端口的状态,也就是输入和输出。 先说输出。想让MSP430单片机的端口 ...

无线连接技术选择指南

选择合适的无线连接技术从一开始就是一个关键的设计决策。这决定了应用的协议互操作性、距离、稳健性和用例。本选择指南将引导 ...

【花雕动手做】有趣好玩的音乐可视化系列小项目(16)--热干胶棒棒灯

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

颁奖:是德科技感恩月—遇见KeysightCare - 贵重仪器安全避坑指南

颁奖:是德科技感恩月—遇见KeysightCare - 贵重仪器安全避坑指南 名单详见下方列表。本颁奖贴只公布获奖名单,礼品 ...

【STM32U5A5ZJ开发板】USB设备及VCP通讯测试

STM32U5A5ZJ 上的USB是自带PHY的OTG USB设备,不但具有电源管理还具有设备管理功能,使用的接口也是Type C接口。 794377 ...

关闭
站长推荐上一条 1/10 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表