led_driver.h 2.0 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667
  1. /**
  2. ******************************************************************************
  3. * @file led_driver.h
  4. * @brief LED 驱动模块公共接口
  5. * 管理 13 个反向并联 LED 的底层状态机和 GPIO 操作.
  6. *
  7. * LED 状态编码:
  8. * 0 - 全灭 : 浮空输入 (高阻态)
  9. * 1 - 正向亮 : 推挽输出, 高电平
  10. * 2 - 反向亮 : 推挽输出, 低电平
  11. * 3 - 双灯同亮: 推挽输出, ~1kHz 交替翻转
  12. * 4 - 250ms闪: 推挽输出, 每 250ms 翻转
  13. * 5 - 1s 闪 : 推挽输出, 每 1s 翻转
  14. *
  15. * LED11 (PA4) 为普通高电平点亮, 仅使用状态0/1.
  16. ******************************************************************************
  17. */
  18. #ifndef __LED_DRIVER_H
  19. #define __LED_DRIVER_H
  20. #ifdef __cplusplus
  21. extern "C" {
  22. #endif
  23. #include "main.h"
  24. /* ========== 常量 ========== */
  25. #define LED_COUNT 13u /* 总LED数量 */
  26. /* ========== LED 控制结构体 ========== */
  27. typedef struct {
  28. GPIO_TypeDef *port; /* GPIO 端口 */
  29. uint16_t pin; /* GPIO 引脚掩码 (1<<n) */
  30. uint8_t pinNum; /* 引脚序号 (0-15) */
  31. volatile uint8_t state; /* 当前状态 0-5 */
  32. } LED_Control_t;
  33. /* 13个LED控制块 (定义于 led_driver.c) */
  34. extern LED_Control_t g_leds[LED_COUNT];
  35. /* ========== 初始化 ========== */
  36. void LED_InitControlBlock(void);
  37. /* ========== 状态控制 ========== */
  38. void LED_SetState(uint8_t ledIdx, uint8_t state);
  39. void LED_ApplyStateToRegister(uint8_t ledIdx);
  40. void LED_ApplyAllStates(void);
  41. /* ========== 定时器回调 (在 TIM3 中断中调用) ========== */
  42. /**
  43. * @brief 每 100us 调用一次, 内部处理:
  44. * - 状态3 (双灯) ~1kHz 翻转 (每 0.5ms)
  45. * - 状态4 (250ms闪) 每 250ms 翻转
  46. * - 状态5 (1s闪) 每 1s 翻转
  47. */
  48. void LED_Tick100us(void);
  49. /* ========== LED 显示更新 (根据应用状态刷新 LED) ========== */
  50. void UpdateVolumeLEDs(void);
  51. void UpdateSourceLED(void);
  52. #ifdef __cplusplus
  53. }
  54. #endif
  55. #endif /* __LED_DRIVER_H */