本帖最后由 tcsyangzong 于 2020-6-20 19:41 编辑

       看到MM32W373PSB蓝牙开发板官方配套的例程中提供了Shutter例程,即实现一个简易的手机自拍杆功能,对此有极大的兴趣。首先不管那么多,直接拿来源码编译下载到开发板中,体验一下Shutter的效果,程序下载完成,芯片复位,板载红色指示灯LED6闪烁,按照官方提供的操作手册,开始操作。因为之前的蓝牙项目开发种遇到的iphone蓝牙一直就是个奇葩,事先以为这个功能可能不支持iphone。先用iPhone试试看,事实跟我的理解完全不同,打开iphone的设置-蓝牙,在界面我的设备栏显示出“MindMotion-Shutt”设备名称,手机发现设备了,随后的操作也成功建立了连接。效果如下图:

微信图片_20200620184927.jpg


       打开手机相机,按下开发板的K4键,听到手机发出快门声,证明功能确实是好使的,尝试着多次操作拍照,达到一定次数之后按下按键,手机相机失去了响应,个人猜测可能是ble通讯协议应用当中做了限制(还没看代码),另外手机处于锁屏状态时,按下K4按键,还能唤醒屏幕背光。在使用过程中,发现按键抖动会影响拍摄效果,按下按键会出现连拍并且多数照片画面是虚的,可以在现有例程的基础上调整,改善使用效果。

       接下来便是学习源码的框架结构,理解作者的开发思路。打开MM32W3__HID_Shutter目录下的keil工程,老套路,先从main函数看起,main()函数首先对ble相关的外设硬件进行配置,同时配置K4按键的检测方式为外部中断。启动蓝牙,运行系统周期任务,而ble协议则在定时器中断里运行。
      自拍功能则是在app_hogp.c文件中实现的,首先浏览源码可以看到服务器向客户端主动发送键值数据的方式是noti,ble的ATT配置 HID协议的配置也在这里,各自放在两个数组里,数据格式要符合规范要求。
1.bmp


       例程的工作流程大致就是这些,ble传输的数据无非就是个键值,没有复杂的数据。