一、简介
T6位位计数溢出标志位。
二、库函数
void IWDG_WriteAccessCmd(uint16_t IWDG_WriteAccess);//写使能控制,
void IWDG_SetPrescaler(uint8_t IWDG_Prescaler);//写预分频器
void IWDG_SetReload(uint16_t Reload);//写重装值
void IWDG_ReloadCounter(void);//重新装载寄存器,喂狗
void IWDG_Enable(void);//启动独立看门狗
FlagStatus IWDG_GetFlagStatus(uint16_t IWDG_FLAG);
FlagStatus RCC_GetFlagStatus(uint8_t RCC_FLAG);//查看RCC标志位
void RCC_ClearFlag(void);//清除标志位
三、独立看门狗
#include "stm32f10x.h" // Device header
#include "Delay.h"
#include "OLED.h"
#include "KEY.h"
int main(void)
{
OLED_Init();
KEY_Init();
OLED_ShowString(1, 1, "IWDG TEST");
if (RCC_GetFlagStatus(RCC_FLAG_IWDGRST) == 1)
{
OLED_ShowString(2, 1, "IWDGRST");
Delay_ms(500);
OLED_ShowString(2, 1, " ");
Delay_ms(500);
RCC_ClearFlag();
}
else
{
OLED_ShowString(3, 1, "RST");
Delay_ms(500);
OLED_ShowString(3, 1, " ");
Delay_ms(500);
}
IWDG_WriteAccessCmd(IWDG_WriteAccess_Enable);//打开写保护
IWDG_SetPrescaler(IWDG_Prescaler_16);//预分频,16分频
IWDG_SetReload(2499);//设置重装值,1000ms超时
IWDG_ReloadCounter();//喂狗
IWDG_Enable();//开启看门狗
while(1)
{
KEY_GETNUM();
IWDG_ReloadCounter();//反复喂狗
OLED_ShowString(4, 1, "FEED");
Delay_ms(200);
OLED_ShowString(4, 1, " ");
Delay_ms(600);
}
}
四、窗口看门狗
1.库函数
void WWDG_DeInit(void);//恢复初始配置
void WWDG_SetPrescaler(uint32_t WWDG_Prescaler);//写入预分频器
void WWDG_SetWindowValue(uint8_t WindowValue);//写入窗口值
void WWDG_EnableIT(void);//写入中断
void WWDG_SetCounter(uint8_t Counter);//写入计数器,喂狗
void WWDG_Enable(uint8_t Counter);//使能看门狗
FlagStatus WWDG_GetFlagStatus(void);//夺取标志位
void WWDG_ClearFlag(void);//清除标志位
2.程序代码
#include "stm32f10x.h" // Device header
#include "Delay.h"
#include "OLED.h"
#include "KEY.h"
int main(void)
{
OLED_Init();
KEY_Init();
OLED_ShowString(1, 1, "WWDG TEST");
if (RCC_GetFlagStatus(RCC_FLAG_WWDGRST) == 1)
{
OLED_ShowString(2, 1, "WWDGRST");
Delay_ms(500);
OLED_ShowString(2, 1, " ");
Delay_ms(500);
RCC_ClearFlag();
}
else
{
OLED_ShowString(3, 1, "RST");
Delay_ms(500);
OLED_ShowString(3, 1, " ");
Delay_ms(500);
}
RCC_APB1PeriphClockCmd(RCC_APB1Periph_WWDG, ENABLE);//开启看门狗时钟
WWDG_SetPrescaler(WWDG_Prescaler_8);//设置预分频值
WWDG_SetWindowValue(21 | 0x40);//设置窗口值,窗口时间30ms
WWDG_Enable(54 | 0x40);//使能,同时写入重装值,超时时间50ms,喂狗必须在30ms~50ms之间
while(1)
{
KEY_GETNUM();
// OLED_ShowString(4, 1, "FEED");
// Delay_ms(20);
// OLED_ShowString(4, 1, " ");
Delay_ms(55);
WWDG_SetCounter(54 | 0x40);//反复喂狗
}
}