Arm实验看门狗

时间:2024.4.27

ARM实验

姓名 唐珊珊 学号 2011412614

实验目的:掌握独立看门狗的工作原理和使用方法。

实验原理:

调用固件库设置和初始化独立看门狗,通过Led4的状态指示系统运行,同时按下按键SW1不断重置看门狗寄存器(俗称喂狗),当停止按键后,,则MCU会在看门狗超时的作用下系统重启。

实验步骤:

要实现本实验功能设计,需要进行必要的设置,其步骤如下:1)设置Led驱动管教为推挽输出,Sw1管脚为浮空输入。

2)Led4熄灭一下,以表示刚刚复位,

3)调用IWDG_writeAccessCmd函数向IWDG_KR写入0X5555。通过这步,我们取消看门狗寄存器的写保护。

4)设置看门狗的分频系数,本例中为32。在固件库中,可以调用IWDG_SetPrescaler函数实现。

5)设置看门狗的重装载的值,本例中为625.在固件库中,可以调用IWDG_SetReload函数实现。

6)调用IWDG_Enable函数向IWDG_KR写入0xcccc。通过这句,来启动STM32的看门狗。

7)检测按键Sw1,如果按下则调用IWDG_ReloadCounter函数使STM32重新加载IWDG_RlR的值到看门狗计数器里面。也可以用该命令来喂狗。

程序为:

独立看门狗

#include "stm32f10x.h"

void GPIO_Config(void);

void delay(void);

int main(void)

{

GPIO_Config();

GPIO_SetBits(GPIOC,GPIO_Pin_9);

delay();

GPIO_ResetBits(GPIOC,GPIO_Pin_9);

IWDG_WriteAccessCmd(IWDG_WriteAccess_Enable);

IWDG_SetPrescaler(IWDG_Prescaler_32);

IWDG_SetReload(625);

IWDG_Enable();

while(1)

{

if(GPIO_ReadInputDataBit(GPIOD,GPIO_Pin_3)==0)

IWDG_ReloadCounter();

}

}

void delay(void)

{

uint32_t i;

for(i=0;i<6000000;i++)

{}

}

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);

}

中断函数

uint32_t led=1;

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_9);

else

GPIO_SetBits(GPIOC,GPIO_Pin_9);

}

}

窗口看门狗

#include "stm32f10x.h"

void GPIO_Config(void);

void delay(void);

//uint32_t led=0;

int main(void)

{

NVIC_InitTypeDef NVIC_InitStructure;

GPIO_Config();

GPIO_ResetBits(GPIOC,GPIO_Pin_9);

delay();

GPIO_SetBits(GPIOC,GPIO_Pin_9);

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=0x07; NVIC_InitStructure.NVIC_IRQChannelSubPriority=0x07;

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_9;

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++)

{}

}

中断函数为

uint32_t led=0;

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_9);

else

GPIO_SetBits(GPIOC,GPIO_Pin_9);

}

}

一秒定时看门狗

#include "stm32f10x.h"

void GPIO_Config(void);

void NVIC_Config(void);

void TIM1_Config(void);

void EXTI_Config(void);

void IWDG_Config(void);

int main()

{

GPIO_Config();

NVIC_Config();

TIM1_Config();

EXTI_Config();

IWDG_Config();

while(1)

{

}

}

void GPIO_Config(void)

{

GPIO_InitTypeDef GPIO_InitStructure;

RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC|RCC_APB2Periph_GPIOD,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_Mode = GPIO_Mode_IN_FLOATING; GPIO_Init(GPIOD, &GPIO_InitStructure);

}

void NVIC_Config(void)

{

NVIC_InitTypeDef NVIC_InitStructure;

NVIC_InitStructure.NVIC_IRQChannel=TIM1_UP_IRQn;

NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=0; NVIC_InitStructure.NVIC_IRQChannelSubPriority=1;

NVIC_InitStructure.NVIC_IRQChannelCmd=ENABLE;

NVIC_Init(&NVIC_InitStructure);

NVIC_InitStructure.NVIC_IRQChannel = EXTI3_IRQn;

NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0x07; NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0x07;

NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;

NVIC_Init(&NVIC_InitStructure);

}

void TIM1_Config()

{

TIM_TimeBaseInitTypeDef TIM_TimeBaseInitStructure;

RCC_APB2PeriphClockCmd(RCC_APB2Periph_TIM1,ENABLE);

TIM_TimeBaseInitStructure.TIM_ClockDivision=0;

TIM_TimeBaseInitStructure.TIM_Period=(10000-1);

TIM_TimeBaseInitStructure.TIM_Prescaler=(7200-1);

TIM_TimeBaseInitStructure.TIM_CounterMode=TIM_CounterMode_Up; TIM_TimeBaseInitStructure.TIM_RepetitionCounter=0;

TIM_TimeBaseInit(TIM1,&TIM_TimeBaseInitStructure);

TIM_ClearITPendingBit(TIM1,TIM_IT_Update);

TIM_ITConfig(TIM1,TIM_IT_Update,ENABLE);

TIM_Cmd(TIM1,ENABLE);

}

void EXTI_Config(void)

