/********************************************************************************************************* * 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 "gd32f30x_libopt.h" #include "Sn74lvc573.h" #include "R_Led.h" #include "main.h" #include "SysTick.h" #define RELAY_RCU RCU_GPIOA #define RELAY_GPIO GPIOA #define RELAY_1 GPIO_PIN_6 #define RELAY_2 GPIO_PIN_7 static void ConfigRelayGPIO(void); static void ConfigRelayGPIO(void) { rcu_periph_clock_enable(RELAY_RCU); gpio_init(RELAY_GPIO,GPIO_MODE_OUT_PP,GPIO_OSPEED_50MHZ,RELAY_1 | RELAY_2); gpio_bit_reset(RELAY_GPIO,RELAY_1 | 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(RELAY_GPIO, RELAY_1); data->m_data.m_rw.rw_data.chiose_ch = INPUT_CHANNEL_1; in_r_led_on_off(channel); // unlock(); // lock(); } break; case 1: { gpio_bit_set(RELAY_GPIO, RELAY_1); data->m_data.m_rw.rw_data.chiose_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(RELAY_GPIO, RELAY_2); //lock(); out_r_led(0); data->m_data.m_rw.rw_data.md_eep.out_status = OUT_OPEN; } void out_close() { sts_data_t *data = get_sts(); //unlock(); gpio_bit_reset(RELAY_GPIO, RELAY_2); //lock(); //out_r_led(1); data->m_data.m_rw.rw_data.md_eep.out_status = OUT_CLOSE; }