一、简介

在有BLE协议栈的工程中,软件定时器用的是实时时钟RTC1

二、使用步骤

2.1 头文件

#include "app_timer.h"

2.2 定义定时器

APP_TIMER_DEF(s_testTimer);    // 测试的定时器

2.3 定义定时时间

#define TEST_PERIOD    APP_TIMER_TICKS(200)  // 定时时间(200ms)

2.4 定义回调函数

/**@brief 测试定时器的回调函数@param 无@return 无
*/
static void timer_testCallback(void *arg)
{UNUSED_PARAMETER(arg);// 在这里加入自己的应用处理
}

2.5 创建定时器

定时器模式有两种:

/**@brief Timer modes. */
typedef enum
{APP_TIMER_MODE_SINGLE_SHOT,                 /**< The timer will expire only once. */APP_TIMER_MODE_REPEATED                     /**< The timer will restart each time it expires. */
} app_timer_mode_t;

APP_TIMER_MODE_SINGLE_SHOT 一次性定时器
APP_TIMER_MODE_REPEATED 循环定时器

/**@brief 创建测试的定时器@param 无@return 无
*/
void CreateTestTimer(void)
{app_timer_create(&s_testTimer, APP_TIMER_MODE_SINGLE_SHOT, timer_testCallback);
}

2.6 开启定时器

/**@brief 开启测试的定时器@param 无@return 无
*/
void StartTestTimer(void)
{app_timer_start(s_testTimer, TEST_PERIOD, NULL);
}

2.7 关闭定时器

/**@brief 关闭测试的定时器@param 无@return 无
*/
void StopTestTimer(void)
{app_timer_stop(s_testTimer);
}

三、加入文件

3.1 user_timer.h

#ifndef _USER_TIMER_H_
#define _USER_TIMER_H_/********************************************************************** DEFINITIONS*/
#define TEST_PERIOD    APP_TIMER_TICKS(200) // 定时时间(200ms)/*********************************************************************
* API FUNCTIONS
*/
void CreateTestTimer(void);
void StartTestTimer(void);
void StopTestTimer(void);#endif /* _USER_TIMER_H_ */

3.2 user_timer.c

/********************************************************************** INCLUDES*/
#include "app_timer.h"
#include "user_timer.h"static void timer_testCallback(void *arg);/********************************************************************** LOCAL VARIABLES*/
APP_TIMER_DEF(s_testTimer);    // LED闪烁开的定时器/********************************************************************** PUBLIC FUNCTIONS*/
/**@brief 创建测试的定时器@param 无@return 无
*/
void CreateTestTimer(void)
{app_timer_create(&s_testTimer, APP_TIMER_MODE_SINGLE_SHOT, timer_testCallback);
}/**@brief 开启测试的定时器@param 无@return 无
*/
void StartTestTimer(void)
{app_timer_start(s_testTimer, TEST_PERIOD, NULL);
}/**@brief 关闭测试的定时器@param 无@return 无
*/
void StopTestTimer(void)
{app_timer_stop(s_testTimer);
}/********************************************************************** LOCAL FUNCTIONS*/
/**@brief 测试定时器的回调函数@param 无@return 无
*/
static void timer_testCallback(void *arg)
{UNUSED_PARAMETER(arg);// 在这里加入自己的应用处理
}

四、使用例子

如SDK15.3 中 ble_peripheral 的 ble_app_template 工程
main.c 中的 main 函数中有两个函数:timers_init()用于初始化定时器,application_timers_start()用于启动定时器应用。

4.1 timers_init()中

加入创建定时器

/**@brief Function for the Timer initialization.** @details Initializes the timer module. This creates and starts application timers.*/
static void timers_init(void)
{// Initialize timer module.ret_code_t err_code = app_timer_init();APP_ERROR_CHECK(err_code);// Create timers./* YOUR_JOB: Create any timers to be used by the application.Below is an example of how to create a timer.For every new timer needed, increase the value of the macro APP_TIMER_MAX_TIMERS byone.ret_code_t err_code;err_code = app_timer_create(&m_app_timer_id, APP_TIMER_MODE_REPEATED, timer_timeout_handler);APP_ERROR_CHECK(err_code); */CreateTestTimer();
}

4.2 application_timers_start()中

启动定时器应用

/**@brief Function for starting timers.*/
static void application_timers_start(void)
{/* YOUR_JOB: Start your timers. below is an example of how to start a timer.ret_code_t err_code;err_code = app_timer_start(m_app_timer_id, TIMER_INTERVAL, NULL);APP_ERROR_CHECK(err_code); */StartTestTimer();
}

• 由 Leung 写于 2019 年 12 月 17 日

• 参考:青风电子社区

