DA14580开发板与lis2ds12三轴传感器数据显示实现

简介: DA14580开发板与lis2ds12三轴传感器数据显示实现

第一:DA14580芯片

一、基本信息:

DA14580是德国Dialog公司研制的蓝牙单芯片,号称全球功耗最低,是TI CC2541的四分之一(TI CC2541 ,仅用单一硬币型电池,便可运作超过一年的低功耗传感器产品),是运动手环等穿戴类电子产品的常用芯片。

89d7bdd1cc42462d86e92d87eae73c77.png87eb26c10b0d44d7ab62673309989566.png

528e2f1f9db14fb9beadb04456b7a8ca.png

2c8b19fd43f4464c8c11675d4807768d.png

DA14580单芯片发布时并不是一颗裸片,而是带有开发平台和SDK包,还有常用的应用例程(如防丢proximity)


DA14580系统架构DA14580是基于32-bit ARM Cortex M0内核心架构,内置ROM、OTP和RAM。当用户通过SPI NORFLASH引导或者直接通过JLINK下载代码到RAM进行调试后,就可以通过SmartSnippets工具下载代码到OTP。


f1b19249116343f6bb2472f638d6ef28.png

(2)芯片手册

     特点:

1、低功耗,体积小

2、内置蓝牙

3、带有开发平台和SDK包

第二:DA14580 开发例程目录和SDK目录结构

DA14580的SDK开发平台使用keil,我们先来看看开发例程的目录结构,再来看SDK目录结构。前者简单一些,后者因为涉及到第三方IP、ROM等原因,目录实在是太多太细了,初接手真的会歇菜。

防丢(proximity,英文是接近的意思)的开发目录结构如下:

d5f66a1628cd4c9a8e2257a055085245.png

这里需要注意的是,ROM里面的固话代码,包括协议栈和单任务操作系统的相关管理代码也是整个工程应用的一部分,只不过没有列到开发目录里面。

SDK目录架构如下:

0186006bc8634fab9e5a605b7ba3f236.png

第三:了解SDK例程代码

  1. 蓝牙例程代码
  2. 外设例程代码

第四:蓝牙profile和应用的角色和分工

从工程的代码目录结构来看,每个profile都有一个以profile(如proxr)命名的.c文件,也有一个以profile_task(如proxr_task)命名的.c文件;相应地,每个应用子任务也有一个app_profile(如app_proxr)的.C文件,和app_profile_task(如app_proxr_task)的.c文件。一般地:


在操作系统ke内核看来,Profile和profile_task共同完成一个task任务,其中app_proxr_task的task ID标识是TASK_PROXR。但app_profile和app_profile_task并不是一个具体的task任务,在代码目录的app目录,所有的task,包括app_proxr_task和app_batt_task(电池)、app_sec_task(安全)共同组成一个task,在app.c中完成任务创建,task的ID标识是TASK_APP。各个app_profile_task只不过完成应用的一个子场景功能,如防丢、电池告警等。


app是主动发送消息给profile,以执行相应的蓝牙GATT服务和操作,并接受回调。即app是profile的上层。


Profile任务执行GATT服务/属性的具体创建create、开启服务enable和属性特征的读写等操作,其调用ATT和GAP等底层接口来实现具体功能。Profile作为接口供给app层调用,app是通过消息通信来完成接口调用的。


app_profile的代码一般包括主动调用的接口实现,而app_profile_task则是接受消息回调的接口实现。两者的分工是非常清晰的。

第五:应用开发框架

DA14580的应用开发框架的核心是基于状态机和消息回调。以下分析以防丢proxr为例。

1.状态机

每个任务都必须明确自己的状态表,例如proxr的状态表是:

4e85052570ab4af6a0a01e4ebbe077e8.png

状态的初始化和转换是由用户主动切换的。在某个确定的状态时,内核会在对应的状态响应接口集中遍历所有发给该任务的消息。

每个任务都会在初始化时被创建,例如proxr任务的创建是:

8efe2d1b0f3e47eb90b0112845f774ee.png

这时,假设有个其他的任务发一个消息给TASK_PROXR,则会在proxr_disabled中查找相应的消息回调接口,并执行回调。


2.消息回调


