wdg.c 1.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869
  1. /********************************* (C) РОТЕК ***********************************
  2. * @module wdg
  3. * @file wdg.c
  4. * @version 1.0.0
  5. * @date XX.XX.XXXX
  6. * $brief External watchdog (pin PE11)
  7. *******************************************************************************
  8. * @history Version Author Comment
  9. * XX.XX.XXXX 1.0.0 Telenkov D.A. First release.
  10. *******************************************************************************
  11. */
  12. #include "stm32f4xx.h"
  13. #include "gpio.h"
  14. #include "wdg.h"
  15. /**
  16. * @brief
  17. * @retval
  18. */
  19. void WDG_Init(void)
  20. {
  21. NVIC_InitTypeDef NVIC_InitStructure;
  22. TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;
  23. RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM13, ENABLE);
  24. NVIC_InitStructure.NVIC_IRQChannel = TIM8_UP_TIM13_IRQn;
  25. NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0x6;
  26. NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0x0;
  27. NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
  28. NVIC_Init(&NVIC_InitStructure);
  29. NVIC_SetPriority(TIM8_UP_TIM13_IRQn, 2);
  30. /* APB1 Timer clock is 60Mhz, configure timer clock to 10khz (1 update event per 100 us) */
  31. TIM_TimeBaseStructure.TIM_Prescaler = 6000 - 1;
  32. /* Configure timer period to 100ms */
  33. TIM_TimeBaseStructure.TIM_Period = 1000;
  34. TIM_TimeBaseStructure.TIM_ClockDivision = 0;
  35. TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;
  36. TIM_TimeBaseInit(TIM13, &TIM_TimeBaseStructure);
  37. TIM_Cmd(TIM13, ENABLE);
  38. TIM_ITConfig(TIM13, TIM_IT_Update, ENABLE);
  39. }
  40. /**
  41. * @brief Дергаем пином (сброс внешнего WDT)
  42. * @retval
  43. */
  44. void TIM8_UP_TIM13_IRQHandler(void)
  45. {
  46. TIM_ClearITPendingBit(TIM13, TIM_IT_Update);
  47. gpio_invert_output(_WDG);
  48. }
  49. /**
  50. * @brief Дергаем пином (сброс внешнего WDT)
  51. */
  52. void WDT_Reset(void)
  53. {
  54. gpio_invert_output(_WDG);
  55. }
  56. /********************************* (C) РОТЕК **********************************/