它的源代码和头文件分别为app_timer.c/app_timer.h。这是Nordic为我们提供的虚拟定时器,这个定时器不同于硬件上的TIMER,而是基于RTC1实现的一种虚拟定时器,其将定时功能作为了一个资源进行管理,所以会有初始化、创建等过程。
    nrf51822的SDK采用封装思想,需要暴露给用户的信息都在相关模块的头文件中;为了提醒用户不去看具体实现细节,我们可以发现相关的API,比如app_timer_create()的源码部分都是没有接口描述信息的,相关使用方法需要看app_timer.h或者翻阅SDK目录下的Documentation index.html。

1、参数宏APP_TIMER_INIT()
这个宏用于初始化app_timer模块,这是一个参数宏,接口定义如下:
APP_TIMER_INIT(PRESCALER, MAX_TIMERS, OP_QUEUES_SIZE, USE_SCHEDULER)
其中PRESCALE     分频比例,填入0的话,每秒就产生32768次tick,定时最大长度为0xFFFFFF次tick,也就是说500多秒定时。
   与ucos提供的时基tick不同,本SDK的主要在定时到达的时候进入RTC中断,而不是每个TICK都进入。因此就算每秒就产生32768次tick,也不会拖慢系统性能。
MAX_TIMERS       必须大于等于工程中创建的timer数量。
OP_QUEUES_SIZE   操作队列的大小,具体意思看第三节。如果不作死,选择等于MAX_TIMERS就行了。
USE_SCHEDULER    是否使用任务调度器,当前不使用

2、参数宏APP_TIMER_TICKS()
这个宏用于计算特定毫秒数相当于多少个tick。接口定义如下:
APP_TIMER_TICKS(MS, PRESCALER)
其中MS是单位为毫秒的定时时间,PRESCALER是分频比例。

3、函数app_timer_create()
用于创建一个timer,并获取生成timer的控制句柄。接口定义如下:
uint32_t app_timer_create(app_timer_id_t *            p_timer_id,
                                           app_timer_mode_t            mode,
                                          app_timer_timeout_handler_t timeout_handler)
p_timer_id   读取到创建的timer的句柄
mode           timer的类型,其中
                    APP_TIMER_MODE_SINGLE_SHOT是单次执行
                    APP_TIMER_MODE_REPEATED是循环执行
timeout_handler    被注册到内核的回调函数,当timer超时后就会执行。

4、函数app_timer_start()
设置一个timer的定时间隔和上下文参数,并启动这个timer。接口定义如下:
uint32_t app_timer_start(app_timer_id_t timer_id, uint32_t timeout_ticks, void * p_context)
timer_id           app_timer_create()里创建的timer句柄
timeout_ticks       定时的tick数量,一般用APP_TIMER_TICKS()计算。
p_context          传递给超时回调函数的参数,不能指向局部的自动变量。

5、app_timer_stop()
停止一个timer的运行。接口定义如下:
uint32_t app_timer_stop(app_timer_id_t timer_id)
timer_id           app_timer_create()里创建的timer句柄

使用流程:
 app_timer_create();----> app_timer_start() ; ------->服务函数代码 -------->app_timer_stop()
先初始化将Timer创建         开始Timer使之计时          计时到后执行对应服务函数                     计时停止结束

如果是APP_TIMER_MODE_SINGLE_SHOT单次执行 ,那么服务函数执行一次后就结束了,当然了可以在服务函数中再次app_timer_start() 使之再次执行一次,当然也可再次执行N次,以便灵活使用
如果是APP_TIMER_MODE_REPEATED循环执行,那么当app_timer_start()之后,时间到后会执行服务函数,计时再次重新开始,周而复始

---------------------
作者:FreeBelieve
来源:CSDN
原文:https://blog.csdn.net/AA0210AA/article/details/49760565
版权声明:本文为博主原创文章,转载请附上博文链接!

