看门狗程序
- 格式:doc
- 大小:31.00 KB
- 文档页数:4
如何设计STM32单片机独立看门狗程序?[导读]今天要学习的是独立看门狗,看门狗电路的应用,使单片机可以在无人状态下实现连续工作,其工作原理是:看门狗芯片和单片机的一个I/O引脚相连,该I/O 引脚通过程序控制它定时地往看门狗的这个引脚上送入高电平(或低电平),这一程序语句是分散地放在单片机其他控制语句中间的,一旦单片机由于干扰造成程序跑飞后而陷入某一程序段进入死循环状态时,写看门狗引脚的程序便不能被执行,这个时候,看门狗电路就会由于得不到单片机送来的信号,便在它和单片机复位引脚相连的引脚上送出一个复位信号,使单片机发生复位。
即程序从程序存储器的起始位置开始执行,这样便实现了单片机的自动复位。
今天要学习的是独立看门狗,看门狗电路的应用,使单片机可以在无人状态下实现连续工作,其工作原理是:看门狗芯片和单片机的一个I/O引脚相连,该I/O引脚通过程序控制它定时地往看门狗的这个引脚上送入高电平(或低电平),这一程序语句是分散地放在单片机其他控制语句中间的,一旦单片机由于干扰造成程序跑飞后而陷入某一程序段进入死循环状态时,写看门狗引脚的程序便不能被执行,这个时候,看门狗电路就会由于得不到单片机送来的信号,便在它和单片机复位引脚相连的引脚上送出一个复位信号,使单片机发生复位。
即程序从程序存储器的起始位置开始执行,这样便实现了单片机的自动复位。
1.1独立看门狗简介看门狗定时器 (WDT,Watch Dog Timer)是单片机的组成部分,它实际上是一个计数器,一般给看门狗一个数值,程序开始运行后看门狗开始倒计时。
如果程序运行正常,过一段时间CPU应发出指令让看门狗复位,重新开始计数,也就是所谓的“喂狗”。
如果看门狗减到0就认为程序没有正常工作,强制整个系统复位。
独立看门狗由专用低速时钟(LSI)驱动,计时主时钟发生故障它也仍然有效。
看门狗主要是用于在发生系统软件故障时,将系统复位。
也可以用于将系统从休眠或空闲模式唤醒。
看门狗定时器的使用流程简介看门狗定时器是一种用于监控系统运行状态的硬件设备。
当系统出现故障或超时的情况下,看门狗定时器会自动重启系统,以确保系统的稳定运行。
本文将介绍看门狗定时器的使用流程,包括初始化、配置、启动和监控等步骤。
初始化初始化是使用看门狗定时器的第一步。
在使用之前,需要确保系统已经正确连接了看门狗定时器,并且加载了相应的驱动程序。
步骤1.打开终端或命令行界面。
2.使用以下命令初始化看门狗定时器:$ watchdog_init3.检查初始化结果,确保看门狗定时器成功初始化。
配置配置是使用看门狗定时器的关键步骤。
通过配置,可以设置看门狗定时器的超时时间和动作。
步骤1.打开终端或命令行界面。
2.使用以下命令配置看门狗定时器的超时时间:$ watchdog_set_timeout 5这里将超时时间设置为5秒,你可以根据需要进行调整。
3. 使用以下命令配置看门狗定时器的重启动作:$ watchdog_set_action restart这里将重启动作设置为自动重启。
启动启动是使用看门狗定时器的关键步骤。
通过启动,可以使看门狗定时器开始监测系统运行状态。
步骤1.打开终端或命令行界面。
2.使用以下命令启动看门狗定时器:$ watchdog_start3.检查启动结果,确保看门狗定时器成功启动。
监控监控是看门狗定时器的主要功能。
通过监控,可以实时检测系统的运行状态,并在系统超时或故障时进行相应的动作。
步骤1.让系统正常运行。
2.看门狗定时器会定时检测系统的运行状态。
3.如果系统在超时时间内未接收到看门狗定时器的喂狗信号,则看门狗定时器会触发动作,例如自动重启系统。
总结通过以上的流程,我们可以使用看门狗定时器来监控系统的运行状态。
首先,我们需要初始化看门狗定时器,并配置超时时间和重启动作。
然后,启动看门狗定时器,并让其监控系统的运行状态。
在系统发生故障或超时的情况下,看门狗定时器会自动触发相应的动作,以确保系统的稳定运行。
STC89 系列单片机看门狗的使用及应用程序
看门狗概念及其应用在由单片机构成的系统中,由于单片机的工作有可能会受到来自外界电磁场的干扰,造成程序的跑飞,从而陷入死循环,程序的正常运行被打断,由单片机控制的系统便无法继续工作,这样会造成整个系统陷入停滞状态,发生不可预料的后果,所以出于对单片机运行状态进行实时监测的考虑,便产生了一种专门用于监测单片机程序运行状态的芯片,俗称看门狗(watch dog)。
加入看门狗电路的目的是使单片机可以在无人状态下实现连续工作,其工作过程如下:看门狗芯片和单片机的一个I/O 引脚相连,该I/O 引脚通过单
片机的程序控制,使它定时地往看门狗芯片的这个引脚上送入高电平(或低电平),这一程序语句是分散地放在单片机其他控制语句中间的,一旦单片机由于干扰造成程序跑飞后而陷入某一程序段进入死循环状态时,给看门狗引脚送电平的程序便不能被执行到,这时,看门狗电路就会由于得不到单片机送来的信号,便将它和单片机复位引脚相连的引脚上送出一个复位信号,使单片机发生复位,从而单片机将从程序存储器的起始位置重新开始执行程序,这样便实现了单片机的自动复位。
通常看门狗电路需要一个专门的看门狗芯片连接单片机来实现,这在我们的单片机教程网51hei 以前做过相关的电路介绍。
不过这样会给电路设计带
来复杂,STC 单片机内部自带有看门狗,通过对相应特殊功能寄存器的设置
就可实现看门狗的应用,STC89 系列单片机内部有一个专门的看门狗定时器
寄存器,Watch Dog Timer 寄存器,其相应功能见下个知识点。
《看门狗2》全主⽀线任务及收集流程图⽂攻略 《看门狗2》继承了前作的优点,同时玩家可⾃由的探索世界,游戏元素更加丰富,但其难度也随之增加,其按键操作、技能树选择、主线⽀线任务、物品收集都是关键点,⼤家初⼊游戏可能会遇到卡关的情况,或者觉得难以上⼿,今天⼩编带来“昨天”分享的《看门狗2》图⽂攻略,包含全任务及物品收集,助⼤家顺利通关。
操作按键指令按键开启地图触摸板(轻按)多媒体播放器触摸板(按住)接受/关闭/追踪触摸板(视情况按住)瞄准L2(按住)情景快速骇⼊L1(轻按)透析⽬标L1(按住)物品栏⽅向上键(按住)取出/收回武器⽅向上键(轻按)部署跳跃者⽅向左键(轻按)切换跳跃着⽅向左键(按住)表情动作栏⽅向下键(按住)使⽤表情动作⽅向下键(轻按)部署四轴飞⾏器⽅向右键(轻按)切换到四轴飞⾏器⽅向右键(按住)切换冲刺状态L3切换到瞄准镜按下L3(瞄准时)开启智能⼿机O P T I O N键(轻按)攀爬/跳跃R2射击R2(瞄准时)使⽤投掷物或是⼤规模骇⼊R1(轻按)瞄准投掷物R1(轻按)互动/进⼊车辆△近⾝搏⽃○找掩护×武器装弹□(轻按)控制遥控装置/监视器□(按住)切换到⽹络⼊侵按下R3多媒体操作R3 主⾓背景介绍 本作的背景设定于美国旧⾦⼭的开放世界,并在旧⾦⼭分为六个不同的区域,市中⼼区、市政区、海岸、奥克兰、马林和硅⾕,每⼀个区域都有着⾃⼰独特的美学设计。
同时,旧⾦⼭也继芝加哥之后,成为下⼀个安装c t O S(C e n t r a lO p e r a t i n g S y s t e m,中央操作系统)监控系统的城市,它连着着居民的⼀切。
游戏主⾓是⼀个名为马可仕·哈洛威(M a r c u s H o l l o w a y)的⿊客。
在孩童时期,升级后的c t O S系统c t O S2.0连接了他的个⼈信息,向他错误地指控了⼀项⾃⼰未曾犯下的罪⾏。
他意识到该系统会给旧⾦⼭的⽆辜平民带来危害,于是决定加⼊⿊客组织D e d S e c,打败c t O S2.0和它的创造者布鲁姆(B l u m e)。
看门狗的工作原理和应用简介看门狗是一种常用的硬件监控机制,主要用于确保系统或设备的稳定运行。
本文将介绍看门狗的工作原理和应用。
工作原理看门狗的工作原理基于定时器和复位机制,其具体流程如下:1.启动定时器:看门狗通过启动一个定时器来计时。
2.监控程序:看门狗监控系统或设备中的关键程序,确保其正常运行。
3.定时器复位:监控程序定时重置定时器的计时。
4.定时器溢出:如果定时器计时超过了预定的时间,即定时器溢出。
5.复位信号:定时器溢出后,看门狗发送一个复位信号给系统或设备。
6.设备重启:系统或设备在接收到复位信号后会进行重启操作,重新启动。
应用场景看门狗的应用非常广泛,在许多领域中发挥着重要的作用。
以下列举了几个常见的应用场景:•嵌入式系统:嵌入式系统通常是长时间运行的,看门狗可以确保系统在长时间运行后仍然稳定,避免死机或其他故障。
•服务器:服务器运行的应用程序往往非常复杂,存在各种潜在的问题,看门狗可以监控服务器的关键进程,及时发现异常情况并进行复位。
•工业自动化:在工业自动化过程中,看门狗可以监控各种设备和传感器,实时检测故障,并进行相应的处理,确保生产过程的稳定进行。
•汽车电子:随着汽车电子的普及和发展,看门狗在汽车电子中也有重要的应用,可以监控汽车各个系统的运行情况,确保汽车的安全和稳定。
•无人机:无人机是一种高度自动化的飞行器,看门狗可以监控无人机的各个部件,检测故障并采取相应的措施,确保飞行安全。
优点看门狗的应用有许多优点,包括:•提高系统的稳定性:看门狗可以监控系统的运行状态,及时发现并处理异常情况,保证系统的稳定性和可靠性。
•自动化处理:看门狗可以自动检测和处理故障,减少人工干预的需求,提高系统的自动化程度。
•快速恢复:一旦发生故障,看门狗可以快速进行复位操作,使系统尽快恢复正常运行。
•灵活性:看门狗可以根据实际需求进行定制,灵活适应不同应用场景。
注意事项在使用看门狗的过程中,需要注意以下几点:•设定合适的定时器时间:定时器时间的设置需要根据具体的应用场景来确定,过短的时间可能会导致频繁的复位,过长的时间则可能会延误故障的处理。
51单片机c语言看门狗程序怎么写看门狗在51单片机电路里的作用是防止程序“跑飞”、“死机”后,系统不动作,而采取复位的办法“唤醒”系统。
89S51、89S52系列单片机自带有看门狗功能,片内数据区A6H寄存器具有看门狗功能,使用很简单:#include<reg51.h>...sfr WDTRST = 0xA6;...void main(){WDTRST=0x1E;;//初始化看门狗WDTRST=0xE1;//初始化看门狗for(;;){WDTRST=0x1E;;//喂狗指令WDTRST=0xE1;//喂狗指令}}可见,你只要在程序的大循环体内加一条喂狗指令就行。
但这种看门狗功能有限,不是很可靠的,它依靠晶振工作,一旦晶振不起振,就无效了。
实践中多采用外部看门狗的方法,可以选用的芯片很多:MAX708、MAX813、X25045.....具体编程就要看芯片的参考资料了。
例如:X25045是SPI总线的看门狗芯片,复位端和单片机复位端连接,SPI数据输入你可以选择合适的IO接口。
WREN 0x06 设置写允许位WRDI 0x04 复位写允许位RDSR 0x05 读状态寄存器WRSR 0x01 写状态寄存器READ 0x03/0x0b 读操作时内部EEPROM页地址WRITE 0x02/0x0a 写操作时内部EEPROM页地址#include <reg51.h>sbit CS= P2^7;sbit SO= P2^6;sbit SCK= P2^5;sbit SI= P2^4;#define WREN 0x06 //#define WRDI 0x04 //#define RDSR 0x05 //#define WRSR 0x01 //#define READ0 0x03 //#define READ1 0x0b //#define WRITE0 0x02 //#define WRITE1 0x0a //#define uchar unsigned charuchar ReadByte() //read a byte from device{bit bData;uchar ucLoop;uchar ucData;for(ucLoop=0;ucLoop<8;ucLoop++){SCK=1;SCK=0;bData=SO;ucData<<=1;if(bData){ ucData|=0x01; }}return ucData;}void WriteByte(uchar ucData)//write a byte to device {uchar ucLoop;for(ucLoop=0;ucLoop<8;ucLoop++){if((ucData&0x80)==0) //the MSB send first{SI=0;}else{SI=1;}SCK=0;SCK=1;ucData<<=1;}}uchar ReadReg() //read register{uchar ucData;CS=0;WriteByte(RDSR);CS=1;return ucData;}uchar WriteReg(uchar ucData) //write register{uchar ucTemp;ucTemp=ReadReg();if((ucTemp&0x01)==1) //the device is busyreturn 0;CS=0;WriteByte(WREN);//when write the WREN, the cs must have a high levelCS=1;CS=0;WriteByte(WRSR);WriteByte(ucData);CS=1;return 1;}void WriteEpm(uchar cData,uchar cAddress,bit bRegion)/* 写入一个字节,cData为写入的数,cAddress为写入地址,bRegion为页*/ {while((ReadReg()&0x01)==1); //the device is busyCS=0;WriteByte(WREN); //when write the wren , the cs must have a high levelCS=1;CS=0;if(bRegion==0){ WriteByte(WRITE0);} //write the page addrelse{WriteByte(WRITE1);}WriteByte(cAddress);WriteByte(cData);SCK=0; //CS=1;}uchar ReadEpm(uchar cAddress,bit bRegion)/* 读入一个字节,cAddress为读入地址,bRegion为页*/{uchar cData;while((ReadReg()&0x01)==1);//the device is busyCS=0;if(bRegion==0)else{WriteByte(READ1);}WriteByte(cAddress);cData=ReadByte();CS=1;return cData;}main(){WriteReg(0x00);//set the watchdog time as 1.4sCS=1;CS=0; //reset the watchdog}回复:xuzhimin9514所有的89S系列都带狗,所有的80C系列都不带狗。
我的独立看门狗总结
一、独立看门狗IWDG概述
1.)看门狗设备(独立看门狗和窗口看门狗)可用来检测和解决由软件错误
引起的故障;当计数器达到给定的超时值时,触发一个中断或产生系统复位。
2.)功能图:(由于本人无法贴图,请见参考手册,125页)
3.)独立看门狗(IWDG)由专用的40kHz 的低速时钟为驱动;因此,即使主时钟发生故障它也仍然有效。
4.)其中IWDG_PR为预分频器寄存器,IWDG_RLR为重新加载计数器寄存器,IWDG_KR为控制器存器。
IWDG_SR为状态寄存器。
(见图)
5.)IWDG_KR写入OXCCCC,启动独立看门狗功能,计数器值开始递减,减到0时,看门狗复位。
IWDG_KR写入0XAAAA,计数器值被重新加载,即避免看门狗复位。
IWDG_KR写入0X5555,则允许写IWDG_PR 和IWDG_RLR寄存器写操作。
写入其它值,IWDG_PR 和IWDG_RLR被保护,数据将无法写入这两个寄存器。
IWDG_SR状态寄存器指示预分频值和递减
计数器是否正在被更新。
IWDG_RLR寄存器范围为0-0xfff.
6.)如果用户在选择字节中启用了硬件看门狗功能,在系统上电复位后,。
TMS320F2812 Watchdog范例程序FILE: Example_28xWatchdog.c//// TITLE: DSP28 Watchdog interrupt test program.//// ASSUMPTIONS://// This program requires the DSP28 header files. To compile the// program as is, it should reside in the DSP28/examples/watchdog// sub-directory.//// As supplied, this project is configured for "boot to H0" operation.//// DESCRIPTION:// This program exercises the watchdog on the F2812/F2810 parts.//// First the watchdog is connected to the WAKEINT interrupt of the// PIE block. The code is then put into an infinite loop.//// The user can select to feed the watchdog key register or not// by commenting one line of code in the infinite loop.//// If the watchdog key register is fed by the KickDog function// then the WAKEINT interrupt is not taken. If the key register// is not fed by the KickDog function then WAKEINT will be taken.//// Watch Variables:// LoopCount for the number of times through the infinite loop// WakeCount for the number of times through WAKEINT////###########################################################################//// Ver | dd mmm yyyy | Who | Description of changes// =====|=============|======|=============================================== // 0.57| 29 May 2002 | L.H. | Initial Release//###########################################################################// Step 0. Include required header files// DSP28_Device.h: device specific definitions #include statements for// all of the peripheral .h definition files.// DSP28_Example.h is specific for the given example.#include "DSP28_Device.h"// Prototype statements for functions found within this file.interrupt void wakeint_isr(void);// Global variable for this exampleUint32 WakeCount;Uint32 LoopCount;void main(void){// Step 1. Initialize System Control registers, PLL, WatchDog, Clocks to default state: // For this example, this function is found in Example_WatchdogSysCtrl.cInitSysCtrl();// Step 2. Select GPIO for the device or for the specific application: // This function is found in the DSP28_Gpio.c file.// InitGpio(); // Not required for this example// Step 3. Initialize PIE vector table:// The PIE vector table is initialized with pointers to shell Interrupt // Service Routines (ISR). The shell routines are found in DSP28_DefaultIsr.c.// Insert user specific ISR code in the appropriate shell ISR routine in // the DSP28_DefaultIsr.c file.// Disable and clear all CPU interrupts:DINT;IER = 0x0000;IFR = 0x0000;// Initialize Pie Control Registers To Default State:// This function is found in the DSP28_PieCtrl.c file.InitPieCtrl();// Initialize the PIE Vector Table To a Known State:// This function is found in DSP28_PieVect.c.// This function populates the PIE vector table with pointers// to the shell ISR functions found in DSP28_DefaultIsr.c.InitPieVectTable();// Step 4. Initialize all the Device Peripherals to a known state:// This function is found in DSP28_InitPeripherals.c// InitPeripherals(); // Not required for this example.// Step 5. User specific functions, Reassign vectors (optional), Enable Interrupts:// Reassign the PIE vector for WAKEINT to point to a different ISR then// the shell routine found in DSP28_DefaultIsr.c.// This is done if the user does not want to use the shell ISR routine// but instead wants to use their own ISR. This step is optional:EALLOW; // This is needed to write to EALLOW protected registersPieVectTable.WAKEINT = &wakeint_isr;EDIS; // This is needed to disable write to EALLOW protected registers// Include application specific functions. This is for this example:// Enable INT1 which is connected to WAKEINT:IER |= M_INT1;// Enable WAKEINT in the PIE: Group 1 interrupt 8PieCtrlRegs.PIEIER1.bit.INTx8 = 1;// Connect the watchdog to the WAKEINT interrupt of the PIE// Write to the whole SCSR register to avoid clearing WDOVERRIDE bitEALLOW;SysCtrlRegs.SCSR.all = BIT1; //#define BIT1 0x0002该位为1时,看门狗输出复位信号无效,看门狗中断输出信号有效;若为0,则输出复位信号有效,中断输出信号无效。
EDIS;// Clear the countersWakeCount = 0; // Count interruptsLoopCount = 0; // Count times through idle loop// Enable global Interrupts and higher priority real-time debug events:EINT; // Enable Global interrupt INTMERTM; // Enable Global realtime interrupt DBGM// Step 6. IDLE loop. Just sit and loop forever (optional):for(;;){LoopCount++;// Uncomment(不受约束的) KickDog to just loop here// Comment KickDog to take the WAKEINT instead// KickDog();}// Step 7. Insert all local Interrupt Service Routines (ISRs) and functions here:// If local ISRs are used, reassign vector addresses in vector table as// shown in Step 5interrupt void wakeint_isr(void){WakeCount++;// Acknowledge this interrupt to get more from group 1PieCtrlRegs.PIEACK.all = PIEACK_GROUP1;}//=========================================================================== // No more.//===========================================================================。