#include "stm32f10x.h"

/* RCC时钟配置 */
void RCC_config(void)
{
 ErrorStatus HSEStartUpStatus;

/* RCC寄存器设置为默认配置 */
 RCC_DeInit();
 /* 打开外部高速时钟 */
 RCC_HSEConfig(RCC_HSE_ON);
 /* 等待外部高速时钟稳定 */
 HSEStartUpStatus = RCC_WaitForHSEStartUp();
 if(HSEStartUpStatus == SUCCESS)
 {
  /* 设置HCLK = SYSCLK */
  RCC_HCLKConfig(RCC_SYSCLK_Div1);
  /* 设置PCLK2 = HCLK */
  RCC_PCLK2Config(RCC_HCLK_Div1);
  /* 设置PCLK1 = HCLK / 2 */
  RCC_PCLK1Config(RCC_HCLK_Div2);
//  /* 设置FLASH代码延时 */
//  FLASH_SetLatency(FLASH_Latency_2);
//  /* 使能预取址缓存 */
//  FLASH_PrefetchBufferCmd(FLASH_PrefetchBuffer_Enable);
  /* 设置PLL时钟源为HSE倍频9 72MHz */
  RCC_PLLConfig(RCC_PLLSource_HSE_Div1, RCC_PLLMul_9);
  /* 使能PLL */
  RCC_PLLCmd(ENABLE);
  /* 等待PLL稳定 */
  while(RCC_GetFlagStatus(RCC_FLAG_PLLRDY) == RESET);
  /* 设置PLL为系统时钟源 */
  RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK);
  /* 等待系统时钟源切换到PLL */
  while(RCC_GetSYSCLKSource() != 0x08);
 }
}

/* 窗口看门狗配置 */
void WWDG_config(void)
{
 /* 打开时钟 */
 RCC_APB1PeriphClockCmd(RCC_APB1Periph_WWDG, ENABLE);

/* 设置WWDG预分频值 */
 WWDG_SetPrescaler(WWDG_Prescaler_8);
 /* 设置窗口值 */
 WWDG_SetWindowValue(0x60);
 /* 使能看门狗 */
 WWDG_Enable(0x7F);
 /* 清除中断标志位 */
 WWDG_ClearFlag();
 /* 使能中断 */
 WWDG_EnableIT();
}

/* 中断向量配置 */
void NVIC_config(void)
{
 NVIC_InitTypeDef NVIC_InitStructure;

/* 中断分组2 */
 NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);
 
 NVIC_InitStructure.NVIC_IRQChannel = WWDG_IRQn;
 NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 2;
 NVIC_InitStructure.NVIC_IRQChannelSubPriority = 2;
 NVIC_Init(&NVIC_InitStructure);
}

/* 毫秒延时函数 */
void delay_ms(uint16_t time)
{   
 uint16_t i = 0;

while(time--)
 {
  i = 12000;
  while(i--);   
 }
}

/* WWDG中断向量 */
void WWDG_IRQHandler(void)
{
 /* 喂狗 */
 WWDG_SetCounter(0x7F);
 
 /* 清除中断标志位 */
 WWDG_ClearFlag();
}

/* 主函数 */
int main(void)
{
 /* RCC时钟配置 */
 RCC_config();

/* 中断向量配置 */
 NVIC_config();
 
 /* 窗口看门狗配置 */
 WWDG_config();

while(1)
 {
  delay_ms(1000);
 }
}

