一、nRF51822的时钟系统

nRF51822有两种时钟源:1、高频时钟HFCLK;2、低频时钟LFCLK。这两种时钟只有当系统处于System ON模式的情况下才可用。

低频时钟源

系统有三种低频时钟源:1、32.768kHz晶体振荡器;2、32.768kHz RC振荡器;3、32.768kHz合成时钟(从HFCLK合成的32.768kHz时钟)

二、定时器/计数器

1、时钟源启动

无论是STM32还是nRF51822,在开启定时器之前,都要开启对应的时钟源,否则,定时器是无法正常工作的。
nRF51822的定时器工作于HFCLK,也就是使用PCLK1M和PCLK16M作为定时器的时钟源。在这里要注意,当定时器设定的分频值使用的定时器频率小于或者等于1MH,且没有其他功能模块请求HFCLK时,系统将自动使用HFCLK的1MHz模式,这样可以节省功耗。
根据nRF51822用户手册,HFCLK晶体振荡器通过触发HFCLKSTART任务开启,触发HFCLKSTOP任务关闭。当选择的HFCLK晶体振荡器开启时会产生一个HFCLKSTARTED事件。
上图为nRF51822的时钟源寄存器描述。在打开HFCLK时钟时,为避免以前HFCLK开启可能造成的干扰,在开启HFCLK之前,要先将事件寄存器HFCLKSTARTED(事件寄存器在HFCLK启动时会自动更新为1)清除,然后设置任务寄存器HFCLKSTART使HFCLK开启,最后循环等待HFCLK开启成功。程序如下:
void HFCLK_init(void)
{NRF_CLOCK->HFCLKSTARTED=0;NRF_CLOCK->HFCLKSTART=0;while(NRF_CLOCK->HFCLKSTARTED==0)           //HFCLK晶体振荡器开启时会产生一个HFCLKSTARTED事件
 {//Do nothing}
}

2、定时器配置

工作模式:nRF51822的TIMER有两种工作模式:定时器模式(Timer mode)和计数器模式(Counter mode)。
开启与关闭:在所有模式中,TIMER都是通过触发START任务开启,触发STOP任务关闭。
计时时钟:1、在定时器模式下,TIMER内部的计数寄存器(Counter register)在计时频率fTIMER每滴答一次时加1。计时频率通过预分频寄存器PRESCALER来设置。2、在计数器模式下,每当COUNT任务触发一次TIMER内部的计数寄存器(Counter register)加1,也就是计数频率和预分频寄存器在计数器模式下并没有使用。同样,COUNT任务在定时器模式下也没有任何作用。
计数的最大值(溢出时的值):最大计数值可以通过改变在BITMODE寄存器中的TIMER的位宽来实现。BITMODE设定了 Counter寄存器和 比较/捕获寄存器使用的位数。1、TIMER0:可选择的位宽为8、16、24、32;2、TIMER1和TIMER2:可选择的位宽都为8、16。
比较/捕获寄存器:1、定时器模式:当Counter的值与在比较/捕获寄存器CC[n]中值相等时,对应的比较事件COMPARE[n]将会产生。2、计数器模式:通过设置一个CAPTURE任务,当计数到与比较/捕获寄存器设定的值相等时,CAPTURE[n]任务将会触发“捕获定时器的值(Counter value)到CC[n]寄存器。
nRF51822有TIMER0、TIMER1、TIMER2,这3个TIMER分别带有4个比较/捕获寄存器。比较/捕获寄存器的值不同可以产生不同的定时时间。
定时器配置程序如下所示:
void timer0_init(void)
{//设置TIMER0为定时器模式NRF_TIMER0->MODE=TIMER_MODE_MODE_Timer;//配置预分频寄存器,对时钟源HFCLK进行分频NRF_TIMER0->PRESCALER=9;//设置计数位宽,决定计数值的最大值NRF_TIMER0->BITMODE=TIEMR_BITMODE_BITMODE_16Bit;
}static void nrf_timer0_delay_ms(uint_fast16_t voloatile number_of_ms)
{//每次定时器开始计数前,都要将TIMER内部的计数器清零NRF_TIMER0->TASK_CLEAR=1;//2^9分频值后,TIMER的计数频率为31250Hz,也就是每32us tick一次。则1ms tick 31.25次,但是CC[0]寄存器不能存储小数,故采用下面方法NRF_TIMER0->CC[0]=number_of_ms*31;NRF_TIMER0->CC[0]+=number_of_ms/4;//启动定时器NRF_TIMER0->TASK_START=1;//等待对应的COMPARE[0]事件的发生while(NRF_TIMER0->EVENTS_COMPARE[0]==0){//COMPARE[0]事件发生之后,跳出循环}//清除COMPARE[0]事件,为下次定时做准备NRF_TIMER0->EVENTS_COMPARE[0]=0;//关闭定时器NRF_TIMER0->TASK_STOP=1;
}

定时器设置流程图如上图所示。其中TIMER的内部计数寄存器的值必须清除。因为它会一直计数,直到溢出,然后进入下次循环。当定时器开启时,它会接着定时器停止时的值继续计数,计数器计数就会产生差错。

nRF51822定时器设置相关推荐

  1. Nrf51822中设置128bit UUID service

    Nrf51822中设置128bit UUID service Nrf51822中设置128bit UUID service uint32_tble_dajia_add_service(ble_daji ...

  2. html倒计时timer,JavaScript定时器设置、使用与倒计时案例详解

    本文实例讲述了JavaScript定时器设置.使用与倒计时案例.分享给大家供大家参考,具体如下: 1.设置定时器 定时器,适用于定时执行的任务中.在BOM的window对象中,有这样的两个函数是用于设 ...

  3. 关于jquery定时器设置问题 ios定时器无法响应问题 ios 时间显示为NaN问题 优惠时间倒计时

    设计时间为:"2019-12-17"发现安卓端和浏览器端,浏览器模拟器显示均没问题,但是ios 手机显示为NaN 解决办法 :把"2019-12-17"改为&q ...

  4. 51单片机c语言定时器程序,51单片机定时器设置入门与程序解析

    89C51单片机有两个计数器T0和T1,每个计数器都是由两个8位的RAM 单元组成的,即每个计数器都是16 位的计数器,最大的计数容量是216=65536,记住是从0-65535. 其次.提供给定时器 ...

  5. 关于STM32的定时器设置

    1.定义RCC时钟 RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2, ENABLE); 2.定义时钟触发 TIM_TimeBaseInit(TIM2, & ...

  6. spring 定时器设置停止_单片机MSP430入门-理论⑦--定时器模块-定时器A②

    单片机MSP430入门-理论⑦--定时器模块-定时器A② 上期大概给大家汇总介绍了,定时器模块中比较重要并且常用的定时器A,大概说了下定时器A的两种常用模式,比较模式和捕获模式 本期将继续介绍定时器A ...

  7. mysql查看是否开启定时器_Mysql 查看定时器 打开定时器 设置定时器时间

    1.查看是否开启evevt与开启evevt. 1.1.MySQL evevt功能默认是关闭的,可以使用下面的语句来看evevt的状态,如果是OFF或者0,表示是关闭的. show VARIABLES ...

  8. Linux 定时器设置

    函数alarm设置的定时器只能精确到秒,而以下函数理论上可以精确到微妙: #include <sys/select.h> #include <sys/time.h> int g ...

  9. c51随机数不重复_单片机定时器设置不重复随机数

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 请问我这个程序为什么不能不重复取随机数?怎么设置不让0出现 #include #include #define uchar unsigned char # ...

最新文章

  1. HTML5 离线存储之Web SQL
  2. 无线局域网安装与调试(Wireless LAN installation and commissioning)
  3. ProxySQL Cluster 概述
  4. hibernate的二级缓存
  5. [摘录]软件版本GA,RC,alpha,beta,Build 含义
  6. dataTables去掉搜索框,每页多少条框体,解决Cannot reinitialise DataTable问题,以及数据格式ajax等问题...
  7. 犯病的chorme(谷歌浏览器)之css加载失败
  8. 拼图游戏的设计与实现
  9. 设计模式--策略模式(strategy)
  10. dojochina的ExtJS视频教程学习笔记(二
  11. 维修频谱分析仪多少钱?简单告诉你,频谱分析仪维修实例报价
  12. solaris常用系统命令
  13. Linux 下安装交叉编译工具链
  14. 2022年自考专业(工商企业管理)电子商务概论练习题
  15. psd 解析 java_PSD解析工具实现(一)
  16. 香港流行乐黄金二十年——经典歌手(音乐人)全面回顾 二
  17. Qt 获取控件位置坐标,屏幕坐标,相对父窗体坐标
  18. Hadoop纠删码(Erasure Coding)简介
  19. Java+spring+springmvc ssm432咖啡馆咖啡销售预定管理系统#毕业设计
  20. 【数位板常见问题】压感笔为什么没有压感了

热门文章

  1. chrome浏览器表单自动填充默认样式-autofill设置
  2. 【Selenium】切换/窗口切换
  3. 【jiasuba】分享:键盘失灵烦恼多 教你轻松禁用原键盘
  4. 应用程序正常初始化 0xc015002 失败
  5. 【Linux】软件安装、仓库搭建、服务器配置
  6. goahead 移植
  7. Rosalind Java| Complementing a Strand of DNA
  8. epoll LT ET 区别 | Nginx epoll 原理 listend 用 LT
  9. initramfs详解----设备文件系统
  10. CTP开发(1)CTP开发的概述