{

EXTI_InitTypeDef EXTI_InitStructure;

RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO, ENABLE); GPIO_EXTILineConfig(GPIO_PortSourceGPIOD, GPIO_PinSource3); EXTI_InitStructure.EXTI_Line = EXTI_Line3;

EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;

EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Falling; EXTI_InitStructure.EXTI_LineCmd = ENABLE;

EXTI_Init(&EXTI_InitStructure);

}

void IWDG_Config(void)

{

IWDG_WriteAccessCmd(IWDG_WriteAccess_Enable);

IWDG_SetPrescaler(IWDG_Prescaler_32);

IWDG_SetReload(4000);

IWDG_Enable();

}

中端函数为

int led=1;

void TIM1_UP_IRQHandler(void)

{

if(TIM_GetITStatus(TIM1,TIM_IT_Update)!=RESET)

{

IWDG_ReloadCounter();

led=~led;

if(led==1)

GPIO_SetBits(GPIOC,GPIO_Pin_9);

else

GPIO_ResetBits(GPIOC,GPIO_Pin_9);

TIM_ClearITPendingBit(TIM1,TIM_IT_Update); }

}

void EXTI3_IRQHandler(void)

{

/* 检测EXTI3是否有效*/

if(EXTI_GetITStatus(EXTI_Line3)!= RESET)

{

} } while(1) { /*可随便加入现象,便于观察 */ GPIO_ResetBits(GPIOC,GPIO_Pin_9|GPIO_Pin_8|GPIO_Pin_7|GPIO_Pin_6); /* 清除EXTI3的悬起标志位 */ EXTI_ClearITPendingBit(EXTI_Line3); }


第二篇:嵌入式实验5 看门狗实验


广州大学学生实验报告

开课学院及实验室:机电学院 电子楼618             20##年 5 月 16 日

更多相关推荐:
嵌入式ARM看门狗实验报告

实验一看门狗实验1实验目的1了解WATCHDOG的作用2掌握WATCHDOG定时器的使用方法2实验设备1S3C2410嵌入式开发板JTAG仿真器2软件PC机操作系统Win98Win20xx或WindowsXPA...

矩阵键盘驱动、看门狗实验报告

杭州电子科技大学实验报告课程名称嵌入式系统原理课程设计姓名应海东实验项目矩阵键盘驱动看门狗实验班级10052313指导教师任彧学号10051329日期20xx1127

看门狗实验

看门狗实验一实验目的1掌握看门狗MAX813L复位控制的硬件接口技术2掌握看门狗MAX813L复位控制驱动程序的设计方法二实验说明为了控制系统不受外界干扰而出现死机现象可采用MAX813L复位监控芯片该芯片具备...

实验八 看门狗实验

实验八看门狗实验一实验目的1了解看门狗的作用2掌握看门狗的使用方法二实验内容1编程实现看门狗功能观察看门狗作用2编程实现看门狗喂狗三实验设备1硬件JX44B0实验板PC机JTAG仿真器2软件PC机操作系统WIN...

实验7:CC2530 看门狗实验

计算机科学与技术学院实验报告课程名称无线传感器网络原理与应用实验七CC2530看门狗实验一实验目的有些稳定性要求高的应用中需要使用看门狗Watchdog机制来重启系统本实验主要介绍看门狗看门狗模式的使用方法及作...

关于单片机看门狗技术的研究报告

1看门狗技术的的简介摘要在实验中开发出来的各种控制小系统经常会出现运行不稳定死机或停不了机即程序跑飞等现象这是由于恶劣的工业现场环境如大功率感性负载的干扰所至基于单片机的看门狗技术能解决这个问题B本文分别介绍用...

AVR学习笔记十二、AVR内部的看门狗操作实验

AVR学习笔记十二AVR内部的看门狗操作实验基于LTMiniM16121基于ATmega16内部看门狗操作实验1211实例功能AVR单片机的多数型号都有芯片内置的看门狗watchdog电路看门狗电路实际上是一个...

单片机报告_按键看门狗

黑龙江东方学院单片机原理及应用结课设计报告按键看门狗学部计算机科学与电气工程专业计算机科学与技术姓名年级09级学号任课教师设计周期3周1黑龙江东方学院单片机原理及应用结课设计任书单片机原理及应用结课设计报告目录...

实验报告(电路分析)

实验报告课程名称电路分析

实验一 门电路逻辑功能及测试 预习报告

预习报告实验一门电路逻辑功能及测试一、根据数字IC的工作原理指出工作电源电压以及输入、输出1和0的逻辑电平值。二、查找所用IC数据手册,列出实际的工作电源电压、以及输入、输出1和0的逻辑电平值。三、Multis…

硬器件实验报告3——集成门电路功能测试

23集成门电路的功能测试231基本知识点1逻辑值与电压值的关系2常用逻辑门电路的逻辑功能测试及测试方法3硬件基础电路试验箱的结构基本功能及使用方法232实验仪器与元器件1自制硬件基础电路试验箱双踪示波器基本功能...

实验1 门电路功能测试及组合逻辑电路设计

实验1门电路功能测试及组合逻辑电路设计1实验目的1掌握常用门电路的逻辑功能及测试方法2掌握用小规模集成电路设计组合逻辑电路的方法2实验仪器设备与主要器件数字电路实验箱一个电压源一台双踪示波器一台74LS00四2...

看门狗实验报告(10篇)