NRF52832学习笔记(31)——Watchdog看门狗使用
一、简介
看门狗定时器(WDT: Watchdog Timer)的作用是在发生软件故障时(如程序陷入死循环或者程序跑飞),强制复位单片机,让单片机重新运行程序。
看门狗定时器本质上是一个计数器,只不过这个计数器的作用是固定的,一旦计数值递增到设定的值(向上计数)或者计数值递减到0(向下计数),即“超时”时,看门狗定时器产生复位信号,复位系统。
程序正常运行时,会在看门狗定时器“超时”前清零计数值(向上计数)或重装计数值(向下计数),俗称“喂狗”,这样就保证了看门狗定时器永不会“超时”,而一旦程序运行出现故障,无法正常“喂狗”时,看门狗定时器最终会“超时”复位系统。
看门狗定时器超时周期取决于 CRV 寄存器中写入的重装计数值和看门狗定时器的时钟频率,计算公式如下:
二、移植文件
链接:https://pan.baidu.com/s/1Bt4K6EQRrtO8StMNkYsclw 提取码:mqo6
将 board_watchdog.c 、 board_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看门狗使用相关推荐
- nrf52832 学习笔记(三)蓝牙从机广播
nrf52832 学习笔记(三)蓝牙从机广播 蓝牙从机要想被主机连接,首先需要发送广播信息,周围主机通过扫描广播信号,根据从机的广播信息,判断是否连接. 蓝牙协议栈初始化 不管是主机还是从机,要想使用 ...
- nrf52832 学习笔记(七)蓝牙协议层级理解
nrf52832 学习笔记(七)蓝牙协议层级理解 本文主要由一下几篇文档摘录汇总而成 ,如有错误欢迎斧正 da14531 蓝牙协议文档 深入浅出低功耗蓝牙(BLE)协议栈 低功耗蓝牙ATT/GATT/ ...
- Android system server之WatchDog看门狗分析
android -- WatchDog看门狗分析 在由单片机构成的微型计算机系统中,由于单片机的工作常常会受到来自外界电磁场的干扰,造成程序的跑飞,而陷入死循环,程序的正常运行被打断,由单片机控制的系 ...
- nrf52832 学习笔记(五)蓝牙主从机连接和连接参数更新
nrf52832 学习笔记(五)蓝牙主从机连接和连接参数更新 主机连接 nrf52832 SDK中主机连接从机需要使用 sd_ble_gap_connect(ble_gap_addr_t const ...
- nrf52832 学习笔记(六)配对和绑定
nrf52832 学习笔记(六)配对和绑定 配对绑定推荐博客低功耗蓝牙配对绑定解读和实践 蓝牙在配对之前都是明文通信的,也就是说主从机之间传输的数据包可以被第三方抓取分析逆向,而且如果没有配对,谁都可 ...
- 什么是看门狗(watchdog)?看门狗有什么作用?
什么是看门狗(watchdog) 看门狗,又叫 watchdog timer,是一个定时器电路, 一般有一个输入,叫喂狗,一个输出到MCU的RST端,MCU正常工作的时候,每隔一端时间输出一个信号到喂 ...
- NRF52832学习笔记(40)——RFID RC522使用
一.简介 MF RC522 是应用于 13.56MHz 非接触式通信中高集成度读写卡系列芯片中的一员.是 NXP 公司针对"三表"应用推出的一款低电压.低成本.体积小的非接触式读写 ...
- NRF52832学习笔记(38)——修改发射功率
一.背景 蓝牙接收信号强度 RSSI 的直接影响因素就是蓝牙信号的发射功率.发射功率就是你所使用的设备(开发板.手机)所发射出来给主机或从机设备的信号强度.同时在实际应用当中,时常也需要修改蓝牙的发射 ...
- nrf52832 学习笔记(一)开发资料汇总
nrf52832 学习笔记(一)开发资料汇总 协议栈和SDK下载地址 nordic官方的sdk分为ncs(nRF Connect SDK)和sdk17(nRF5 SDK)两种,区别是: sdk17不会 ...
- nrf52832 学习笔记(二)SDK框架分析
nrf52832 学习笔记(二)SDK框架分析 个人对SDK框架的一些理解,如有错误欢迎斧正. flash 分区 在不包含DFU的情况下,nrf52832 flash划分为: MBR 0x000000 ...
最新文章
- Dateset学习笔记
- 近世代数--群同构--第一同构定理
- 无源码动态调试APK
- python tkinter画布中使用turtle_[Tkinter canvas of Python]海龟图书馆,python,之,tkinter,画布,Turtle,库...
- 开发者都应该使用的10个C++11特性
- Linux 常用命令随笔(二)
- python 闭包和装饰器详解_实力讲解,一文读懂Python闭包与装饰器!
- java源代码连接jsp,java网络五子棋的源代码-JSP教程,Java技巧及代码
- linux ubuntu mysql 安装_1.MySQL的安装(linux Ubuntu环境下)
- 在SpringBoot中优雅的实现定时任务
- vue 左侧菜单隐藏_vue.js 左侧二级菜单显示与隐藏切换的实例代码?
- 《Velocity 模板使用指南》中文版[转]
- [Android]Hello, Android!
- 总结篇——mysql中使用sql语句操作表字段
- shared_ptr的简单实现
- 数据库学习整理之常见运算符
- 【寄明月】MMD动作镜头下载-附赠扇子和使用方法
- java 表格tr td_table、tr、td表格的行、单元格等属性说明
- 爬虫小项目之爬取赛尔号
- 列表xcode项目下所有的lnfo.plist