iwdg.h
#ifndef _IWDG_H #define _IWDG_H #include "stm32f10x.h" void IWDG_INIT(uint8_t prer ,uint16_t rlr); #endif
iwdg.c
#include "stm32f10x.h" #include "iwdg.h"
void IWDG_INIT(uint8_t prer ,uint16_t rlr) { ? IWDG_WriteAccessCmd(IWDG_WriteAccess_Enable ); ? IWDG_SetPrescaler(prer); ? IWDG_SetReload(rlr); ?? ?IWDG_ReloadCounter(); ?? ?IWDG_Enable();
} main.c
#include "stm32f10x.h" #include "led.h" #include "delay.h" #include "key.h" #include "iwdg.h" int main(void) { ?? ?LED_Init(); ?? ?delay_init(); ?? ?KEY_INIT(); ?? ?IWDG_INIT(4,625); ?? ?GPIO_ResetBits(GPIOA, GPIO_Pin_8); ?? ?delay_ms(200); ?? ?GPIO_SetBits(GPIOA, ?GPIO_Pin_8); ?? ?delay_ms(200); ?? ?while(1) ?? ?{ ?? ??? ?if(!GPIO_ReadInputDataBit(GPIOC, GPIO_Pin_5)) ?? ??? ?{ ?? ??? ??? ?delay_ms(20); ?? ??? ??? ?if(!GPIO_ReadInputDataBit(GPIOC, GPIO_Pin_5)) ?? ??? ??? ?{GPIO_ResetBits(GPIOA, GPIO_Pin_8); ?? ??? ??? ?IWDG_ReloadCounter(); ?? ??? ??? ?} ?? ? ?} ?? ??? ? ?? ? ? else ?? ??? ? { ?? ??? ? ? ?GPIO_SetBits(GPIOA, ?GPIO_Pin_8); ?? ??? ? } ?? ?}?? ? }
?? ??
?? ?(二)计算公式
Tout=((4*2^prer)*rlr)/40
当Tout=1s时,prer=4,计算得rlr=625。
|