led_app.c 2.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106
  1. /**********************************
  2. * LED应用模块
  3. * 功能:实现电机状态与LED的同步显示
  4. * 说明:
  5. * 1. LED1:电机运行时点亮,停止时熄灭
  6. * 2. LED2:以500ms为周期进行状态反转
  7. **********************************/
  8. #include "main.h"
  9. #include "board_config.h"
  10. // LED控制宏定义
  11. #define LED1_ON() GPIO_ResetBits(USER_LED1_GPIO_PORT, USER_LED1_PIN) // LED1点亮
  12. #define LED1_OFF() GPIO_SetBits(USER_LED1_GPIO_PORT, USER_LED1_PIN) // LED1熄灭
  13. #define LED1_TOGGLE() GPIO_ToggleBits(USER_LED1_GPIO_PORT, USER_LED1_PIN) // LED1状态反转
  14. #define LED2_ON() GPIO_ResetBits(USER_LED2_GPIO_PORT, USER_LED2_PIN) // LED2点亮
  15. #define LED2_OFF() GPIO_SetBits(USER_LED2_GPIO_PORT, USER_LED2_PIN) // LED2熄灭
  16. #define LED2_TOGGLE() GPIO_ToggleBits(USER_LED2_GPIO_PORT, USER_LED2_PIN) // LED2状态反转
  17. // LED状态结构体
  18. typedef struct {
  19. uint8_t led1_state; // LED1状态,0-熄灭,1-点亮
  20. uint8_t led2_state; // LED2状态,0-熄灭,1-点亮
  21. uint32_t led2_tick; // LED2计时变量
  22. uint8_t motor_state; // 电机状态,0-停止,1-运行
  23. } LED_State;
  24. // 全局LED状态变量
  25. LED_State led_state;
  26. /**
  27. * @brief LED应用初始化函数
  28. * @param 无
  29. * @retval 无
  30. */
  31. void led_app_init(void)
  32. {
  33. // 初始化LED状态
  34. led_state.led1_state = 0;
  35. led_state.led2_state = 0;
  36. led_state.led2_tick = 0;
  37. led_state.motor_state = 0;
  38. // 确保LED初始状态为熄灭
  39. LED1_OFF();
  40. LED2_OFF();
  41. }
  42. /**
  43. * @brief 电机状态变化回调函数
  44. * @param state: 电机状态,0-停止,1-运行
  45. * @retval 无
  46. */
  47. void motor_state_callback(uint8_t state)
  48. {
  49. led_state.motor_state = state;
  50. if (state == 1) { // 电机运行
  51. LED1_ON();
  52. led_state.led1_state = 1;
  53. } else { // 电机停止
  54. LED1_OFF();
  55. led_state.led1_state = 0;
  56. }
  57. }
  58. /**
  59. * @brief LED状态更新函数
  60. * @param 无
  61. * @retval 无
  62. */
  63. void led_app_update(void)
  64. {
  65. // LED2 500ms周期状态反转
  66. if (led_state.led2_tick >= 500) { // 500ms = 0.5秒
  67. led_state.led2_tick = 0;
  68. if (led_state.led2_state == 0) {
  69. LED2_ON();
  70. led_state.led2_state = 1;
  71. } else {
  72. LED2_OFF();
  73. led_state.led2_state = 0;
  74. }
  75. }
  76. }
  77. /**
  78. * @brief LED计时函数
  79. * @param tick: 计时增量(毫秒)
  80. * @retval 无
  81. */
  82. void led_app_tick(uint32_t tick)
  83. {
  84. led_state.led2_tick += tick;
  85. }
  86. /**
  87. * @brief 获取LED状态
  88. * @param 无
  89. * @retval LED_State: LED状态结构体
  90. */
  91. LED_State led_app_get_state(void)
  92. {
  93. return led_state;
  94. }