一、简介

看门狗定时器(WDT: Watchdog Timer)的作用是在发生软件故障时(如程序陷入死循环或者程序跑飞),强制复位单片机,让单片机重新运行程序。

看门狗定时器本质上是一个计数器,只不过这个计数器的作用是固定的,一旦计数值递增到设定的值(向上计数)或者计数值递减到0(向下计数),即“超时”时,看门狗定时器产生复位信号,复位系统。

程序正常运行时,会在看门狗定时器“超时”前清零计数值(向上计数)或重装计数值(向下计数),俗称“喂狗”,这样就保证了看门狗定时器永不会“超时”,而一旦程序运行出现故障,无法正常“喂狗”时,看门狗定时器最终会“超时”复位系统。

看门狗定时器超时周期取决于 CRV 寄存器中写入的重装计数值和看门狗定时器的时钟频率,计算公式如下:

二、移植文件

链接:https://pan.baidu.com/s/1Bt4K6EQRrtO8StMNkYsclw 提取码:mqo6
board_watchdog.cboard_watchdog.h 加入工程的Application文件夹下

2.1 board_watchdog.c

/********************************************************************** INCLUDES*/
#include "nrf_drv_wdt.h"static void watchdogHandleEvent(void);/********************************************************************** LOCAL VARIABLES*/
static nrf_drv_wdt_channel_id s_wdtChannelId;                       // 看门狗通道ID/********************************************************************** PUBLIC FUNCTIONS*/
/**@brief 看门狗驱动初始化@param 无@return 无
*/
void Watchdog_Init(void)
{ret_code_t err_code;nrf_drv_wdt_config_t config = NRF_DRV_WDT_DEAFULT_CONFIG;       // 配置看门狗err_code = nrf_drv_wdt_init(&config, watchdogHandleEvent);      // 初始化看门狗和看门狗中断APP_ERROR_CHECK(err_code);err_code = nrf_drv_wdt_channel_alloc(&s_wdtChannelId);          // 分配看门狗通道APP_ERROR_CHECK(err_code);nrf_drv_wdt_enable();                                           // 看门狗使能
}
/**@brief 清除看门狗计数,“喂狗”@param 无@return 无
*/
void Watchdog_Clear(void)
{nrf_drv_wdt_channel_feed(s_wdtChannelId);
}/********************************************************************** LOCAL FUNCTIONS*/
/**@brief 看门狗中断事件处理函数@param 无@return 无
*/
static void watchdogHandleEvent(void)
{// NOTE: The max amount of time we can spend in WDT interrupt is two cycles of 32768[Hz] clock - after that, reset occurs
}/****************************************************END OF FILE****************************************************/

2.2 board_watchdog.h

#ifndef _BOARD_WATCHDOG_H_
#define _BOARD_WATCHDOG_H_/********************************************************************** INCLUDES*//********************************************************************** API FUNCTIONS*/
void Watchdog_Init(void);
void Watchdog_Clear(void);#endif /* _BOARD_WATCHDOG_H_ */

三、API调用

需包含头文件 board_watchdog.h

Watchdog_Init

功能 初始化软件看门狗
函数定义 void Watchdog_Init(void)
参数
返回

Watchdog_Clear

功能 清除看门狗计数,“喂狗”
函数定义 void Watchdog_clear(Watchdog_Handle handle)
参数
返回

四、SDK配置

点击 sdk_config.h 文件

选择 Configuration Wizard

nRF_Drivers 中勾选 WDT 相关选项

添加库函数文件

四、使用例子

1)添加头文件

#include "board_watchdog.h"

2)添加初始化代码

Watchdog_Init();

3)清除看门狗计数

Watchdog_Clear();        // 喂狗

4)看门狗中断处理
需要注意的是事件回调函数中不能加入过多的功能,因为 WDT 中断中可花费的最长时间只有 2 个 32.768KHz 时钟周期,之后系统就复位了。

static void watchdogHandleEvent(void)
{// NOTE: The max amount of time we can spend in WDT interrupt is two cycles of 32768[Hz] clock - after that, reset occurs
}

5)看门狗超时时间设置


• 由 Leung 写于 2020 年 10 月 10 日

• 参考:青风电子社区