NRF52832学习笔记(2)——定时器接口使用相关推荐

  1. NRF52832学习笔记(40)——RFID RC522使用

    一.简介 MF RC522 是应用于 13.56MHz 非接触式通信中高集成度读写卡系列芯片中的一员.是 NXP 公司针对"三表"应用推出的一款低电压.低成本.体积小的非接触式读写 ...

  2. NRF52832学习笔记(35)——4G模块EC200S使用

    一.简介 EC200S-CN 是移远通信最近推出的 LTE Cat 1 无线通信模块,支持最大下行速率 10Mbps 和最大上行速率 5Mbps,具有超高的性价比:同时在封装上兼容移远通信多网络制式 ...

  3. NRF52832学习笔记(18)——RFID SI522使用

    一.简介 ACD(低功耗寻卡)只是一种模式,和 PCD(普通寻卡)是一样的,在使用到 ACD 模式时,其实就是普通的读写模式和低功耗模式的切换,可以理解为"ACD 函数"中嵌套了一 ...

  4. nrf52832 学习笔记(五)蓝牙主从机连接和连接参数更新

    nrf52832 学习笔记(五)蓝牙主从机连接和连接参数更新 主机连接 nrf52832 SDK中主机连接从机需要使用 sd_ble_gap_connect(ble_gap_addr_t const ...

  5. nrf52832 学习笔记(三)蓝牙从机广播

    nrf52832 学习笔记(三)蓝牙从机广播 蓝牙从机要想被主机连接,首先需要发送广播信息,周围主机通过扫描广播信号,根据从机的广播信息,判断是否连接. 蓝牙协议栈初始化 不管是主机还是从机,要想使用 ...

  6. nrf52832 学习笔记(七)蓝牙协议层级理解

    nrf52832 学习笔记(七)蓝牙协议层级理解 本文主要由一下几篇文档摘录汇总而成 ,如有错误欢迎斧正 da14531 蓝牙协议文档 深入浅出低功耗蓝牙(BLE)协议栈 低功耗蓝牙ATT/GATT/ ...

  7. PhalAPI学习笔记 ——— 第二章接口服务请求

    PhalAPI学习笔记 --- 第二章接口服务请求 前言 接口服务请求 接口服务请求案例 自定义接口路由 开启匹配路由 配置路由规则 nginx apache 服务请求 结束语 前言 公司业务需要转学 ...

  8. nrf52832 学习笔记(六)配对和绑定

    nrf52832 学习笔记(六)配对和绑定 配对绑定推荐博客低功耗蓝牙配对绑定解读和实践 蓝牙在配对之前都是明文通信的,也就是说主从机之间传输的数据包可以被第三方抓取分析逆向,而且如果没有配对,谁都可 ...

  9. NRF52832学习笔记(38)——修改发射功率

    一.背景 蓝牙接收信号强度 RSSI 的直接影响因素就是蓝牙信号的发射功率.发射功率就是你所使用的设备(开发板.手机)所发射出来给主机或从机设备的信号强度.同时在实际应用当中,时常也需要修改蓝牙的发射 ...

  10. nrf52832 学习笔记(一)开发资料汇总

    nrf52832 学习笔记(一)开发资料汇总 协议栈和SDK下载地址 nordic官方的sdk分为ncs(nRF Connect SDK)和sdk17(nRF5 SDK)两种,区别是: sdk17不会 ...

最新文章

  1. 在RedHat上安装gcc,java 和 eclipse-rcp
  2. 【C语言】关于结构体最后的长度为0或1数组的思考
  3. JavaScript学习总结(二)数组和对象部分
  4. 1Python全栈之路系列Web框架介绍
  5. P5020-货币系统【背包】
  6. gcc -E 产生预编译后的文件
  7. 基于tensorflow实现图像分类——理解神经网络运作过程、tensorflow入门
  8. JS中innerHTML 和innerText和value的区别
  9. 隐马尔科夫模型HMM学习最佳范例
  10. AD9833资料收集
  11. ansys模型导入matlab,CAD三维模型导入ANSYS的万能方法
  12. Atitit q2016 q0 doc list on home ntpc.docx
  13. c语言抛物线弓形图像,行列式计算(C#)
  14. 【无标题】电自2104吕薇202130310206
  15. 重装战姬服务器维护,重装战姬更新维护公告(2020年3月26日)
  16. 程序员找工作的个人经验及注意事项
  17. mac 连接windows远程桌面软件Parallels Client
  18. 2021年江西工业互联网安全技术技能大赛线上初赛Writeup
  19. 搜狗输入法人机交互设计的用户体验
  20. SAP全球企业官孙小群:掌握自己的命运,让生活充满阳光

热门文章

  1. [项目管理]-第十三章:项目收尾
  2. php imagick 区别,对比Imagick和Gmagick的像素迭代功能
  3. 【报告分享】7.5-7.11两大消费赛道——抖音、快手直播带货周报-果集数据(附下载)
  4. 怎样培养独挡一面的能力 .
  5. HDU 5304 Eastest Magical Day Seep Group's Summer(状压DP+环缩点+生成树计数)
  6. 团队发展的四个阶段以及各阶段的领导力施展
  7. 什么是CCRC信息安全服务资质?
  8. 配置酷酷的Windows Powershell
  9. div+css实例布局(一)
  10. java客户端访问ApiServer(kubernetes-client使用)