STM32之窗口看门狗例程相关推荐

  1. 【转载】如何使用STM32的窗口看门狗

    STM32F的窗口看门狗中有一个7位的递减计数器,它会在出现下述2种情况之一时产生看门狗复位: 1)当计数器的数值从0x40减到0x3F时 2)当刷新看门狗时计数器的数值大于某一设定数值时,此设定数值 ...

  2. 【STM32】窗口看门狗

    00. 目录 文章目录 00. 目录 01. WWDG简介 02. WWDG主要特性 03. WWDG功能说明 04. 设置看门狗超时 05. WWDG寄存器 5.1 控制寄存器 (WWDG_CR) ...

  3. STM32之窗口看门狗原理

     stm32有两个看门狗,独立看门狗和窗口看门狗,其实两者的功能是类似的,只是喂狗的限制时间不同.   独立看门狗是限制喂狗时间在0-x内,x由你的相关寄存器决定.喂狗的时间不能过晚. 窗口看门狗 ...

  4. 【STM32】窗口看门狗程序

    00. 目录 文章目录 00. 目录 01. 窗口看门狗简介 02. 硬件设计 03. 编程步骤 04. 程序示例 05. 测试结果 06. 附录 07. 声明 01. 窗口看门狗简介 窗口看门狗(W ...

  5. 【STM32】窗口看门狗 WWDG 实验代码详解

    文章目录 main.c wwdg.c wwdg.h main.c #include "led.h" #include "delay.h" #include &q ...

  6. STM32学习(窗口看门狗)

    1.窗口看门狗 之所以称为称为窗口就是因为其喂狗时间是一个有上下限的范围内(窗口),你可以通过设定相关寄存器,设定其上限时间(下限固定).喂狗的时间不能过早也不能过晚. 而独立看门狗限制喂狗时间在0- ...

  7. 【STM32】窗口看门狗相关类型和函数

    00. 目录 文章目录 00. 目录 01. WWDG概述 02. 相关类型 03. 相关函数 04. 结构体封装 05. 附录 06. 声明 01. WWDG概述 stm32f4xx_wwdg.h和 ...

  8. STM32之独立看门狗例程

  9. STM32之独立看门狗与窗口看门狗总结

    一.独立看门狗 STM32 的独立看门狗由内部专门的 40Khz 低速时钟驱动,即使主时钟发生故障,它也仍然有效. 看门狗的原理:单片机系统在外界的干扰下会出现程序跑飞的现象导致出现死循环,看门狗电路 ...

最新文章

  1. 失眠——耳部按摩(组图)
  2. npm升级以及使用淘宝npm镜像
  3. element表格实现树形全选_vue+element UI实现树形表格带复选框的示例代码
  4. 五个使Java变得更好的功能
  5. OSPF——NSSA区域及完全NSSA区域(含配置命令)、第七类LSA类型 LSA-7详解
  6. 这次看到源码了,华为开源了方舟编译器
  7. SAP License:SAP中的一些问题及处理
  8. 【网易云课堂---轻松读书:番茄工作法二】
  9. 高级项目管理师/高项考试十大管理论文模板
  10. 《遥感原理与应用》总结—遥感传感器及成像原理
  11. 文献标识码、文献载体类型标识
  12. 龙芯cpu linux恢复密码,中标麒麟(龙芯CPU)--忘记root密码怎么修改?
  13. 桌面应用程序软件开发语言_开发多语言软件应用程序的技巧
  14. POSCMS 模块发布内容
  15. 转发 :QQ游戏百万人同时在线服务器架构实现
  16. 骰子 (入门概率DP)
  17. MFC界面编程基础(00):基本概念
  18. 使用BT下载是否会损毁SSD?
  19. Activiti Study
  20. Kotlin-JetPack-MVVM 从零开始搭建App

热门文章

  1. 词云-vue-wordcloud组件封装
  2. python 双向循环链表实现_python实现双向循环链表基本结构及其基本方法
  3. python调用cmd执行命令_python调用命令行,其中包含“echo”和“|”
  4. 扫地机器人哪个品牌好?五款口碑最好的扫地机器人
  5. sql:数据定义语言ddl
  6. (软件工程复习核心重点)第一章软件工程概论-第四节:软件过程及相关模型
  7. [Python]网络爬虫(十):一个爬虫的诞生全过程(以山东大学绩点运算为例)
  8. windows下使用net-snmp实现agent扩展(一)
  9. qt中 accept()和ignore()函数
  10. DNS常用记录类型和服务发现(DNS解析)