exti.c 1.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758
  1. /**********************************
  2. * 外部中断处理模块
  3. * 功能:处理按键的外部中断,设置相应的标志位
  4. * 说明:
  5. * 1. 处理KEY1、KEY2、KEY3的外部中断
  6. * 2. 当按键被按下时,设置相应的标志位
  7. * 3. 清除中断标志位,防止重复触发
  8. **********************************/
  9. #include "main.h"
  10. #include "exti.h"
  11. // 按键标志变量
  12. typedef unsigned char u8;
  13. u8 key1_flag = 0; // KEY1按键标志,1表示按键被按下
  14. u8 key2_flag = 0; // KEY2按键标志,1表示按键被按下
  15. u8 key3_flag = 0; // KEY3按键标志,1表示按键被按下
  16. /**
  17. * @brief EXTI2中断处理函数
  18. * @note 处理KEY1的外部中断,PE2, EXTI_Line2
  19. */
  20. void EXTI2_IRQHandler(void)
  21. {
  22. // 检查KEY1外部中断标志
  23. if(EXTI_GetITStatus(KEY_1_EXTI_LINE) != RESET)
  24. {
  25. key1_flag = 1; // 设置KEY1按键标志
  26. EXTI_ClearITPendingBit(KEY_1_EXTI_LINE); // 清除中断标志位
  27. }
  28. }
  29. /**
  30. * @brief EXTI3中断处理函数
  31. * @note 处理KEY2的外部中断,PE3, EXTI_Line3
  32. */
  33. void EXTI3_IRQHandler(void)
  34. {
  35. // 检查KEY2外部中断标志
  36. if(EXTI_GetITStatus(KEY_2_EXTI_LINE) != RESET)
  37. {
  38. key2_flag = 1; // 设置KEY2按键标志
  39. EXTI_ClearITPendingBit(KEY_2_EXTI_LINE); // 清除中断标志位
  40. }
  41. }
  42. /**
  43. * @brief EXTI4中断处理函数
  44. * @note 处理KEY3的外部中断,PE4, EXTI_Line4
  45. */
  46. void EXTI4_IRQHandler(void)
  47. {
  48. // 检查KEY3外部中断标志
  49. if(EXTI_GetITStatus(KEY_3_EXTI_LINE) != RESET)
  50. {
  51. key3_flag = 1; // 设置KEY3按键标志
  52. EXTI_ClearITPendingBit(KEY_3_EXTI_LINE); // 清除中断标志位
  53. }
  54. }