【nordic 52832】 创建精准时间定时器

2023-11-03 03:48

本文主要是介绍【nordic 52832】 创建精准时间定时器,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

转自:https://blog.csdn.net/gyb510/article/details/51842834/

nordic封装了定时器,操作起来没有STM32一样方便,本文教你如何做时间计时

nrf52832 有五个定时器,timer0--timer4 。因为SDK已经使用了timer0,所以如果使用了SDK,就不能再使用timer0,只能使用timer1--timer4。

开发环境:在ble_app_hrs   demo上添加定时器任务      参考timer这个demo。

本例使用timer1,并且修改为32bit模式,原版是16bit,不修改会导致及时不正常

 

添加步骤:

1、添加驱动文件    nrf_drv_timer.c      在协议栈中的目录位置 :   nRF52_SDK\components\drivers_nrf\timer文件夹下

2、mian.c中添加头文件nrf_drv_timer.h

#include "nrf_drv_timer.h"

3、main.c中添加timer结构体变量:

const nrf_drv_timer_t TIMER_LED = NRF_DRV_TIMER_INSTANCE(1);

4、在main.c中添加timer1 初始化函数以及定时任务处理函数:

/*** @brief Handler for timer events.*/
void timer_led_event_handler(nrf_timer_event_t event_type, void* p_context)
{// uint32_t led_to_invert = (1 << leds_list[(i++) % LEDS_NUMBER]);// printf("6\n");switch(event_type){case NRF_TIMER_EVENT_COMPARE0://  LEDS_INVERT(led_to_invert);ledFlash();break;default://Do nothing.break;}    
}void myTimerInit()
{uint32_t time_ms = 1000; //Time(in miliseconds) between consecutive compare events.uint32_t time_ticks;uint32_t err_code = NRF_SUCCESS;//Configure all leds on board.//Configure TIMER_LED for generating simple light effect - leds on board will invert his state one after the other.err_code = nrf_drv_timer_init(&TIMER_LED, NULL, timer_led_event_handler);APP_ERROR_CHECK(err_code);time_ticks = nrf_drv_timer_ms_to_ticks(&TIMER_LED, time_ms);nrf_drv_timer_extended_compare(&TIMER_LED, NRF_TIMER_CC_CHANNEL0, time_ticks, NRF_TIMER_SHORT_COMPARE0_CLEAR_MASK, true);nrf_drv_timer_enable(&TIMER_LED);
}


 
 


5、main函数中添加timer初始化调用:
    

myTimerInit();

6、在nrf_driver_config.c中修改timer1的定义:

#define TIMER1_ENABLED 1#if (TIMER1_ENABLED == 1)
#define TIMER1_CONFIG_FREQUENCY    NRF_TIMER_FREQ_16MHz
#define TIMER1_CONFIG_MODE         TIMER_MODE_MODE_Timer
#define TIMER1_CONFIG_BIT_WIDTH    TIMER_BITMODE_BITMODE_32Bit
#define TIMER1_CONFIG_IRQ_PRIORITY APP_IRQ_PRIORITY_LOW


7.如何设置进入中断时间

在myTimerInit()内修改,这样不需要设置系统分频就可以计时了。

uint32_t time_ms = 1000;1000ms中断一次

 

这篇关于【nordic 52832】 创建精准时间定时器的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/335369

相关文章

MySQL分表自动化创建的实现方案

《MySQL分表自动化创建的实现方案》在数据库应用场景中,随着数据量的不断增长,单表存储数据可能会面临性能瓶颈,例如查询、插入、更新等操作的效率会逐渐降低,分表是一种有效的优化策略,它将数据分散存储在... 目录一、项目目的二、实现过程(一)mysql 事件调度器结合存储过程方式1. 开启事件调度器2. 创

mysql外键创建不成功/失效如何处理

《mysql外键创建不成功/失效如何处理》文章介绍了在MySQL5.5.40版本中,创建带有外键约束的`stu`和`grade`表时遇到的问题,发现`grade`表的`id`字段没有随着`studen... 当前mysql版本:SELECT VERSION();结果为:5.5.40。在复习mysql外键约

Window Server创建2台服务器的故障转移群集的图文教程

《WindowServer创建2台服务器的故障转移群集的图文教程》本文主要介绍了在WindowsServer系统上创建一个包含两台成员服务器的故障转移群集,文中通过图文示例介绍的非常详细,对大家的... 目录一、 准备条件二、在ServerB安装故障转移群集三、在ServerC安装故障转移群集,操作与Ser

Window Server2016 AD域的创建的方法步骤

《WindowServer2016AD域的创建的方法步骤》本文主要介绍了WindowServer2016AD域的创建的方法步骤,文中通过图文介绍的非常详细,对大家的学习或者工作具有一定的参考学习价... 目录一、准备条件二、在ServerA服务器中常见AD域管理器:三、创建AD域,域地址为“test.ly”

Python在固定文件夹批量创建固定后缀的文件(方法详解)

《Python在固定文件夹批量创建固定后缀的文件(方法详解)》文章讲述了如何使用Python批量创建后缀为.md的文件夹,生成100个,代码中需要修改的路径、前缀和后缀名,并提供了注意事项和代码示例,... 目录1. python需求的任务2. Python代码的实现3. 代码修改的位置4. 运行结果5.

使用IntelliJ IDEA创建简单的Java Web项目完整步骤

《使用IntelliJIDEA创建简单的JavaWeb项目完整步骤》:本文主要介绍如何使用IntelliJIDEA创建一个简单的JavaWeb项目,实现登录、注册和查看用户列表功能,使用Se... 目录前置准备项目功能实现步骤1. 创建项目2. 配置 Tomcat3. 项目文件结构4. 创建数据库和表5.

Python 标准库time时间的访问和转换问题小结

《Python标准库time时间的访问和转换问题小结》time模块为Python提供了处理时间和日期的多种功能,适用于多种与时间相关的场景,包括获取当前时间、格式化时间、暂停程序执行、计算程序运行时... 目录模块介绍使用场景主要类主要函数 - time()- sleep()- localtime()- g

使用SpringBoot创建一个RESTful API的详细步骤

《使用SpringBoot创建一个RESTfulAPI的详细步骤》使用Java的SpringBoot创建RESTfulAPI可以满足多种开发场景,它提供了快速开发、易于配置、可扩展、可维护的优点,尤... 目录一、创建 Spring Boot 项目二、创建控制器类(Controller Class)三、运行

JAVA中整型数组、字符串数组、整型数和字符串 的创建与转换的方法

《JAVA中整型数组、字符串数组、整型数和字符串的创建与转换的方法》本文介绍了Java中字符串、字符数组和整型数组的创建方法,以及它们之间的转换方法,还详细讲解了字符串中的一些常用方法,如index... 目录一、字符串、字符数组和整型数组的创建1、字符串的创建方法1.1 通过引用字符数组来创建字符串1.2

手把手教你idea中创建一个javaweb(webapp)项目详细图文教程

《手把手教你idea中创建一个javaweb(webapp)项目详细图文教程》:本文主要介绍如何使用IntelliJIDEA创建一个Maven项目,并配置Tomcat服务器进行运行,过程包括创建... 1.启动idea2.创建项目模板点击项目-新建项目-选择maven,显示如下页面输入项目名称,选择