From 034a82f02457cebe1ced4141ad3a62fc4d72d91a Mon Sep 17 00:00:00 2001 From: wangfq Date: Wed, 24 Jun 2026 09:07:01 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20SW4=20=E5=BF=AB=E9=80=9F=E6=A8=A1?= =?UTF-8?q?=E5=BC=8F=20=E2=80=94=20=E7=A6=BB=E5=BC=80=E5=92=8C=E8=84=89?= =?UTF-8?q?=E5=86=B2=E5=BB=B6=E6=97=B6=E5=9D=87=E7=BC=A9=E7=9F=AD=E4=B8=BA?= =?UTF-8?q?500ms?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - TaskLoop.h: 新增 OUT_DELAY_FAST=10, PULSE_DELAY_FAST=10 - TaskLoop.h: SET_DLY 注释从"延时"改为"快速模式" - TaskLoop.c: FLAG_OUT 不再跳过延时,改为 OUT_DELAY_FAST 计数 - TaskLoop.c: FLAG_PLUSE 改用 PULSE_DELAY_FAST 计数 - 旧行为: SET_DLY=1 时 FLAG_OUT 立即跳到 FLAG_PLUSE - 新行为: SET_DLY=1 时两者均用 10 tick (500ms) 快速延迟 --- .../at32f421_freertos_demo/inc/TaskLoop.h | 6 +++++- .../at32f421_freertos_demo/src/TaskLoop.c | 21 +++++++------------ 2 files changed, 13 insertions(+), 14 deletions(-) diff --git a/utilities/at32f421_freertos_demo/inc/TaskLoop.h b/utilities/at32f421_freertos_demo/inc/TaskLoop.h index ea9fcc8..3bad010 100644 --- a/utilities/at32f421_freertos_demo/inc/TaskLoop.h +++ b/utilities/at32f421_freertos_demo/inc/TaskLoop.h @@ -26,6 +26,10 @@ #define OUT_DELAY 38 // 离开防抖 1.9s #define PULSE_DELAY 19 // 脉冲宽度 950ms +/* SW_4 快速模式:缩短离开防抖和脉冲宽度为 500ms */ +#define OUT_DELAY_FAST 10 // 离开防抖快速 500ms +#define PULSE_DELAY_FAST 10 // 脉冲宽度快速 500ms + /*=========================================================================== * 滤波参数 — 对齐 M1H *===========================================================================*/ @@ -115,7 +119,7 @@ extern uint8_t TM1cnt; // 50ms tick 分频计数 * 拨码开关状态 *===========================================================================*/ extern uint8_t SET_PLUS; // 0=存在输出, 1=脉冲输出 -extern uint8_t SET_DLY; // 0=无延时, 1=延时 +extern uint8_t SET_DLY; // 0=正常, 1=快速模式(500ms) extern uint8_t SET_SAFE; // 1=安全复位拨下 /*=========================================================================== diff --git a/utilities/at32f421_freertos_demo/src/TaskLoop.c b/utilities/at32f421_freertos_demo/src/TaskLoop.c index ea7c4c7..b319add 100644 --- a/utilities/at32f421_freertos_demo/src/TaskLoop.c +++ b/utilities/at32f421_freertos_demo/src/TaskLoop.c @@ -76,7 +76,7 @@ uint8_t TM1cnt = 0; * 拨码开关状态 *===========================================================================*/ uint8_t SET_PLUS = 0; -uint8_t SET_DLY = 0; +uint8_t SET_DLY = 0; // 0=正常, 1=快速模式(500ms) uint8_t SET_SAFE = 0; /*=========================================================================== @@ -508,27 +508,22 @@ void TMR15_GLOBAL_IRQHandler(void) } } - /* FLAG_OUT: 离开延时 1.9s(或 SET_DLY 时立即脉冲) */ + /* FLAG_OUT: 离开延时(正常 1.9s,快速模式 500ms) */ if (loop1_FLAG_OUT) { - if (SET_DLY) { - /* 延时模式:立即触发脉冲 */ + uint16_t out_delay = SET_DLY ? OUT_DELAY_FAST : OUT_DELAY; + loop1_OUTCNT++; + if (loop1_OUTCNT > out_delay) { loop1_FLAG_OUT = 0; loop1_FLAG_PLUSE = 1; loop1_OUTCNT = 0; - } else { - loop1_OUTCNT++; - if (loop1_OUTCNT > OUT_DELAY) { - loop1_FLAG_OUT = 0; - loop1_FLAG_PLUSE = 1; - loop1_OUTCNT = 0; - } } } - /* FLAG_PLUSE: 脉冲宽度 950ms */ + /* FLAG_PLUSE: 脉冲宽度(正常 950ms,快速模式 500ms) */ if (loop1_FLAG_PLUSE) { + uint16_t pulse_delay = SET_DLY ? PULSE_DELAY_FAST : PULSE_DELAY; loop1_OUTCNT++; - if (loop1_OUTCNT > PULSE_DELAY) { + if (loop1_OUTCNT > pulse_delay) { loop1_FLAG_PLUSE = 0; loop1_OUTCNT = 0; }