timer

1.定时器的功能:定时(需要配置比较/捕获寄存器的比较值)、计数
2.nrf52832具有5个32位的timer定时器
3.时钟源:1.当f < 1MHz,系统自动选择PCLK1M的时钟源(低功耗)2.当f > 1MHz,系统自动选择PCLK16M的时钟源
4.timer的时钟频率可以选择(0-9分频)无论使用哪个时钟源都是以16M的为基准

timer常见函数

1.定义定时器实例:nrfx_timer_t timer_instance = NRF_DRV_TIMER_INSTANCE(timer_id)
2.定义定时器结构体:nrfx_timer_config_t timer_cfg = NRF_DRV_TIMER_DEFAULT_CONFIG(定时器默认配置,可以字sdkconfig.h进行修改)1.frequency :时钟频率2.mode      :模式 3.bit_witdth:位宽4.interrupt_priority:优先级5.中断处理函数
3.定时器初始化函数:nrfx_timer_init(&timer_instance,&timer_cfg,timer_cb_handle)
4.定时器使能函数:nrfx_timer_enable(&timer_instance)
5.定时器不使能函数nrfx_timer_disable(&timer_instance)6.定时器的计数(count)方式:读取计数值函数;nrfx_timer_capture(&timer_instance,cc_channal)cc_channal:比较通道触发方式;nrfx_timer_increment(&timer_instance)手动触发:PPI(可编程外设互联)触发:

timer定时示例程序

