/********************************************************************************************************* * 模块名称:Relay.c * 摘 要:Relay模块 * 当前版本:1.0.0 * 作 者:anycrying * 完成日期:2024年04月11日 * 内 容: * 注 意: ********************************************************************************************************** * 取代版本: * 作 者: * 完成日期: * 修改内容: * 修改文件: *********************************************************************************************************/ /********************************************************************************************************* * 包含头文件 *********************************************************************************************************/ #include "Relay.h" #include "Sn74hc573.h" #include "stdbool.h" /********************************************************************************************************* * 宏定义 *********************************************************************************************************/ /********************************************************************************************************* * 枚举结构体 *********************************************************************************************************/ /********************************************************************************************************* * 内部变量定义 *********************************************************************************************************/ /********************************************************************************************************* * 内部函数声明 *********************************************************************************************************/ static void ConfigRelayGPIO(void); //配置Relay的GPIO /********************************************************************************************************* * 内部函数实现 *********************************************************************************************************/ /********************************************************************************************************* * 函数名称:ConfigRelayGPIO * 函数功能:配置Relay的GPIO * 输入参数:void * 输出参数:void * 返 回 值:void * 创建日期:2024年04月11日 * 注 意: *********************************************************************************************************/ static void ConfigRelayGPIO(void) { //使能RCU相关时钟 rcu_periph_clock_enable(RELAY_RCU); gpio_mode_set(RELAY_IO, GPIO_MODE_OUTPUT, GPIO_PUPD_PULLDOWN, RELAY_1); //设置GPIO模式 gpio_output_options_set(RELAY_IO, GPIO_OTYPE_PP, GPIO_OSPEED_50MHZ, RELAY_1); //设置GPIO输出模式及速度 gpio_bit_reset(RELAY_IO, RELAY_1); //将Relay_1默认状态设置为关闭 gpio_mode_set(RELAY_IO, GPIO_MODE_OUTPUT, GPIO_PUPD_PULLDOWN, RELAY_2); //设置GPIO模式 gpio_output_options_set(RELAY_IO, GPIO_OTYPE_PP, GPIO_OSPEED_50MHZ, RELAY_2); //设置GPIO输出模式及速度 gpio_bit_reset(RELAY_IO, RELAY_2); //将Relay_2默认状态设置为关闭 gpio_mode_set(RELAY_IO, GPIO_MODE_OUTPUT, GPIO_PUPD_PULLDOWN, RELAY_3); //设置GPIO模式 gpio_output_options_set(RELAY_IO, GPIO_OTYPE_PP, GPIO_OSPEED_50MHZ, RELAY_3); //设置GPIO输出模式及速度 gpio_bit_reset(RELAY_IO, RELAY_3); //将Relay_3默认状态设置为关闭 gpio_mode_set(RELAY_IO, GPIO_MODE_OUTPUT, GPIO_PUPD_PULLDOWN, RELAY_4); //设置GPIO模式 gpio_output_options_set(RELAY_IO, GPIO_OTYPE_PP, GPIO_OSPEED_50MHZ, RELAY_4); //设置GPIO输出模式及速度 gpio_bit_reset(RELAY_IO, RELAY_4); //将Relay_4默认状态设置为关闭 gpio_mode_set(RELAY_IO, GPIO_MODE_OUTPUT, GPIO_PUPD_PULLDOWN, RELAY_5); //设置GPIO模式 gpio_output_options_set(RELAY_IO, GPIO_OTYPE_PP, GPIO_OSPEED_50MHZ, RELAY_5); //设置GPIO输出模式及速度 gpio_bit_reset(RELAY_IO, RELAY_5); //将Relay_5默认状态设置为关闭 gpio_mode_set(RELAY_IO, GPIO_MODE_OUTPUT, GPIO_PUPD_PULLDOWN, RELAY_6); //设置GPIO模式 gpio_output_options_set(RELAY_IO, GPIO_OTYPE_PP, GPIO_OSPEED_50MHZ, RELAY_6); //设置GPIO输出模式及速度 gpio_bit_reset(RELAY_IO, RELAY_6); //将Relay_6默认状态设置为关闭 gpio_mode_set(RELAY_IO, GPIO_MODE_OUTPUT, GPIO_PUPD_PULLDOWN, RELAY_7); //设置GPIO模式 gpio_output_options_set(RELAY_IO, GPIO_OTYPE_PP, GPIO_OSPEED_50MHZ, RELAY_7); //设置GPIO输出模式及速度 gpio_bit_reset(RELAY_IO, RELAY_7); //将Relay_7默认状态设置为关闭 gpio_mode_set(RELAY_IO, GPIO_MODE_OUTPUT, GPIO_PUPD_PULLDOWN, RELAY_8); //设置GPIO模式 gpio_output_options_set(RELAY_IO, GPIO_OTYPE_PP, GPIO_OSPEED_50MHZ, RELAY_8); //设置GPIO输出模式及速度 gpio_bit_reset(RELAY_IO, RELAY_8); //将Relay_8默认状态设置为关闭 } /********************************************************************************************************* * API函数实现 *********************************************************************************************************/ /********************************************************************************************************* * 函数名称:InitRelay * 函数功能:初始化LED模块 * 输入参数:void * 输出参数:void * 返 回 值:void * 创建日期:2024年04月11日 * 注 意: *********************************************************************************************************/ void InitRelay(void) { ConfigRelayGPIO(); //配置RELAY的GPIO } /********************************************************************************************************* * 函数名称:Relay1State * 函数功能:Relay1State模块,控制继电器和更新通道状态 * 输入参数:RLx:第x路继电器,st:继电器状态 * 输出参数:void * 返 回 值:void * 创建日期:2024年04月11日 * 注 意: *********************************************************************************************************/ void Relayx_Onoff_state(uint8_t RLx,uint8_t st) { switch(RLx) { case RELAY1: { if(st == RELAY_ON) { RELAY_1_ON; } else { RELAY_1_OFF; } break; } case RELAY2: { if(st == RELAY_ON) { RELAY_2_ON; } else { RELAY_2_OFF; } break; } case RELAY3: { if(st == RELAY_ON) { RELAY_3_ON; } else { RELAY_3_OFF; } break; } case RELAY4: { if(st == RELAY_ON) { RELAY_4_ON; } else { RELAY_4_OFF; } break; } case RELAY5: { if(st == RELAY_ON) { RELAY_5_ON; } else { RELAY_5_OFF; } break; } case RELAY6: { if(st == RELAY_ON) { RELAY_6_ON; } else { RELAY_6_OFF; } break; } case RELAY7: { if(st == RELAY_ON) { RELAY_7_ON; } else { RELAY_7_OFF; } break; } case RELAY8: { if(st == RELAY_ON) { RELAY_8_ON; } else { RELAY_8_OFF; } break; } default: { RELAY_1_OFF; RELAY_2_OFF; RELAY_3_OFF; RELAY_4_OFF; RELAY_5_OFF; RELAY_6_OFF; RELAY_7_OFF; RELAY_8_OFF; break; } } } void IoInit(void) { rcu_periph_clock_enable(RCU_GPIOB); rcu_periph_clock_enable(RCU_GPIOC); gpio_mode_set(IO_RCU_C, GPIO_MODE_INPUT, GPIO_PUPD_PULLUP, IO_RST); gpio_mode_set(IO_RCU_B, GPIO_MODE_INPUT, GPIO_PUPD_PULLUP, IO_TEST); } bool get_rst() { FlagStatus status = SET; bool ret = false; uint32_t count = 50; if((status = gpio_input_bit_get(IO_RCU_C,IO_RST)) == RESET) { while(count--); if((status = gpio_input_bit_get(IO_RCU_C,IO_RST)) == RESET) { ret = true; } } return ret; } bool get_test() { FlagStatus status = SET; bool ret = false; uint32_t count = 50; if((status = gpio_input_bit_get(IO_RCU_B,IO_TEST)) == RESET) { while(count--); if((status = gpio_input_bit_get(IO_RCU_B,IO_TEST)) == RESET) { ret = true; } } return ret; }