/********************************************************************************************************* * Module : Relay.c * Abstract : Relay module is used to control external relay,of which combine with latch! * Version : 1.0.0 * Author : Leopul(COPYRIGHT 2025 - 2027 Leopul. All rights reserved.) * Complete : 2025-02-16 * Content : None * Note : None *********************************************************************************************************/ #include "Relay.h" #include "gd32e230x_conf.h" #include "Sn74lvc573.h" #include "R_Led.h" #include "main.h" #include "SysTick.h" #define RELAY_1 GPIO_PIN_3 #define RELAY_2 GPIO_PIN_4 static void ConfigRelayGPIO(void); static void ConfigRelayGPIO(void) { rcu_periph_clock_enable(RCU_GPIOB); gpio_mode_set(GPIOB, GPIO_MODE_OUTPUT, GPIO_PUPD_NONE, RELAY_1); gpio_output_options_set(GPIOB, GPIO_OTYPE_PP, GPIO_OSPEED_50MHZ, RELAY_1); gpio_bit_reset(GPIOB, RELAY_1); gpio_mode_set(GPIOB, GPIO_MODE_OUTPUT, GPIO_PUPD_NONE, RELAY_2); gpio_output_options_set(GPIOB, GPIO_OTYPE_PP, GPIO_OSPEED_50MHZ, RELAY_2); gpio_bit_reset(GPIOB, RELAY_2); } void InitRelay(void) { Init74Lvc(); ConfigRelayGPIO(); r_led_init(); sts_data_t *data = get_sts(); data->choise_input = choise_input; data->open_output = out_open; data->close_output = out_close; } void choise_input(uint8_t channel) { sts_data_t *data = get_sts(); switch(channel) { case 0: { gpio_bit_reset(GPIOB, RELAY_1); data->m_data.md_choise.choise_ch = INPUT_CHANNEL_1; in_r_led_on_off(channel); unlock(); lock(); } break; case 1: { gpio_bit_set(GPIOB, RELAY_1); data->m_data.md_choise.choise_ch = INPUT_CHANNEL_2; in_r_led_on_off(channel); unlock(); lock(); } break; default: break; } } void out_open() { sts_data_t *data = get_sts(); unlock(); gpio_bit_set(GPIOB, RELAY_2); lock(); out_r_led(0); data->m_data.out_status = OUT_OPEN; } void out_close() { sts_data_t *data = get_sts(); unlock(); gpio_bit_reset(GPIOB, RELAY_2); lock(); out_r_led(1); data->m_data.out_status = OUT_CLOSE; }