#include <stdbool.h>
#include <stdint.h>
#include "nrf_delay.h"
#include "boards.h"
#include "nrf_log.h"
#include "nrf_log_ctrl.h"
#include "nrf_log_default_backends.h"
#include "nrf_drv_timer.h"static void log_init(void)
{ret_code_t err = NRF_LOG_INIT(NULL);APP_ERROR_CHECK(err);NRF_LOG_DEFAULT_BACKENDS_INIT();
}const nrfx_timer_t timer_instance = NRFX_TIMER_INSTANCE(0);                   //定义一个定时器实例,选择timer0void timer_event_handle(nrf_timer_event_t event_type,void* p_context)        //定时器事件回调函数
{switch (event_type){case NRF_TIMER_EVENT_COMPARE0:                                 //定时器0事件,翻转电平nrf_gpio_pin_toggle(17);break;default:break;}
}void timer_init(void)
{uint32_t err = NRF_SUCCESS;uint32_t timer_ms = 500;uint32_t timer_ticks;//可以在sdkconfig.h文件中修改默认配置(16M,16bit, priority:6,无参数,mode:timer)nrfx_timer_config_t timer_cfg = NRFX_TIMER_DEFAULT_CONFIG;               //定义一个定时器结构体,默认配置err = nrfx_timer_init(&timer_instance,&timer_cfg,timer_event_handle);  //初始化定时器,注册回调函数APP_ERROR_CHECK(err);timer_ticks = nrfx_timer_ms_to_ticks(&timer_instance,timer_ms);         //计算500ms占用几个ticknrfx_timer_extended_compare(&timer_instance,NRF_TIMER_CC_CHANNEL0,timer_ticks,NRF_TIMER_SHORT_COMPARE0_CLEAR_MASK,true);//定时器0比较通道溢出清0
}int main(void)
{log_init();nrf_gpio_cfg_output(17);nrf_gpio_pin_set(17);timer_init();nrfx_timer_enable(&timer_instance);                                   //使能定时器NRF_LOG_INFO("GPIO example started");NRF_LOG_FLUSH();while(1){}
}

timer的计数示例程序

#include <stdbool.h>
#include <stdint.h>
#include "nrf_delay.h"
#include "boards.h"
/* 包含log头文件 */
#include "nrf_log.h"
#include "nrf_log_ctrl.h"
#include "nrf_log_default_backends.h"
/* 包含定时器头文件 */
#include "nrf_drv_timer.h"
/* 包含uart头文件 */
#include "app_uart.h"
#if defined (UART_PRESENT)
#include "nrf_uart.h"
#endif
#if defined (UARTE_PRESENT)
#include "nrf_uarte.h"
#endif/* 定义uart发送接收缓冲区 */
#define     UART_TX_BUF_SIZE        256
#define     UART_RX_BUF_SIZE        256const nrfx_timer_t timer_instance = NRFX_TIMER_INSTANCE(0);                 //定义一个定时器实例,选择timer0/*** log初始化函数*/
static void log_init(void)
{ret_code_t err = NRF_LOG_INIT(NULL);      //log初始化APP_ERROR_CHECK(err);                       //检测log配置信息NRF_LOG_DEFAULT_BACKENDS_INIT();         //开启log
}/*** uart事件回调函数*/
void uart_event_handle(app_uart_evt_t* event)
{//uart通讯出错事件if(event->evt_type == APP_UART_COMMUNICATION_ERROR){APP_ERROR_HANDLER(event->data.error_communication);}//fifo错误事件else if(event->evt_type == APP_UART_FIFO_ERROR){APP_ERROR_HANDLER(event->data.error_code);}
}/*** uart初始化参数配置函数*/
void uart_config(void)
{uint32_t err;/* 串口结构体参数 */const app_uart_comm_params_t comm_params = {RX_PIN_NUMBER,                                  //接收引脚p0.08TX_PIN_NUMBER,                                   //发送引脚p0.06RTS_PIN_NUMBER,                                  //输出信号引脚p0.05CTS_PIN_NUMBER,                                    //输入信号引脚p0.07APP_UART_FLOW_CONTROL_DISABLED,                    //使能软件控制流false,                                         //不校验NRF_UART_BAUDRATE_115200                       //串口波特率115200};/* 串口初始化 */APP_UART_FIFO_INIT(&comm_params,                  //串口结构体UART_RX_BUF_SIZE,                //串口接收缓冲区大小UART_TX_BUF_SIZE,                //串口发送缓冲区大小uart_event_handle,               //串口事件回调函数APP_IRQ_PRIORITY_LOWEST,      //串口中断优先级最低err);                            //配置信息APP_ERROR_CHECK(err);                             //检测配置是否成功
}void timer_event_handler(nrf_timer_event_t event_type, void* p_context){}void timer_init(void)
{uint32_t err = NRF_SUCCESS;//可以在sdkconfig.h文件中修改默认配置(16M,16bit, priority:6,无参数,mode:timer)nrfx_timer_config_t timer_cfg = NRFX_TIMER_DEFAULT_CONFIG;             //定义一个定时器结构体,默认配置timer_cfg.mode = NRF_TIMER_MODE_COUNTER;err = nrfx_timer_init(&timer_instance,&timer_cfg,timer_event_handler);    //初始化定时器,不需要注册回调函数APP_ERROR_CHECK(err);
}/*** uart初始化函数*/int main(void)
{uint32_t value = 0;//log初始化log_init();nrf_gpio_cfg_output(17);nrf_gpio_pin_clear(17);//串口初始化uart_config();timer_init();nrfx_timer_enable(&timer_instance);NRF_LOG_INFO("uart example start");NRF_LOG_FLUSH();while(1){nrfx_timer_increment(&timer_instance);value = nrfx_timer_capture(&timer_instance,NRF_TIMER_CC_CHANNEL2);printf("value = %d\r\n",value);nrf_delay_ms(500);nrf_gpio_pin_toggle(17);}
}
记得包含串口的源文件,否则可能出现编译没问题,运行没效果的现象

五、nrf52832的timer定时器相关推荐

  1. 【Android 异步操作】Timer 定时器 ( Timer 与 TimerTask 基本使用 | Timer 定时器常用用法 | Timer 源码分析 )

    文章目录 一.Timer 定时器基本使用 二.Timer 定时器常用用法 三.Timer 源码分析 四.Timer 部分源码注释 五.源码及资源下载 参考文档 : Timer 定时器 API 文档 T ...

  2. ESP32 (Timer)-定时器学习(7)

    提示:本博客作为学习笔记,有错误的地方希望指正 文章目录 一.ESP32定时器介绍 1.1.概述 1.2.使用esp_timer api 1.3.回调函数 1.4.esp_timer在浅睡眠期间 1. ...

  3. 十、RISC-V SoC外设——timer定时器 代码讲解

    上一篇博文中注释了SPI外设模块,现在来介绍timer定时器模块. 另外,在最后一个章节中会上传额外添加详细注释的工程代码,完全开源,如有需要可自行下载. 目录 0 RISC-V SoC注解系列文章目 ...

  4. Timer定时器开发

    Timer定时器开发 定时器的作用是不占线程的等待一个确定时间,同样通过callback来通知定时器到期. 参考:https://github.com/sogou/workflow 定时器的创建 同样 ...

  5. java Timer定时器管理类

    1.java timer类,定时器类.启动执行定时任务方法是timer.schedule(new RemindTask(), seconds*1000);俩参数分别是TimerTask子类,具体执行定 ...

  6. timer.schedule —— timer定时器的用法

    Java.util.Timer定时器,实际上是个线程,定时调度所拥有的TimerTasks. 一个TimerTask实际上就是一个拥有run方法的类,需要定时执行的代码放到run方法体内,TimerT ...

  7. python timer使用-Python timer定时器两种常用方法解析

    这篇文章主要介绍了Python timer定时器两种常用方法解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 方法一,使用线程中现成的: 这种一般 ...

  8. java项目中多个定时器_在java项目中如何使用Timer定时器

    在java项目中如何使用Timer定时器 发布时间:2020-11-16 16:36:16 来源:亿速云 阅读:97 作者:Leah 在java项目中如何使用Timer定时器?很多新手对此不是很清楚, ...

  9. java timer线程结束_Java线程Timer定时器用法详细总结

    定时/计划功能主要使用的就是Timer对象,它在内部还是使用多线程的方式进行处理,所以它和线程技术还是有非常大的关联. Timer类主要作用就是设置计划任务,但封装任务的类却是TimerTask类.T ...

最新文章

  1. ResNet在计算机视觉中的应用
  2. 从技术角度分析推荐系统案例
  3. JAVA入门级教学之(myeclipse的使用)
  4. 【LeetCode】【HOT】206. 反转链表(迭代/递归)
  5. Android中列表框纵向布局,andriod布局常用控件属性..docx
  6. oracle dbv 离线,bbed和dbv检查数据文件结果不一致?
  7. 探访新疆北部主力气田:推陈出新 “新科技”保供气
  8. Socket.io详解
  9. 团队作业-第1周-提交处-团队组建及项目启动
  10. 对象语言和元语言(关于命题公式的证明和估值)
  11. 会议日程安排问题python
  12. postfix dovecot邮件服务器搭建
  13. Spring 面向切面编程(AOP) D5
  14. 中国信通院:5G无人机应用白皮书
  15. 万字起底澳本聪:一个正在崩溃的谎言
  16. 获取表格的方法:sheet1$不是一个有效的名称,请确保它不包括无效的字符或标点,或字符不要太长
  17. doraemon的python 线程详解
  18. 温水煮青蛙 将死不自知
  19. crt打开FTP文件服务器,crt登陆到ftp服务器
  20. java中的锁(悲观锁、乐观锁、可重入锁、不可重入锁、公平锁、非公平锁、自旋锁、阻塞锁...)

热门文章

  1. C++实现---学生选课系统
  2. ATmi-I接口软件
  3. Navicat Premium for Mac的破解教程
  4. 如何通俗的理解协方差、相关系数?
  5. 编程3小时 ?华为最强招聘程序员标准出炉!
  6. 6.判断链表是否有环
  7. GPON Type C保护
  8. Linux 下手动查杀木马过程
  9. 飞腾CPU体系结构之系统指令
  10. 更智能行车记录仪,4K画质超清晰,凌度行车记录仪 4K版上手