diff --git a/BLE/DLD154Pro_Peripheral_28K/APP/peripheral_main.c b/BLE/DLD154Pro_Peripheral_28K/APP/peripheral_main.c index f5b9af4..0210004 100644 --- a/BLE/DLD154Pro_Peripheral_28K/APP/peripheral_main.c +++ b/BLE/DLD154Pro_Peripheral_28K/APP/peripheral_main.c @@ -71,13 +71,15 @@ uint32_t g_sys_freq = 0; #define OPT_IN1 (GPIOB_ReadPortPin(GPIO_Pin_10)) /*=========================================================================== - * LEDB 红色呼吸灯 (PB23, PWM11) + * LEDB 红色呼吸灯 (PB23, PWM11) — 快速心跳指示 (~2s 周期) * PWM freq ≈ 60MHz / (PWM_CLK_DIV * 128) ≈ 5.86kHz @DIV=80 - * 呼吸周期 ≈ (127*2*50ms) + 0.5s + 0.3s ≈ 13.5s + * 周期 = 16步渐亮 + 3tick高亮 + 16步渐灭 + 3tick低亮 + * ≈ (16*50ms)*2 + 150ms*2 ≈ 1.9s *===========================================================================*/ #define PWM_CLK_DIV 80 #define PWM_CYCLE 128 // 7-bit 分辨率 (0~127) -#define BREATH_STEP_DELAY 1 // 每 50ms 更新一次占空比 (步进平滑) +#define BREATH_STEP_DELAY 1 // 每 50ms 更新一次 +#define BREATH_DUTY_STEP 8 // 每步跳 8 级占空比 #define BREATH_FADE_IN 0 #define BREATH_HOLD_HIGH 1 #define BREATH_FADE_OUT 2 @@ -1125,39 +1127,43 @@ void TMR1_IRQHandler(void) } } - /*--- LEDB 红色呼吸灯 (PWM11, 50ms tick) ---*/ + /*--- LEDB 红色呼吸灯 (PWM11, 50ms tick, ~1.9s 心跳周期) ---*/ g_breath_tick++; switch (g_breath_phase) { - case BREATH_FADE_IN: // 渐亮 0 → max, 每300ms一步 + case BREATH_FADE_IN: // 渐亮 0 → max, ~800ms if (g_breath_tick >= BREATH_STEP_DELAY) { g_breath_tick = 0; - g_breath_duty++; - PWM11_ActDataWidth(g_breath_duty); - if (g_breath_duty >= PWM_CYCLE - 1) { + if (g_breath_duty + BREATH_DUTY_STEP >= PWM_CYCLE) { + g_breath_duty = PWM_CYCLE - 1; g_breath_phase = BREATH_HOLD_HIGH; g_breath_tick = 0; + } else { + g_breath_duty += BREATH_DUTY_STEP; } + PWM11_ActDataWidth(g_breath_duty); } break; - case BREATH_HOLD_HIGH: // 最亮保持 ~0.5s - if (g_breath_tick >= 10) { + case BREATH_HOLD_HIGH: // 最亮保持 ~150ms + if (g_breath_tick >= 3) { g_breath_phase = BREATH_FADE_OUT; g_breath_tick = 0; } break; - case BREATH_FADE_OUT: // 渐灭 max → 0, 每300ms一步 + case BREATH_FADE_OUT: // 渐灭 max → 0, ~800ms if (g_breath_tick >= BREATH_STEP_DELAY) { g_breath_tick = 0; - g_breath_duty--; - PWM11_ActDataWidth(g_breath_duty); - if (g_breath_duty == 0) { + if (g_breath_duty <= BREATH_DUTY_STEP) { + g_breath_duty = 0; g_breath_phase = BREATH_HOLD_LOW; g_breath_tick = 0; + } else { + g_breath_duty -= BREATH_DUTY_STEP; } + PWM11_ActDataWidth(g_breath_duty); } break; - case BREATH_HOLD_LOW: // 最暗保持 ~0.3s - if (g_breath_tick >= 6) { + case BREATH_HOLD_LOW: // 最暗保持 ~150ms + if (g_breath_tick >= 3) { g_breath_phase = BREATH_FADE_IN; g_breath_tick = 0; }