/********************************** * LED应用模块 * 功能:实现电机状态与LED的同步显示 * 说明: * 1. LED1:电机运行时点亮,停止时熄灭 * 2. LED2:以500ms为周期进行状态反转 **********************************/ #include "main.h" #include "board_config.h" // LED控制宏定义 #define LED1_ON() GPIO_ResetBits(USER_LED1_GPIO_PORT, USER_LED1_PIN) // LED1点亮 #define LED1_OFF() GPIO_SetBits(USER_LED1_GPIO_PORT, USER_LED1_PIN) // LED1熄灭 #define LED1_TOGGLE() GPIO_ToggleBits(USER_LED1_GPIO_PORT, USER_LED1_PIN) // LED1状态反转 #define LED2_ON() GPIO_ResetBits(USER_LED2_GPIO_PORT, USER_LED2_PIN) // LED2点亮 #define LED2_OFF() GPIO_SetBits(USER_LED2_GPIO_PORT, USER_LED2_PIN) // LED2熄灭 #define LED2_TOGGLE() GPIO_ToggleBits(USER_LED2_GPIO_PORT, USER_LED2_PIN) // LED2状态反转 // LED状态结构体 typedef struct { uint8_t led1_state; // LED1状态,0-熄灭,1-点亮 uint8_t led2_state; // LED2状态,0-熄灭,1-点亮 uint32_t led2_tick; // LED2计时变量 uint8_t motor_state; // 电机状态,0-停止,1-运行 } LED_State; // 全局LED状态变量 LED_State led_state; /** * @brief LED应用初始化函数 * @param 无 * @retval 无 */ void led_app_init(void) { // 初始化LED状态 led_state.led1_state = 0; led_state.led2_state = 0; led_state.led2_tick = 0; led_state.motor_state = 0; // 确保LED初始状态为熄灭 LED1_OFF(); LED2_OFF(); } /** * @brief 电机状态变化回调函数 * @param state: 电机状态,0-停止,1-运行 * @retval 无 */ void motor_state_callback(uint8_t state) { led_state.motor_state = state; if (state == 1) { // 电机运行 LED1_ON(); led_state.led1_state = 1; } else { // 电机停止 LED1_OFF(); led_state.led1_state = 0; } } /** * @brief LED状态更新函数 * @param 无 * @retval 无 */ void led_app_update(void) { // LED2 500ms周期状态反转 if (led_state.led2_tick >= 500) { // 500ms = 0.5秒 led_state.led2_tick = 0; if (led_state.led2_state == 0) { LED2_ON(); led_state.led2_state = 1; } else { LED2_OFF(); led_state.led2_state = 0; } } } /** * @brief LED计时函数 * @param tick: 计时增量(毫秒) * @retval 无 */ void led_app_tick(uint32_t tick) { led_state.led2_tick += tick; } /** * @brief 获取LED状态 * @param 无 * @retval LED_State: LED状态结构体 */ LED_State led_app_get_state(void) { return led_state; }