我的独立看门狗总结
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.)如果用户在选择字节中启用了“硬件看门狗“功能,在系统上电复位后,看门狗会自动开始运行;如果在计数器计数结束前,若软件没有向键寄存器写入相应的值,则系统会产生复位。
7。)看门狗复位时,系统复位,程序重新开始运行。
二、实验功能
为了实现IWDG复位功能,本人做了一个实验:
采用优易特电子的EDU开发板,功能如下:
系统上电,蜂鸣器延时叫一声,之后关闭。IWDG 40K的内部低速时钟进行8分频产生5KHZ的看门狗计数时钟,RLR设为2500,即看门狗复位时间设为500MS。LD1灯亮,表示看门狗初始化完毕。开启看门狗功能。定时器3定为200MS定时器,在每次定时器中断中,将看门狗计数器重新加载,当加载到25(5S)次以后,不再加载看门狗。这样,看门狗会在后面的时间发生复位,从而系统重新运行。检查蜂鸣器是否每约5S叫一声,如果这样表示IWDG发生了复位。功能检验完成。
经实验证明,以上功能均正确。
三、程序如下
main()
{
u32 temp;
RCC_init();
Gpio_int();
GPIO_ResetBits(GPIOC,GPIO_Pin_6);//蜂鸣器叫一声关闭
for(temp=0;temp200000;temp++);
GPIO_SetBits(GPIOC,GPIO_Pin_6);
IWDG_init();
GPIO_SetBits(GPIOF,GPIO_Pin_6);//LD1灯亮
Timer_init();
NVIC_init();
while(1);
}
……………………………………………………………………….
void IWDG_init(void)
{
/* Enable write access to IWDG_PR and IWDG_RLR registers */
IWDG_WriteAccessCmd(IWDG_WriteAccess_Enable);
/* IWDG counter clock: 40KHz(LSI) / 8 = 5 KHz */
IWDG_SetPrescaler(IWDG_Prescaler_8);
/* Set counter reload value to 2499,500ms */
IWDG_SetReload(2499);
/* Reload IWDG counter */
IWDG_ReloadCounter();
/* Enable IWDG (the LSI oscillator will be enabled by hardware) */
IWDG_Enable();
}
void NVIC_init(void)
{
NVIC_InitTypeDef NVIC_InitStructure;
#ifdef VECT_TAB_RAM
分频器相关文章:分频器原理 尘埃粒子计数器相关文章:尘埃粒子计数器原理 蜂鸣器相关文章:蜂鸣器原理
评论