[置顶] ARM开发(8)基于STM32的窗口看门狗
2017-07-30 11:05
211 查看
基于STM32的窗口看门狗
一 窗口看门狗原理:
1.1 本实验实现STM32的窗口看门狗 1.2 实验思路:理解STM32窗口看门狗原理,根据其原理写驱动。 1.3 开发环境 : MDK5 库函数版本开发 JLINK仿真
二 实验步骤:
2.1 wwdg.h代码:
#ifndef __WWDG_H #define __WWDG_H #include "sys.h" void WWDG_Init(u8 tr,u8 wr,u32 fprer);//初始化WWDG void WWDG_Set_Counter(u8 cnt); //设置WWDG的计数器 void WWDG_NVIC_Init(void); //中断 #endif
2.2 wwdg.c代码(窗口看门狗初始化):
#include "wwdg.h" #include "beep.h" //保存WWDG计数器的设置值,默认为最大. u8 WWDG_CNT=0x7f; //初始化窗口看门狗 //tr :T[6:0],计数器值 //wr :W[6:0],窗口值 //fprer:分频系数(WDGTB),仅最低2位有效 //Fwwdg=PCLK1/(4096*2^fprer). void WWDG_Init(u8 tr,u8 wr,u32 fprer) { RCC_APB1PeriphClockCmd(RCC_APB1Periph_WWDG, ENABLE); // WWDG时钟使能 WWDG_CNT=tr&WWDG_CNT; //初始化WWDG_CNT. WWDG_SetPrescaler(fprer);////设置IWDG预分频值 WWDG_SetWindowValue(wr);//设置窗口值 WWDG_Enable(WWDG_CNT); //使能看门狗 , 设置 counter . WWDG_ClearFlag();//清除提前唤醒中断标志位 WWDG_NVIC_Init();//初始化窗口看门狗 NVIC WWDG_EnableIT(); //开启窗口看门狗中断 } //重设置WWDG计数器的值 void WWDG_Set_Counter(u8 cnt) { WWDG_Enable(cnt);//使能看门狗 , 设置 counter . } //窗口看门狗中断服务程序 void WWDG_NVIC_Init() { NVIC_InitTypeDef NVIC_InitStructure; NVIC_InitStructure.NVIC_IRQChannel = WWDG_IRQn; //WWDG中断 NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 2; //抢占2,子优先级3,组2 NVIC_InitStructure.NVIC_IRQChannelSubPriority = 3; //抢占2,子优先级3,组2 NVIC_InitStructure.NVIC_IRQChannelCmd=ENABLE; NVIC_Init(&NVIC_InitStructure);//NVIC初始化 } void WWDG_IRQHandler(void) { WWDG_SetCounter(WWDG_CNT); //当禁掉此句后,窗口看门狗将产生复位 WWDG_ClearFlag(); //清除提前唤醒中断标志位 BEEP =!BEEP ; }
2.2 main.c代码(实现窗口看门狗,蜂鸣器,TM1629A led灯检测效果):
#include "delay.h" #include "key.h" #include "sys.h" #include "usart.h" #include "wwdg.h" #include "keyled.h" #include "beep.h" int main(void) { u8 seg88Code[16]={0x3f, 0x06, 0x5B, 0x4F, 0x66, 0x6D, 0x7D, 0x07, 0x7F, 0x6F, 0x77, 0X7C, 0x39, 0x5E, 0x79, 0x71}; delay_init(); //延时函数初始化 NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);//设置中断优先级分组为组2:2位抢占优先级,2位响应优先级 uart_init(115200); //串口初始化为115200 KEY_Init(); Initial_LED(); //按键初始化 BEEP_Init(); DisplayOn(1); Dis 4000 play(seg88Code); delay_ms(200); WWDG_Init (0X7F,0X5F,WWDG_Prescaler_8);//计数器值为7f,窗口寄存器为5f,分频数为8 while(1) { DisplayOn(0); } }
三 接线测试:
3.1 与板子接线测试效果良好,独立看门狗效果良好,tm1629数码管显示,然后熄灭,蜂鸣器间隔鸣叫。
相关文章推荐
- [置顶] ARM开发(7)基于STM32的独立看门狗
- [置顶] ARM开发(9)基于STM32的简单四则运算计算器
- [置顶] ARM开发(4)基于STM32的矩阵键盘按键控制TM1629A LED显示
- [置顶] ARM开发(2)基于STM32的蜂鸣器
- [置顶] ARM开发(10)基于STM32的通用定时器中断控制蜂鸣器响
- [置顶] ARM开发(1) 基于stm32的led跑马灯
- [置顶] ARM开发(5)基于STM32的UART串口通信实验
- [置顶] ARM开发(6) 基于STM32的矩阵键盘按键触发外部中断引起蜂鸣器鸣叫
- [置顶] 基于OpenLayer的室内地图前端设计开发
- 基于ARM的智能灯光控制系统(3)驱动开发
- [置顶] 协作半驻留式服务器程序开发框架 --- 基于 Postfix 服务器框架改造
- 基于arm的fast models的架构仿真和linux kernel 开发
- 【Qt编程】基于Qt的词典开发系列<五>--无边框窗口的拖动
- windows下的基于Eclipse的STM32开发调试环境搭建
- STM32F0xx_看门狗(独立+窗口)配置详细过程
- ARM Keil MDK开发STM32工程模板
- 基于GPL329XXB IPC开发Issue 1 -- ARM 无线WIFI ping不通PC原因
- 基于ARM S3C2410的LCD开发过程
- 基于ARM 的嵌入式系统程序开发要点--(图不完整,网上有下载)
- linux下搭建基于Eclipse的arm的开发环境