该文被密码保护。 阅读全文
posted @ 2020-02-22 17:47 Asam 阅读(2) 评论(0) 推荐(0) 编辑
摘要: SDK版本:5.0.4 开发环境:Keil 芯片:DA14580 作者:Asam DA14580的gpio使用十分简单,只需调用其SDK自带的库函数即可。 (1)IO口初始化函数 1 /** 2 **************************************************** 阅读全文
posted @ 2020-01-28 16:05 Asam 阅读(627) 评论(0) 推荐(0) 编辑
摘要: 简介 由于DA14580的空间十分有限,可执行的代码空间只有32k。而官方自带的服务的代码量又十分多,基本一个服务要四个文件,2-4K的大小。因此很受限制。 本人在开发过程中,本身已经把代码空间用得差不多了,近29k大小,这时又要求加入OTA的功能,这时如果添加官方自带的SUOTA服务已经不够了。 阅读全文
posted @ 2018-03-30 15:56 Asam 阅读(1375) 评论(0) 推荐(0) 编辑
摘要: 1.关于服务与特征值的简述 之前说到蓝牙的连接过程,那蓝牙连接之后具体是如何传数据的呢。这里做一下简要说明。 蓝牙4.0是以参数来进行数据传输的,即服务端定好一个参数,客户端可以对这个参数进行读,写,通知等操作,这个东西我们称之为特征值(characteristic), 但一个参数不够我们用,比如我们这个特征值是电量的值,另一个特征值是设备读取的温度值。 那这时候会有多个特征值... 阅读全文
posted @ 2018-03-30 15:14 Asam 阅读(21470) 评论(2) 推荐(3) 编辑
摘要: 1.蓝牙简介 什么是蓝牙4.0 蓝牙无线技术是使用范围最广泛的全球短距离无线标准之一,蓝牙4.0版本涵盖了三种蓝牙技术,即传统蓝牙、高速蓝牙和低功耗蓝牙技术,将三种规范合而为一。它继承了蓝牙技术在无线连接上的固有优势,同时增加了高速蓝牙和低功耗蓝牙的特点。这三个规格可以组合或者单独使用。蓝牙4.0规 阅读全文
posted @ 2018-03-30 15:11 Asam 阅读(33081) 评论(0) 推荐(2) 编辑
摘要: MAX30100是能够读取心率、血氧的传感器,通信方式是通过IIC进行通信。 其工作原理是通过红外led灯照射,能够得到心率的ADC值。 图为MAX30100的寄存器。 可以分为五类,状态寄存器、FIFO、控制寄存器、温度寄存器、ID寄存器。 温度寄存器是读取芯片的温度值,以矫正因为温度而产生的偏差 阅读全文
posted @ 2017-10-22 19:55 Asam 阅读(9458) 评论(7) 推荐(4) 编辑
摘要: 广播的类型一般分为四种,见如下表格: 1. 可连接的非定向广播(Connectable Undirected Event Type): 这是一种用途最广的广播类型,包括广播数据和扫描响应数据,它表示当前设备可以接受其他任何设备的连接请求。进行通用广播的设备能够被扫描设备扫描到,或者在接收到连接请求时 阅读全文
posted @ 2017-09-29 15:31 Asam 阅读(5447) 评论(0) 推荐(0) 编辑
摘要: 1.什么是服务 蓝牙通信中,我们就是需要对各个服务中的特征值进行交流,现在尝试自定义一个服务。 2.创建TEMProfile.c、TEMProfile.h 这是服务的主体文件。 其里面大致无非是定义特征值,创建读写值的函数,注册函数,增添服务函数,以及包装一些回调函数。 具体如下。 (1)所有定义的 阅读全文
posted @ 2017-03-11 17:39 Asam 阅读(4334) 评论(0) 推荐(1) 编辑
摘要: 注:(本文基于我自己定义的一个服务TEMProfile,但适用其他服务) 1.特征值是什么 一个蓝牙协议栈中,包含了多个服务,一个服务里又包含了多个特征值,每个特征值都有其相关的一些信息。 我们与蓝牙进行通信的时候,就是通过读写这些特征值,来获得数据。 2.特征值的属性 一个特征值里面基本需要的变量 阅读全文
posted @ 2017-03-11 16:46 Asam 阅读(7081) 评论(0) 推荐(0) 编辑
摘要: 说明: volatile的作用是: 作为指令关键字,确保本条指令不会因编译器的优化而省略,且要求每次直接读值. 简单地说就是防止编译器对代码进行优化。 大致原因如下: 因为从寄存器取值比从内存取值快很多。 所以编译器它就觉得能优化,就把一个变量放在寄存器中。以后取这个变量就在寄存器取就行了。内存里那 阅读全文
posted @ 2017-02-23 17:19 Asam 阅读(441) 评论(0) 推荐(0) 编辑