nRF52832 看门狗 使用 低频时钟源(LFCLK)提供时钟,是向下计数的定时器。
启动后,看门狗加载 CRV 寄存器中的指定值。然后开始计数,当计数到0后,会溢出产生 TIMEOUT 事件。看门狗 TIMEOUT 事件会导致系统复位 或者 TIMEOUT 中断。
看门狗的超时时间:
timeout [s] = ( CRV + 1 ) / 32768
看门狗喂狗的方式:
将特殊值 0x6E524635 写入所有使能的 重载寄存器 RR[n]
看门狗寄存器如下:

看门狗的使用方法(寄存器版):

/*** 看门狗中断*/
void WDT_IRQHandler(void)
{  if ((NRF_WDT->EVENTS_TIMEOUT!= 0) && ((NRF_WDT->INTENSET) != 0)) {//do something!!  //复位前就2个32.768khz时钟周期的时间执行这个操作,在此之后,将发生复位}
}/** 启动内部LFCLK晶振功能,和RTC一样*/void lfclk_config(void)
{NRF_CLOCK->LFCLKSRC             = (CLOCK_LFCLKSRC_SRC_Xtal << CLOCK_LFCLKSRC_SRC_Pos);NRF_CLOCK->EVENTS_LFCLKSTARTED  = 0;NRF_CLOCK->TASKS_LFCLKSTART     = 1;while (NRF_CLOCK->EVENTS_LFCLKSTARTED == 0) {}NRF_CLOCK->EVENTS_LFCLKSTARTED = 0;
}int main(void)
{/*时钟,外设,IO口按键,LED灯等的初始化*/...//*配置看门狗*////配置看门狗重载值,由timeout [s] = ( CRV + 1 ) / 32768计算得复位时间2sNRF_WDT->CRV=65535;//配置看门狗休眠下也运行NRF_WDT->CONFIG=0x01;//申请喂狗通道,也就是使用哪个RR,使用RR[0]NRF_WDT->RREN=0x01;   //启动WDTNRF_WDT->TASKS_START=1;//*配置看门狗中断*////使能看门狗定时器超时事件NRF_WDT->EVENTS_TIMEOUT=1; //使能看门狗中断NRF_WDT->INTENSET=1;//使能看门中断嵌套NVIC_EnableIRQ(WDT_IRQn);//...while (1){    //...if(nrf_gpio_pin_read(BUTTON_1) == 0)//使用按键喂狗{ //实现喂狗NRF_WDT->RR[0]=0x6E524635UL;}}
}

看门狗的使用方法(库函数版):

库函数使用相应的库文件得添加,头文件路径得添加

#include <stdbool.h>
#include <stdint.h>#include "nrf.h"
#include "bsp.h"
#include "app_timer.h"
#include "app_error.h"
#include "nrf_drv_wdt.h"
#include "nrf_drv_clock.h"
#include "nrf_delay.h"
#include "app_util_platform.h"//...
/*
#define nrf_drv_wdt_channel_id      nrfx_wdt_channel_idtypedef nrf_wdt_rr_register_t nrfx_wdt_channel_id;typedef enum
{NRF_WDT_RR0 = 0, /**< Reload request register 0. NRF_WDT_RR1,     /**< Reload request register 1. NRF_WDT_RR2,     /**< Reload request register 2.NRF_WDT_RR3,     /**< Reload request register 3. NRF_WDT_RR4,     /**< Reload request register 4. NRF_WDT_RR5,     /**< Reload request register 5.NRF_WDT_RR6,     /**< Reload request register 6. NRF_WDT_RR7      /**< Reload request register 7.
} nrf_wdt_rr_register_t;
*/
nrf_drv_wdt_channel_id m_channel_id;/*** 看门狗事件回调*/
void wdt_event_handler(void)
{//do something!!  //复位前就2个32.768khz时钟周期的时间执行这个操作,在此之后,将发生复位
}int main(void)
{uint32_t err_code = NRF_SUCCESS;//初始化低速时钟err_code = nrf_drv_clock_init();APP_ERROR_CHECK(err_code);nrf_drv_clock_lfclk_request(NULL);//配置按键,LED灯,根据自己的板子nrf_gpio_cfg_output(12);    nrf_gpio_cfg_input(BUTTON_1,NRF_GPIO_PIN_PULLUP);bsp_board_init(BSP_INIT_LEDS);/*#define NRF_DRV_WDT_DEAFULT_CONFIG  NRFX_WDT_DEAFULT_CONFIG#define NRFX_WDT_DEAFULT_CONFIG                                               \{                                                                         \.behaviour          = (nrf_wdt_behaviour_t)NRFX_WDT_CONFIG_BEHAVIOUR, \.reload_value       = NRFX_WDT_CONFIG_RELOAD_VALUE,                   \.interrupt_priority = NRFX_WDT_CONFIG_IRQ_PRIORITY,                   \}在上面的默认定义中的数值,可以自行修改*/nrf_drv_wdt_config_t config = NRF_DRV_WDT_DEAFULT_CONFIG;   err_code = nrf_drv_wdt_init(&config, wdt_event_handler);APP_ERROR_CHECK(err_code);/*看门狗喂狗通道使能,从0开始自动查找可食用的RR[]#define nrf_drv_wdt_channel_alloc   nrfx_wdt_channel_allocnrfx_err_t nrfx_wdt_channel_alloc(nrfx_wdt_channel_id * p_channel_id)*/err_code = nrf_drv_wdt_channel_alloc(&m_channel_id);APP_ERROR_CHECK(err_code);/*使能#define nrf_drv_wdt_enable          nrfx_wdt_enablevoid nrfx_wdt_enable(void){NRFX_ASSERT(m_alloc_index != 0);NRFX_ASSERT(m_state == NRFX_DRV_STATE_INITIALIZED);nrf_wdt_int_enable(NRF_WDT_INT_TIMEOUT_MASK);nrf_wdt_task_trigger(NRF_WDT_TASK_START);m_state = NRFX_DRV_STATE_POWERED_ON;NRFX_LOG_INFO("Enabled.");}*/nrf_drv_wdt_enable();//... do something or notwhile (1){//... do something or notif(nrf_gpio_pin_read(BUTTON_1) == 0){/*喂狗void nrfx_wdt_channel_feed(nrfx_wdt_channel_id channel_id){NRFX_ASSERT(m_state == NRFX_DRV_STATE_POWERED_ON);nrf_wdt_reload_request_set(channel_id);}*/nrfx_wdt_channel_feed(m_channel_id);}}
}

nRF52832学习记录(八、WDT看门狗 )相关推荐

  1. 【Linux】ARM篇七--WDT看门狗实验

    ARM篇七--WDT看门狗实验 一.前言 二.准备工作 三.看门狗简介 四.看门狗寄存器介绍 1.看门狗结构 2.看门狗寄存器 3.WTCON寄存器 4.WTCNT寄存器 五.看门狗代码编写 1.程序 ...

  2. proteus里面没有stm32怎么办_学习STM32日志——独立看门狗实验(20.06.23)

    继续更新学习STM32的历程,今天学习看门狗. 在单片机构成的微型计算机系统中,单片机的工作时常收到外界电磁场的干扰,导致程序跑飞,陷入死循环.为了解决这个问题,产生了一种用于监测单片机程序运行状态的 ...

  3. ARM-A9接口技术—WDT(看门狗)

    在A9芯片内部,SOC模型里面有一个看门狗控制器. (工作原理:处理器和看门狗都在SOC内部,但是处理器死机了,控制器还可以工作). 与gpio和uart不一样的是,这个控制器它没有输入输出,也就是说 ...

  4. FH8626v100之WDT(看门狗)

    富瀚的看门狗和正常MCU配置的有些许不同. 资料 由文档 RT-thread_SDK开发和使用指南.pdf 中可以看出 WDT 超时 counter 范围有 16 个固定的档位: 如上表所示,WDT ...

  5. UE4 学习记录八 给场景中添加背景音乐和动画音效,运动加速效果

    这只是用来记录我学习UE4过程的,可能帮不到你,先说声抱歉.为了防止误导他人,请勿转载,请勿转载,请勿转载. 本文的主题是给场景中添加背景音乐和动画的音效.总章目录(https://blog.csdn ...

  6. nRF52832学习记录(十二、SPI接口的应用 Micro SD卡读写测试)

    目录 1.nRF52xx SPI介绍 SPI接口基础介绍 SPI 寄存器 SPI 库函数介绍 SPI初始化函数 SPI数据传输函数 2.nRF52xx SPI 使用示例 w25qxx SPI Flas ...

  7. nRF52832学习记录(十一、TWI总线的应用 SHT21程序移植)

    目录 1.nRF52xx TWI介绍 TWI总线基础介绍 TWI总线寄存器 TWI 库函数介绍 TWI初始化函数 TWI使能函数 TWI 主机发送数据给从机 函数 TWI 主机从从机读取 函数 2.n ...

  8. nRF52832学习记录(十、PWM 脉冲调制)

    ..添加PWM Single模式回调示例 ..添加PWM Grouped模式示例 ..添加PWM WaveForm模式示例 ..添加PWM 综合示例 2021/9/30 目录 nRF52xx PWM基 ...

  9. nRF52832学习记录(二、外设之 串口)

    nRF52832的串口分为: UART 和 UARTE UART UART就是通常所指的串口,通用异步收发器,全双工通讯,其内部结构如下: UARTE UARTE是带有 EasyDMA 的UART,其 ...

最新文章

  1. LTE CRS 时频资源
  2. ERP实施实记(六)之生管课
  3. java 读取 excel poi_java poi怎么获取excel单元格的内容?
  4. (最新合集)计算机网络谢希仁第七版 第一章课后答案
  5. HDU 6706 huntian oy
  6. python PIL.Image使用
  7. 脚手架-- yarn link后,Error: Cannot find module 。。。
  8. 全球最抠门的商场,一年卖了1000亿
  9. 添加地图图例 Arcengine+C#
  10. 常用的渗透测试辅助工具
  11. 环网柜超高频局放监测及温升在线监测系统方案
  12. 机器学习数据预处理之字符串转数字
  13. MySQL5.5安装教程+SQLyog安装
  14. 利用json实现vivo x20手机评论的爬取
  15. 大数据高级开发工程师——Spark学习笔记(4)
  16. 量子侦探社之“寻猫记”
  17. 步进电机控制(Proteus仿真+代码
  18. C语言骚操作之没有加法运算符
  19. When OOP Becomes POO
  20. 在线直播源码中直播间内大转盘功能的实现

热门文章

  1. 深度 | 线下场景的客流数字化探索与应用
  2. 2D Toolkit官方教程翻译
  3. 专业程序员必知的技巧:敲打代码
  4. uniapp checkbox样式失效
  5. 一句话脚本系列之获取eth0网卡的IP地址(或MAC地址)
  6. 喜欢一站式服务?欢go成全你
  7. 香港大学数据科学(HKU Data Science) 笔试面试经验贴汇总
  8. 用Python制作大富翁游戏
  9. 专业MES执行系统软件开发商,精诚MES系统的优势
  10. word目录自动生成未定义标签问题解决