nRF52832学习记录(八、WDT看门狗 )
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看门狗 )相关推荐
- 【Linux】ARM篇七--WDT看门狗实验
ARM篇七--WDT看门狗实验 一.前言 二.准备工作 三.看门狗简介 四.看门狗寄存器介绍 1.看门狗结构 2.看门狗寄存器 3.WTCON寄存器 4.WTCNT寄存器 五.看门狗代码编写 1.程序 ...
- proteus里面没有stm32怎么办_学习STM32日志——独立看门狗实验(20.06.23)
继续更新学习STM32的历程,今天学习看门狗. 在单片机构成的微型计算机系统中,单片机的工作时常收到外界电磁场的干扰,导致程序跑飞,陷入死循环.为了解决这个问题,产生了一种用于监测单片机程序运行状态的 ...
- ARM-A9接口技术—WDT(看门狗)
在A9芯片内部,SOC模型里面有一个看门狗控制器. (工作原理:处理器和看门狗都在SOC内部,但是处理器死机了,控制器还可以工作). 与gpio和uart不一样的是,这个控制器它没有输入输出,也就是说 ...
- FH8626v100之WDT(看门狗)
富瀚的看门狗和正常MCU配置的有些许不同. 资料 由文档 RT-thread_SDK开发和使用指南.pdf 中可以看出 WDT 超时 counter 范围有 16 个固定的档位: 如上表所示,WDT ...
- UE4 学习记录八 给场景中添加背景音乐和动画音效,运动加速效果
这只是用来记录我学习UE4过程的,可能帮不到你,先说声抱歉.为了防止误导他人,请勿转载,请勿转载,请勿转载. 本文的主题是给场景中添加背景音乐和动画的音效.总章目录(https://blog.csdn ...
- nRF52832学习记录(十二、SPI接口的应用 Micro SD卡读写测试)
目录 1.nRF52xx SPI介绍 SPI接口基础介绍 SPI 寄存器 SPI 库函数介绍 SPI初始化函数 SPI数据传输函数 2.nRF52xx SPI 使用示例 w25qxx SPI Flas ...
- nRF52832学习记录(十一、TWI总线的应用 SHT21程序移植)
目录 1.nRF52xx TWI介绍 TWI总线基础介绍 TWI总线寄存器 TWI 库函数介绍 TWI初始化函数 TWI使能函数 TWI 主机发送数据给从机 函数 TWI 主机从从机读取 函数 2.n ...
- nRF52832学习记录(十、PWM 脉冲调制)
..添加PWM Single模式回调示例 ..添加PWM Grouped模式示例 ..添加PWM WaveForm模式示例 ..添加PWM 综合示例 2021/9/30 目录 nRF52xx PWM基 ...
- nRF52832学习记录(二、外设之 串口)
nRF52832的串口分为: UART 和 UARTE UART UART就是通常所指的串口,通用异步收发器,全双工通讯,其内部结构如下: UARTE UARTE是带有 EasyDMA 的UART,其 ...
最新文章
- LTE CRS 时频资源
- ERP实施实记(六)之生管课
- java 读取 excel poi_java poi怎么获取excel单元格的内容?
- (最新合集)计算机网络谢希仁第七版 第一章课后答案
- HDU 6706 huntian oy
- python PIL.Image使用
- 脚手架-- yarn link后,Error: Cannot find module 。。。
- 全球最抠门的商场,一年卖了1000亿
- 添加地图图例 Arcengine+C#
- 常用的渗透测试辅助工具
- 环网柜超高频局放监测及温升在线监测系统方案
- 机器学习数据预处理之字符串转数字
- MySQL5.5安装教程+SQLyog安装
- 利用json实现vivo x20手机评论的爬取
- 大数据高级开发工程师——Spark学习笔记(4)
- 量子侦探社之“寻猫记”
- 步进电机控制(Proteus仿真+代码
- C语言骚操作之没有加法运算符
- When OOP Becomes POO
- 在线直播源码中直播间内大转盘功能的实现