Pvd.c 1.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576
  1. /* include ---------------------------------------------------------*/
  2. #include <main.h>
  3. /* private define -------------------------------------------------*/
  4. /* private variables ----------------------------------------------*/
  5. /* private function prototypes ------------------------------------*/
  6. static void Init(void);
  7. /* public variables -----------------------------------------------*/
  8. Pvd_t Pvd =
  9. {
  10. Init
  11. };
  12. /**
  13. * @brief PVD初始化
  14. * @param None
  15. * @retval None
  16. * @note None
  17. */
  18. static void Init(void)
  19. {
  20. NVIC_InitTypeDef NVIC_InitStructure;
  21. EXTI_InitTypeDef EXTI_InitStructure;
  22. /*使能 PWR 时钟 */
  23. RCC_APB1PeriphClockCmd(RCC_APB1Periph_PWR, ENABLE);
  24. /* 使能 PVD 中断 */
  25. NVIC_InitStructure.NVIC_IRQChannel = PVD_IRQn;
  26. NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;
  27. NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;
  28. NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
  29. NVIC_Init(&NVIC_InitStructure);
  30. /* 配置 EXTI16线(PVD 输出) 来产生上升下降沿中断*/
  31. EXTI_ClearITPendingBit(EXTI_Line16);
  32. EXTI_InitStructure.EXTI_Line = EXTI_Line16;
  33. EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;
  34. EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Rising_Falling;
  35. EXTI_InitStructure.EXTI_LineCmd = ENABLE;
  36. EXTI_Init(&EXTI_InitStructure);
  37. /* 配置PVD级别PWR_PVDLevel_2V6 (PVD检测电压的阈值为2.6V,VDD电压低于2.6V时产生PVD中断) */
  38. /*具体级别根据自己的实际应用要求配置*/
  39. PWR_PVDLevelConfig(PWR_PVDLevel_2V6);
  40. /* 使能PVD输出 */
  41. PWR_PVDCmd(ENABLE);
  42. }
  43. /**
  44. * @brief PVD中断
  45. * @param None
  46. * @retval None
  47. * @note None
  48. */
  49. void PVD_IRQHandler(void)
  50. {
  51. /*检测是否产生了PVD警告信号*/
  52. if(PWR_GetFlagStatus (PWR_FLAG_PVDO)==SET)
  53. {
  54. }
  55. /* 清除中断信号*/
  56. EXTI_ClearITPendingBit(EXTI_Line16);
  57. }