nordic 51822 sdk. timer 的使用的更多相关文章

  1. Nordic nRF5 SDK和softdevice介绍

    SDK和Softdevice的区别是什么?怎么选择SDK和softdevice版本?芯片,SDK和softdevice有没有版本兼容问题?怎么理解SDK目录结构?SDK帮助文档在哪里?Softdevi ...

  2. nrf51822裸机教程-硬件timer

    该讲介绍51822的Timer/Counter模块工作在timer模式下(定时器模式,还可以工作为计数器模式) 如何操作 51822的Timer/Counter结构如下图所示 Timer模块从PCLK ...

  3. nRF5 SDK for Mesh(四) 源码编译

    官方文档教程编译源码: http://infocenter.nordicsemi.com/index.jsp?topic=%2Fcom.nordic.infocenter.sdk%2Fdita%2Fs ...

  4. nRF5 SDK for Mesh(一) 介绍和下载源码

    一: 官网介绍地址:http://www.nordicsemi.com/Products/Bluetooth-low-energy/nRF5-SDK-for-Mesh Nordic offers a ...

  5. nRF5 SDK软件架构及softdevice工作原理

    本文将介绍Nordic nRF5 SDK软件架构以及softdevice工作原理,以加深大家对Nordic产品开发的理解,这样开发过程中碰到问题时,大家也知道如何去调试. 如果你刚开始接触nRF5 S ...

  6. 如何调试nRF5 SDK

    本文将讲述Nordic nRF5 SDK的主要调试手段,以帮助大家快速定位问题,并解决问题.一般来说,你可以通过打log方式,IDE的debug模式,SDK自带的app_error_check函数,以 ...

  7. Nordic Blue Tooth

    一 . nordic BLE4.0 1.开发nordic的应用需要安装支持keil的pack库和插件 2.nordic的SDK很完整,实例涵盖了几乎所有的应用 https://www.nordicse ...

  8. 使用IAR在开发nordic问题记录

    使用IAR在开发nordic的sdk的时候,官方有一段话*****Note for IAR 8 users:(Libraries for IAR 8 require wchar_t to be of ...

  9. NORDIC BLE升级

    NRF52832 SDK15.3.0 概述: 所谓DFU(Device Firmware Update),就是设备固件升级的意思,而OTA是DFU的一种类型,准确说,OTA的全称应该是OTA DFU, ...

随机推荐

  1. noip模拟11

    T1 math 就挺水一小破题目,第一眼看好像不可做,看着看着突然发现假设x和y的最大公约数是gcd,那么kx%y一定是gcd的倍数, 然后想到可以把所有数字与k的gcd求出来,打一个完全背包,可是仔 ...

  2. PicGo插件

    前言:主要介绍PicGo插件,这里的图床上传软件是PicGo-Core,使用命令行操作 PicGo_Path:自己的PicGo安装路径,如果通过Typora一般安装位置位于 C:\Users\自己的主 ...

  3. 对于multitaper多窗口谱估计的理解及步骤 (对应matlab中pmtm函数)谱减法相关

    对于多窗口谱估计的理解 目录 对于多窗口谱估计的理解 0. 缘起 1. PMTM 含义 2. 与我们常用的周期谱估计的区别 3. 计算过程 5. 多窗/单窗谱估计结果对比 6. 程序如何生成多窗 - ...

  4. 远程设备管理opendx平台搭建-server,agent以及front实际搭建

    本系列文章讲述的是一个系列的第二部分,最终可以搭建一整套设备远程管理平台,与stf不同的是,opendx搭建较为简单,而且由于底层是appium来支持的,所以,较容易支持ios,也容易支持更高版本的安 ...

  5. SpringCloud升级之路2020.0.x版-30. FeignClient 实现重试

    本系列代码地址:https://github.com/JoJoTec/spring-cloud-parent 需要重试的场景 微服务系统中,会遇到在线发布,一般的发布更新策略是:启动一个新的,启动成功 ...

  6. Git 修改已提交的commit注释

    两种情况: 1.已经将代码push到远程仓库 2.还没将代码push到远程仓库,还在本地的仓库中 这两种情况下的修改大体相同,只是第一种情况最后会多一步 下面来说怎么修改 先搞清楚你要修改哪次的提交注 ...

  7. 【CVE-2020-1948】Apache Dubbo Provider反序列化漏洞复现

    一.实验简介 实验所属系列: 系统安全 实验对象:本科/专科信息安全专业 相关课程及专业: 计算机网络 实验时数(学分):2 学时 实验类别: 实践实验类 二.实验目的 Apache Dubbo是一款 ...

  8. PowerDotNet平台化软件架构设计与实现系列(04):服务治理平台

    系统和系统之间,少不了数据的互联互通.随着微服务的流行,一个系统内的不同应用进行互联互通也是常态. PowerDotNet的服务治理平台发源于早期的个人项目Power.Apix.这个项目借鉴了工作过的 ...

  9. [atAGC022D]Shopping

    称0到$L$的方向为左,同时为了方便,可以假设$0<t_{i}\le 2L$ 当我们确定是进入店中的方向,根据这个店的位置以及购物时间,不难确定出来时火车经过0或$L$的次数,由于$0<t ...

  10. [loj3367]装饼干

    先考虑如何判定一个$y$是否可行--从高位开始,记录这一位所需要的$2^{i}$数量$t$,若$y$的这一位为1,则$t+=x$,之后分两类讨论:1.$t\le a_{i}$,令$t=0$:2.$b& ...