Files
LFP_48V_mBMS_FW/mBMS_APP_V3117/HARDWARE/iwdg.c

56 lines
2.0 KiB
C

#include "iwdg.h"
#include "stm32f4xx_iwdg.h"
//////////////////////////////////////////////////////////////////////////////////
//This program is for educational purposes only, without the author's permission, may not be used for any other purpose
//ALIENTEK STM32F407 Development Board
//Independent watch-dog driver code
//Hot Atomic @ALIENTEK
//Forum: www.openedv.com
//Date created: 2015/9/1
//Version: V1.0
//All rights reserved pirated reserved.
//Copyright(C) Guangzhou wing electronic technology limited company 2014-2024
//All rights reserved
//////////////////////////////////////////////////////////////////////////////////
//Initialize watch-dog
void IWDG_Init(void)
{
/* IWDG timeout equal to 250 ms (the timeout may varies due to LSI frequency
dispersion) */
/* Enable write access to IWDG_PR and IWDG_RLR registers */
IWDG_WriteAccessCmd(IWDG_WriteAccess_Enable);
/* IWDG counter clock: 40KHz(LSI) / 128 = 312.5 Hz : 3.2ms */
/* 0.8ms ~ 3276.8ms */
// IWDG_Prescaler_4, 0, 0.1, 409.6
// IWDG_Prescaler_8, 1, 0.2, 819.2
// IWDG_Prescaler_16, 2, 0.4, 1638.4
// IWDG_Prescaler_32, 3, 0.8, 3276.8
// IWDG_Prescaler_64, 4, 1.6, 6553.6
// IWDG_Prescaler_128 5, 3.2, 13107.2
// IWDG_Prescaler_256 6, 6.4, 26214.4
/* IWDG counter clock: LSI/128 */
IWDG_SetPrescaler(IWDG_Prescaler_128);
/* Set counter reload value to obtain 250ms IWDG TimeOut.
Counter Reload Value = 1000ms / IWDG counter clock period
= 1000ms / (LSI/128)
=
Counter Reload Value = 250ms/IWDG counter clock period
= 250ms / (LSI/32)
= 0.25s / (LsiFreq/32)
= LsiFreq/(32 * 4)
= LsiFreq/128
*/
IWDG_SetReload(1000);
/* Reload IWDG counter */
IWDG_ReloadCounter();
/* Enable IWDG (the LSI oscillator will be enabled by hardware) */
IWDG_Enable();
}