实践6 WDG

目录

一、实验目的

二、实验原理

三、实验仪器

四、实验内容

五.实验结果及改进

六.实验结论


一、实验目的

1.配置独立看门狗(IWDG),通过按键进行喂狗并使用LED进行观察现象;

2.配置窗口看门狗(WWDG),并且编写看门狗检测清除程序,使用一个LED灯进行结果显示。


二、实验原理



1.(1) IWDG有独立的时钟,不需要使用库函数开启;

  (2)向IWDG-KR写入0x5555,之后才能设置分频系数;

  (3)向IWDG-KR写入0XAAAA喂狗;

  (4) IWDG定时器溢出会导致系统复位。

2. (1)WWDG时钟在APBI总线需要单独开启;

    (2)WWDG需要设置窗口值和重载值;

    (3)过早或过晚地喂狗,都会产生一个中断或复位;

    (4)可以在WWDG中断服务函数中喂狗。

三、实验仪器

电脑、开发板、UV5软件、共享文件Tempalte。

四、实验内容

1.用UV5软件打开共享文件Template。

2 (1)IWDG

添加librares \src文件夹下的stm32f10x_ rcc、stm32f10x_ iwdg.c、stm32f10x_gpio.c到工程

librares文件夹下,并在stm32f10x_conf.h中去掉相应的注释。

(2)WWDG

添加librares \src文件夹下的stm32f10x_ rcc、stm32f10x_gpio.c、stm32f10x_wwdg.c、misc.c到工

程中的libraries文件夹中,并在stm32f10x_conf.h中去掉相应的注释。

3.编写程序

(1)IWDG主程序(main.c)如下:

#include "stm32f10x.h"

void GPIO_Config(void);
void delay(void);
void IWDG_Config(void);

int main(void)
{
	GPIO_Config();
	GPIO_SetBits(GPIOC,GPIO_Pin_9);
	delay();
	GPIO_ResetBits(GPIOC,GPIO_Pin_9);
    IWDG_Config();
	while(1)
	{
		if(GPIO_ReadInputDataBit(GPIOD,GPIO_Pin_3)==0)
		IWDG_ReloadCounter();
	}
}

void GPIO_Config(void)
{
	GPIO_InitTypeDef GPIO_InitStructure;
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOD|RCC_APB2Periph_GPIOC,ENABLE);
	
	GPIO_InitStructure.GPIO_Pin=GPIO_Pin_9;
	GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;
	GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_PP;
	GPIO_Init(GPIOC,&GPIO_InitStructure);
	
	GPIO_InitStructure.GPIO_Pin=GPIO_Pin_3;
	GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;
	GPIO_InitStructure.GPIO_Mode=GPIO_Mode_IN_FLOATING;
	GPIO_Init(GPIOD,&GPIO_InitStructure);
}

void IWDG_Config(void)
{
	IWDG_WriteAccessCmd(IWDG_WriteAccess_Enable);
	IWDG_SetPrescaler(IWDG_Prescaler_32);
	IWDG_SetReload(625); 
	IWDG_Enable();
}
void delay(void)
{
	uint32_t i;
	for(i=0;i<6000000;i++)
	{}
}

(2)WWDG

  主程序(main.c)如下:

#include "stm32f10x.h"
void GPIO_Config(void);
void delay(void);
int main(void)
{
	NVIC_InitTypeDef NVIC_InitStructure;
	GPIO_Config();
	GPIO_ResetBits(GPIOC,GPIO_Pin_8);
	delay();
	GPIO_SetBits(GPIOC,GPIO_Pin_8);
	delay();
	RCC_APB1PeriphClockCmd(RCC_APB1Periph_WWDG,ENABLE);
	WWDG_SetPrescaler(WWDG_Prescaler_8);
	WWDG_EnableIT();
	WWDG_SetWindowValue(0X50);
	WWDG_Enable(0X70);
	NVIC_InitStructure.NVIC_IRQChannel = WWDG_IRQn;
	NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0X70;
	NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0X70;
	NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
	NVIC_Init(&NVIC_InitStructure);
	while(1)
	{}
}
void GPIO_Config(void)
{
	GPIO_InitTypeDef GPIO_InitStructure;
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC,ENABLE);
	
	GPIO_InitStructure.GPIO_Pin=GPIO_Pin_8;
	GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;
	GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_PP;
	GPIO_Init(GPIOC,&GPIO_InitStructure);
}
void delay(void)
{
	uint32_t i;
	for(i=0;i<6000000;i++)
	{}
}

中断程序(stm32f10x_it.c)如下:

void WWDG_IRQHandler(void)
{
	uint8_t cr;
	cr=WWDG->CR;
	cr&=0x7f;
	if(cr<0x50)
	{
		WWDG_SetCounter(0x70);
		WWDG_ClearFlag();
		led=~led;
		if(led==0)
			GPIO_ResetBits(GPIOC,GPIO_Pin_8);
		else
			GPIO_SetBits(GPIOC,GPIO_Pin_8);	
	}
}

4.编译——>配置ST-Link——>下载——>复位——>观察。



五.实验结果及改进

1.IWDG

按下复位键后,若不按按键,则不会启动喂狗的代码,PC8不停闪烁,说明系统一直在复位;如果

按下按键,则会喂一次狗,暂停复位一次;如果按键按下不松开,则PC8常亮,说明系统在按下按

键期间没有复位。

(2)WWDG

按下复位键后,观察到PC8管脚置0再置1后,开始快速反转,说明在不断喂狗,系统一直在运

行。

窗口判断

程序和WWDG主程序相同,中断程序(将中断函数中的窗口判断语句注释掉)如下:

void WWDG_IRQHandler(void)
{
	uint8_t cr;
	cr=WWDG->CR;
	cr&=0x7f;
	//if(cr<0x50)
	//{
		WWDG_SetCounter(0x70);
		WWDG_ClearFlag();
		led=~led;
		if(led==0)
			GPIO_ResetBits(GPIOC,GPIO_Pin_8);
		else
			GPIO_SetBits(GPIOC,GPIO_Pin_8);	
	//}
}

按下复位键后,可观察到PC8管脚的状态慢速地不停翻转,说明喂狗指令过早或过晚,导致系统不

断复位。

六.实验结论

在进行WWDG窗口看门狗时,编译链接后编译器显示0Enos(S).0 Warning但按下复位键后,开发

板上的现象是PC8每间隔1S闪烁一次,与该有的实验现象不符,这可是一个难题,因为不是语法

上的错误,所以不好找。在经过多次的与老师的程序比对后,发现是在中断程序中出了问题,将

extern uint32_t  led 写成了 uint8_t  led。改过了,再次编译、链接、下载、复位后,现象与预期现

象相符。











 
   



 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小码1111

谢谢那么优秀的你来为我加油

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值