nRF52832-基本外设使用:Timer使用

nRF52832-Timer使用

环境介绍

PC环境:Windows
IDE环境:ARM-MDK5
SDK环境:nRF5 SDK v15.1.0
硬件环境:nRF52832开发板(外设配置与官方pca10040开发板一致)

使用官方的timer例程,该位于nRF5_SDK_15.1.0_a8c0c4d\examples\peripheral\timer\pca10040\blank\arm5_no_packs目录下。
注:pca10040代表nRF52832例程,blank代表基础应用工程,ARM-MDK5选择arm5_no_packs

Timer使用配置

Timer配置步骤如下:

  1. 实例化定时器,获取分配的实例ID
  2. 实现回调函数
  3. 定时器配置,一般使用默认配置,其他配置可使用独立函数进行配置
  4. 获取设定时间所需的ticks数
  5. 设置定时器通道的拓展比较模式
  6. 使能定时器实例

Timer相关参数说明:

  • 定时器一共有5个:timer0~4,所以最多实例5个定时器
  • 使用SoftDevice时,timer0不能使用
  • 每个定时器最多拥有6个捕获比较通道NRF_TIMER_CC_CHANNEL0~5

官方源码分析

官方源码中timer应用在main.c文件实现,本文根据个人理解作相应的注释,如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
const nrf_drv_timer_t TIMER_LED = NRF_DRV_TIMER_INSTANCE(0);		//实例化timer0,获取分配ID:TIMER_LED


/**
* @brief 定时器事件处理函数(回调函数)
*/
void timer_led_event_handler(nrf_timer_event_t event_type, void* p_context)
{
static uint32_t i;
uint32_t led_to_invert = ((i++) % LEDS_NUMBER); //LEDS_NUMBER = 4,该语句实现i由0~3依次循环

switch (event_type) //判断事件类型
{
case NRF_TIMER_EVENT_COMPARE0: //timer0的COMPARE0事件
bsp_board_led_invert(led_to_invert); //对LED[i]状态进行翻转
break;

default: //其他事件不处理
//Do nothing.
break;
}
}


/**
* @brief Function for main application entry.
*/
int main(void)
{
uint32_t time_ms = 500; //定时时间500ms
uint32_t time_ticks;
uint32_t err_code = NRF_SUCCESS;

bsp_board_init(BSP_INIT_LEDS); //初始化LED1~LED4

nrf_drv_timer_config_t timer_cfg = NRF_DRV_TIMER_DEFAULT_CONFIG; //定时器配置,使用默认配置,默认参数在nrf_timer.h中定义
err_code = nrf_drv_timer_init(&TIMER_LED, &timer_cfg, timer_led_event_handler); //定时器初始化
APP_ERROR_CHECK(err_code);

time_ticks = nrf_drv_timer_ms_to_ticks(&TIMER_LED, time_ms); //获取500ms所需的ticks数

nrf_drv_timer_extended_compare( //配置timer0的捕获比较通道0的拓展比较模式,使能该通道中断
&TIMER_LED, NRF_TIMER_CC_CHANNEL0, time_ticks, NRF_TIMER_SHORT_COMPARE0_CLEAR_MASK, true);

nrf_drv_timer_enable(&TIMER_LED); //使能定时器

while (1)
{
__WFI(); //进入低功耗模式
}
}

资源参考

官方文档:http://infocenter.nordicsemi.com/index.jsp

例程说明位于官方文档目录:Software Development Kit > nRF5 SDK > nRF5 SDK v15.1.0 > Examples > Hardware peripheral examples > Timer Example

timer相关API函数说明位于官方目录:Software Development Kit > nRF5 SDK > nRF5 SDK v15.1.0 > API Reference > Peripheral drivers > Peripheral drivers > TIMER

代码烧录

  1. 擦除FLASH
  2. 烧写应用程序

具体操作参考:nRF52832-程序下载

本文标题:nRF52832-基本外设使用:Timer使用

文章作者:LGG001

发布时间:2018年09月06日 - 22:09

最后更新:2019年01月21日 - 20:01

原始链接:http://yoursite.com/2018/09/06/nRF52832-基本外设使用-Timer使用/

许可协议: 署名-非商业性使用-禁止演绎 4.0 国际 转载请保留原文链接及作者。

-------------本文结束感谢您的阅读-------------
Thank You For Your Approval !