Files
ZhaTianRC/Core/Inc/pwm_out.h

59 lines
1.7 KiB
C

/**
* PWM 输出与 LED 控制模块
* TIM3 CH1/CH2/CH3 -> PC6/PC7/PC8 (LED 指示灯)
* TIM4 CH3/CH4 -> PB8/PB9 (PWM_OUT1/2, 可配置 WS2812/LED/振动)
*/
#ifndef PWM_H
#define PWM_H
#include "main.h"
#include "tim.h"
#include "config.h"
/* PWM 输出模式 */
#define PWM_MODE_DISABLED 0
#define PWM_MODE_WS2812 1
#define PWM_MODE_LED 2
#define PWM_MODE_VIBRATE 3
/* WS2812 模式 */
#define WS2812_MODE_RAINBOW_BREATH 0
#define WS2812_MODE_COLOR_FLOW 1
#define WS2812_MODE_SINGLE_FLOW 2
#define WS2812_MODE_SINGLE_BREATH 3
#define WS2812_MODE_GRADIENT 4
#define WS2812_MODE_STROBE 5
#define WS2812_MODE_COUNT 6
/* LED 模式 */
#define LED_MODE_BREATH 0
#define LED_MODE_CONSTANT 1
/* 振动档位 */
#define VIBRATE_LEVEL_MIN 1
#define VIBRATE_LEVEL_MAX 9
/* 函数声明 */
void PWM_Init(void);
/* LED 指示灯控制 */
void LED_SetSystem(uint8_t on); /* 系统状态 LED (PC6) */
void LED_SetNRF(uint8_t mode); /* NRF 状态 LED (PC7): 0=慢闪,1=快闪,2=常亮,3=灭 */
void LED_SetCRFS(uint8_t mode); /* CRFS 状态 LED (PC8) */
void LED_Update(void); /* 每 10ms 调用, 更新 LED 闪烁 */
/* PWM 输出控制 */
void PWM_SetMode(uint8_t ch, uint8_t mode); /* ch: 0=PWM_OUT1, 1=PWM_OUT2 */
void PWM_SetWS2812Mode(uint8_t mode); /* 设置 WS2812 效果模式 */
void PWM_SetLEDBrightness(uint8_t brightness); /* 0-100 */
void PWM_SetVibrateLevel(uint8_t level); /* 1-9 */
/* 配置存储 */
extern uint8_t pwm1_mode;
extern uint8_t pwm2_mode;
extern uint8_t ws2812_effect;
extern uint8_t led_brightness;
extern uint8_t vibrate_level;
#endif /* PWM_H */