From ffb8ba03296a8e0409a4335f6c115a7f1c438b28 Mon Sep 17 00:00:00 2001 From: yelvlab Date: Tue, 28 Jul 2026 20:43:30 +0800 Subject: [PATCH] =?UTF-8?q?fix(timer):=E4=BF=AE=E5=A4=8D=E5=9C=A8=E8=BE=93?= =?UTF-8?q?=E5=87=BA=E9=AB=98=E7=94=B5=E5=B9=B3=E6=97=B6=EF=BC=8CCCR=3DARR?= =?UTF-8?q?=E6=83=85=E5=86=B5=E4=B8=8B=EF=BC=8C=E9=A9=B1=E5=8A=A8=E4=BF=A1?= =?UTF-8?q?=E5=8F=B7=E6=9C=89=E6=AF=9B=E5=88=BA=E3=80=82=E8=AE=BE=E7=BD=AE?= =?UTF-8?q?CCR=3DARR+1=EF=BC=8C=E5=8D=B3=E5=8F=AF=E8=A7=A3=E5=86=B3?= =?UTF-8?q?=E8=A6=81=E8=BE=93=E5=87=BA=E9=AB=98=E7=94=B5=E5=B9=B3=E6=97=B6?= =?UTF-8?q?=E7=9A=84=E6=AF=9B=E5=88=BA=E9=97=AE=E9=A2=98=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Inc/actuator.h | 2 ++ Src/actuator.c | 14 +++++++------- Src/command.c | 4 ++-- 3 files changed, 11 insertions(+), 9 deletions(-) diff --git a/Inc/actuator.h b/Inc/actuator.h index 2ae0540..3ce43e3 100644 --- a/Inc/actuator.h +++ b/Inc/actuator.h @@ -5,6 +5,8 @@ #include "gd32e23x.h" #include "stdbool.h" +#define ACTUARTOR_PERIOD_MAX 1000u + void actuator_init(void); void actuator_output(actuator_channel_t channel, uint16_t duty, actuator_direction_t direction); diff --git a/Src/actuator.c b/Src/actuator.c index b4fc120..4b2e125 100644 --- a/Src/actuator.c +++ b/Src/actuator.c @@ -68,7 +68,7 @@ void actuator_init(void) { void actuator_output(actuator_channel_t channel, uint16_t duty, actuator_direction_t direction) { - if (duty > 999) duty = 999; // Limit duty cycle to max value + if (duty > ACTUARTOR_PERIOD_MAX) duty = ACTUARTOR_PERIOD_MAX; // Limit duty cycle to max value if (direction != DIRECTION_PUSH && direction != DIRECTION_PULL) { // Invalid direction, handle error if necessary @@ -86,7 +86,7 @@ void actuator_output(actuator_channel_t channel, uint16_t duty, actuator_directi } else if (direction == DIRECTION_PULL) { SEGGER_RTT_printf(0, "[ACTUATOR] Actuator CH1 PULL with duty %d\n", duty); gpio_bit_set(ACTUATOR_CH1_GPIO_PORT, ACTUATOR_CH1_GPIO_PIN); // Set direction HIGH - timer_channel_output_pulse_value_config(ACTUATOR_PWM_TIMER, ACTUATOR_CH1_PWM_TIMER_CH, (999 - duty)); + timer_channel_output_pulse_value_config(ACTUATOR_PWM_TIMER, ACTUATOR_CH1_PWM_TIMER_CH, (ACTUARTOR_PERIOD_MAX - duty)); } } else if (channel == ACTUATOR_CH2) { if (direction == DIRECTION_PUSH) { @@ -96,7 +96,7 @@ void actuator_output(actuator_channel_t channel, uint16_t duty, actuator_directi } else if (direction == DIRECTION_PULL) { SEGGER_RTT_printf(0, "[ACTUATOR] Actuator CH2 PULL with duty %d\n", duty); gpio_bit_set(ACTUATOR_CH2_GPIO_PORT, ACTUATOR_CH2_GPIO_PIN); // Set direction HIGH - timer_channel_output_pulse_value_config(ACTUATOR_PWM_TIMER, ACTUATOR_CH2_PWM_TIMER_CH, (999 - duty)); + timer_channel_output_pulse_value_config(ACTUATOR_PWM_TIMER, ACTUATOR_CH2_PWM_TIMER_CH, (ACTUARTOR_PERIOD_MAX - duty)); } } else { // Invalid channel, handle error if necessary @@ -110,17 +110,17 @@ void actuator_output(actuator_channel_t channel, uint16_t duty, actuator_directi void actuator_stop(actuator_channel_t channel) { if(channel == ACTUATOR_CH1) { SEGGER_RTT_printf(0, "[ACTUATOR] Stopping Actuator CH1\n"); - timer_channel_output_pulse_value_config(ACTUATOR_PWM_TIMER, ACTUATOR_CH1_PWM_TIMER_CH, 999); // Ensure CH1 is off + timer_channel_output_pulse_value_config(ACTUATOR_PWM_TIMER, ACTUATOR_CH1_PWM_TIMER_CH, ACTUARTOR_PERIOD_MAX); // Ensure CH1 is off gpio_bit_set(ACTUATOR_CH1_GPIO_PORT, ACTUATOR_CH1_GPIO_PIN); // Set CH1 direction High } else if(channel == ACTUATOR_CH2) { SEGGER_RTT_printf(0, "[ACTUATOR] Stopping Actuator CH2\n"); - timer_channel_output_pulse_value_config(ACTUATOR_PWM_TIMER, ACTUATOR_CH2_PWM_TIMER_CH, 999); // Ensure CH2 is off + timer_channel_output_pulse_value_config(ACTUATOR_PWM_TIMER, ACTUATOR_CH2_PWM_TIMER_CH, ACTUARTOR_PERIOD_MAX); // Ensure CH2 is off gpio_bit_set(ACTUATOR_CH2_GPIO_PORT, ACTUATOR_CH2_GPIO_PIN); // Set CH2 direction High } else { // Invalid channel, handle error if necessary SEGGER_RTT_printf(0, "[ACTUATOR] Invalid channel specified for stop: %d\n", channel); - timer_channel_output_pulse_value_config(ACTUATOR_PWM_TIMER, ACTUATOR_CH1_PWM_TIMER_CH, 999); // Ensure CH1 is off - timer_channel_output_pulse_value_config(ACTUATOR_PWM_TIMER, ACTUATOR_CH2_PWM_TIMER_CH, 999); // Ensure CH2 is off + timer_channel_output_pulse_value_config(ACTUATOR_PWM_TIMER, ACTUATOR_CH1_PWM_TIMER_CH, ACTUARTOR_PERIOD_MAX); // Ensure CH1 is off + timer_channel_output_pulse_value_config(ACTUATOR_PWM_TIMER, ACTUATOR_CH2_PWM_TIMER_CH, ACTUARTOR_PERIOD_MAX); // Ensure CH2 is off gpio_bit_set(ACTUATOR_CH1_GPIO_PORT, ACTUATOR_CH1_GPIO_PIN); // Set CH1 direction High gpio_bit_set(ACTUATOR_CH2_GPIO_PORT, ACTUATOR_CH2_GPIO_PIN); // Set CH2 direction High } diff --git a/Src/command.c b/Src/command.c index 07ccd6d..e648f06 100644 --- a/Src/command.c +++ b/Src/command.c @@ -458,7 +458,7 @@ void handle_command(const uint8_t *frame, uint8_t len) { return; } - if (p_val > (uint32_t)ACTUATOR_CH2 || s_val > 999u) { + if (p_val > (uint32_t)ACTUATOR_CH2 || s_val > ACTUARTOR_PERIOD_MAX) { send_response(RESP_TYPE_PARAM_ERR, s_report_status_err, sizeof(s_report_status_err)); return; } @@ -480,7 +480,7 @@ void handle_command(const uint8_t *frame, uint8_t len) { return; } - if (p_val > (uint32_t)ACTUATOR_CH2 || s_val > 999u) { + if (p_val > (uint32_t)ACTUATOR_CH2 || s_val > ACTUARTOR_PERIOD_MAX) { send_response(RESP_TYPE_PARAM_ERR, s_report_status_err, sizeof(s_report_status_err)); return; }