接下来看看各个状态的响应接口集,例如PROXR_CONNECTED连接状态时的状态响应接口集如下。可见,其会对两个消息进行回调,一个是底层ATT收到对特征值的写操作时执行回调,另一个应用层主动改写另一个特征值。在笔者的防丢和计步应用中,前者是实现防丢告警功能,后者是上报计步数据。

9ca140c21d25488183b3e3c4cfd2a49e.png

3.任务间通信

消息发出之后,系统即会执行proxr_jibu_update_req_handler回调。

f8b1035057ba46468e405639849023cd.png

第六:LIS2DS12三轴传感器

  1. 基本介绍:

LIS2DS12性能稳定,功耗低,工作量程和采样频率可以通过寄存器来配置。自带硬件计步功能,通过配置寄存器值,可以通过微信的计步认证测试。特别适合在手机以及穿戴式上面使用,用来实现屏幕旋转,单双击,移动唤醒设备,计步器等功能。在穿戴式设备上面,好多MCU是3.0V左右的工作电压,而LIS2DS12只能工作在1.62到1.98V之间,一般选择1.8V,此时需要电压转换。

378fafdd94224d3d9e889a5060957401.png

  1. 特点:
  1. 低功耗
  2. 使用IIC通信/SPI
  3. 工作电压1.8V

查看手册与原理图

  1. 工作电压
  2. 通信方式
  3. 通信地址:
  • 0011 1xx b
  • SA0/SDO -- 接地  xx -- 10
  • SA0/SDO -- 接电源 xx -- 01
  • 硬件IIC -- 高位补零  0001 1101 -- 0x1D
  1. 寄存器:

   4.官方下载驱动文件即可

第七:小项目--基于DA14580开发板测量步伐

1、目的:


    1、在DA14580上调试LIS2DS12传感器,并通过串口显示结果


    2、使用蓝牙与开发板通信,手机app获取步伐数据


2、流程:


1、使用有蓝牙协议栈的代码例程为模板


2、修改蓝牙服务的信息


3、IIC(芯片与传感器通信)硬件IIC --》添加IIC驱动 -->初始化


4、串口(调试设备) --> 添加usart驱动 --> 初始化 (精简指令集)(复杂指令集)


5、lis2ds12传感器驱动代码   -->  官网下载驱动文件


6、配置使用到的外设 并进行 初始化


7、修改蓝牙收发函数


8839e107ec53440ebc7a84f40579c9b2.png

3、注意事项:

1、蓝牙例程代码工程启用了看门狗,除了喂狗,不要使用死延迟函数,不然会崩。

2、不要一直占用IIC、SPI,不然蓝牙会掉线(使用定时器进行间隔使用)。

目录
相关文章
|
6月前
|
传感器
基于STC8H8K64U和DS18B20的温度采集和LabVIEW上位机显示
基于STC8H8K64U和DS18B20的温度采集和LabVIEW上位机显示
基于STC8H8K64U和DS18B20的温度采集和LabVIEW上位机显示
|
6月前
|
传感器 机器人
|
6月前
|
传感器
|
传感器
野火RA6M5开发板 DHT11温湿度传感器 OLED显示测试学习
野火RA6M5开发板 DHT11温湿度传感器 OLED显示测试学习
121 0
野火RA6M5开发板 DHT11温湿度传感器 OLED显示测试学习
|
存储 传感器 编解码
51单片机--DS18B20温度感应器
51单片机--DS18B20温度感应器
174 0
|
传感器 监控 芯片
LabVIEW控制Arduino采集LM35温度传感器数值(基础篇—12)
LM35 是由National Semiconductor 所生产的温度传感器,其输出电压为摄氏温度。LM35是模拟输出的温度监控芯片,其输出电压和摄氏温度成线性比列关系,是一种得到广泛使用的温度传感器。
|
传感器
LabVIEW控制Arduino采集多路DS18B20温度数值(进阶篇—3)
本篇博文将实现LabVIEW控制Arduino采集多路DS18B20温度数值,关于LabVIEW控制Arduino在基础篇已经讲解过很多种类温度传感器的采集方法。
|
传感器 数据采集
STM32 BMP280模块 获取气压温度高度传感器数据
STM32 BMP280模块 获取气压温度高度传感器数据 TFT显示
310 0