/********************************* (C) РОТЕК *********************************** * @module wdg * @file wdg.c * @version 1.0.0 * @date XX.XX.XXXX * $brief External watchdog (pin PE11) ******************************************************************************* * @history Version Author Comment * XX.XX.XXXX 1.0.0 Telenkov D.A. First release. ******************************************************************************* */ #include "stm32f4xx.h" #include "gpio.h" #include "wdg.h" /** * @brief * @retval */ void WDG_Init(void) { NVIC_InitTypeDef NVIC_InitStructure; TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure; RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM13, ENABLE); NVIC_InitStructure.NVIC_IRQChannel = TIM8_UP_TIM13_IRQn; NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0x6; NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0x0; NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; NVIC_Init(&NVIC_InitStructure); NVIC_SetPriority(TIM8_UP_TIM13_IRQn, 2); /* APB1 Timer clock is 60Mhz, configure timer clock to 10khz (1 update event per 100 us) */ TIM_TimeBaseStructure.TIM_Prescaler = 6000 - 1; /* Configure timer period to 100ms */ TIM_TimeBaseStructure.TIM_Period = 1000; TIM_TimeBaseStructure.TIM_ClockDivision = 0; TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up; TIM_TimeBaseInit(TIM13, &TIM_TimeBaseStructure); TIM_Cmd(TIM13, ENABLE); TIM_ITConfig(TIM13, TIM_IT_Update, ENABLE); } /** * @brief Дергаем пином (сброс внешнего WDT) * @retval */ void TIM8_UP_TIM13_IRQHandler(void) { TIM_ClearITPendingBit(TIM13, TIM_IT_Update); gpio_invert_output(_WDG); } /** * @brief Дергаем пином (сброс внешнего WDT) */ void WDT_Reset(void) { gpio_invert_output(_WDG); } /********************************* (C) РОТЕК **********************************/