NRF52832学习笔记(31)——Watchdog看门狗使用相关推荐

  1. nrf52832 学习笔记(三)蓝牙从机广播

    nrf52832 学习笔记(三)蓝牙从机广播 蓝牙从机要想被主机连接,首先需要发送广播信息,周围主机通过扫描广播信号,根据从机的广播信息,判断是否连接. 蓝牙协议栈初始化 不管是主机还是从机,要想使用 ...

  2. nrf52832 学习笔记(七)蓝牙协议层级理解

    nrf52832 学习笔记(七)蓝牙协议层级理解 本文主要由一下几篇文档摘录汇总而成 ,如有错误欢迎斧正 da14531 蓝牙协议文档 深入浅出低功耗蓝牙(BLE)协议栈 低功耗蓝牙ATT/GATT/ ...

  3. Android system server之WatchDog看门狗分析

    android -- WatchDog看门狗分析 在由单片机构成的微型计算机系统中,由于单片机的工作常常会受到来自外界电磁场的干扰,造成程序的跑飞,而陷入死循环,程序的正常运行被打断,由单片机控制的系 ...

  4. nrf52832 学习笔记(五)蓝牙主从机连接和连接参数更新

    nrf52832 学习笔记(五)蓝牙主从机连接和连接参数更新 主机连接 nrf52832 SDK中主机连接从机需要使用 sd_ble_gap_connect(ble_gap_addr_t const ...

  5. nrf52832 学习笔记(六)配对和绑定

    nrf52832 学习笔记(六)配对和绑定 配对绑定推荐博客低功耗蓝牙配对绑定解读和实践 蓝牙在配对之前都是明文通信的,也就是说主从机之间传输的数据包可以被第三方抓取分析逆向,而且如果没有配对,谁都可 ...

  6. 什么是看门狗(watchdog)?看门狗有什么作用?

    什么是看门狗(watchdog) 看门狗,又叫 watchdog timer,是一个定时器电路, 一般有一个输入,叫喂狗,一个输出到MCU的RST端,MCU正常工作的时候,每隔一端时间输出一个信号到喂 ...

  7. NRF52832学习笔记(40)——RFID RC522使用

    一.简介 MF RC522 是应用于 13.56MHz 非接触式通信中高集成度读写卡系列芯片中的一员.是 NXP 公司针对"三表"应用推出的一款低电压.低成本.体积小的非接触式读写 ...

  8. NRF52832学习笔记(38)——修改发射功率

    一.背景 蓝牙接收信号强度 RSSI 的直接影响因素就是蓝牙信号的发射功率.发射功率就是你所使用的设备(开发板.手机)所发射出来给主机或从机设备的信号强度.同时在实际应用当中,时常也需要修改蓝牙的发射 ...

  9. nrf52832 学习笔记(一)开发资料汇总

    nrf52832 学习笔记(一)开发资料汇总 协议栈和SDK下载地址 nordic官方的sdk分为ncs(nRF Connect SDK)和sdk17(nRF5 SDK)两种,区别是: sdk17不会 ...

  10. nrf52832 学习笔记(二)SDK框架分析

    nrf52832 学习笔记(二)SDK框架分析 个人对SDK框架的一些理解,如有错误欢迎斧正. flash 分区 在不包含DFU的情况下,nrf52832 flash划分为: MBR 0x000000 ...

最新文章

  1. Dateset学习笔记
  2. 近世代数--群同构--第一同构定理
  3. 无源码动态调试APK
  4. python tkinter画布中使用turtle_[Tkinter canvas of Python]海龟图书馆,python,之,tkinter,画布,Turtle,库...
  5. 开发者都应该使用的10个C++11特性
  6. Linux 常用命令随笔(二)
  7. python 闭包和装饰器详解_实力讲解,一文读懂Python闭包与装饰器!
  8. java源代码连接jsp,java网络五子棋的源代码-JSP教程,Java技巧及代码
  9. linux ubuntu mysql 安装_1.MySQL的安装(linux Ubuntu环境下)
  10. 在SpringBoot中优雅的实现定时任务
  11. vue 左侧菜单隐藏_vue.js 左侧二级菜单显示与隐藏切换的实例代码?
  12. 《Velocity 模板使用指南》中文版[转]
  13. [Android]Hello, Android!
  14. 总结篇——mysql中使用sql语句操作表字段
  15. shared_ptr的简单实现
  16. 数据库学习整理之常见运算符
  17. 【寄明月】MMD动作镜头下载-附赠扇子和使用方法
  18. java 表格tr td_table、tr、td表格的行、单元格等属性说明
  19. 爬虫小项目之爬取赛尔号
  20. 列表xcode项目下所有的lnfo.plist

热门文章

  1. Nodejs数据流(Stream)手册
  2. 可视化分析中国500强排行榜数据后,我发现了...
  3. NGS各种组学建库原理(图解)
  4. android全屏视频播放,JieCaoVideoPlayer真正实现Android的全屏视频播放
  5. 广州.NET微软技术俱乐部微信群有用信息集锦(10) - 大量json数据压缩方案
  6. JavaScript惰性载入函数
  7. windows socket编程五种模型
  8. 对指针变量取地址意义
  9. 字体大宝库:20款超细英文字体免费下载
  10. Face Paper: 目标检测RSSD论文详解