/*! \file gpio.h \brief the header file of systick \version 2026-01-01, for JC */ /* Copyright (c) 2025, GigaDevice Semiconductor Inc. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. 3. Neither the name of the copyright holder nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ #include "gd32h7xx.h" #include "gd32h7xx_gpio.h" #include "gpio.h" /*! \brief Configure GPIO OUT pins \param[in] none \param[out] none \retval none */ void v_outpin_config(void) { /* 开启GPIO - outpin 外设时钟 经测试一句使能所有时钟不起作用 */ //rcu_periph_clock_enable(RCU_GPIOA | RCU_GPIOB | RCU_GPIOC | RCU_GPIOD | RCU_GPIOE | RCU_GPIOF | RCU_GPIOG | RCU_GPIOJ | RCU_GPIOK); rcu_periph_clock_enable(RCU_GPIOA); rcu_periph_clock_enable(RCU_GPIOB); rcu_periph_clock_enable(RCU_GPIOC); rcu_periph_clock_enable(RCU_GPIOD); rcu_periph_clock_enable(RCU_GPIOE); rcu_periph_clock_enable(RCU_GPIOF); rcu_periph_clock_enable(RCU_GPIOG); rcu_periph_clock_enable(RCU_GPIOJ); rcu_periph_clock_enable(RCU_GPIOK); /* 单阶段初始化:先预置 OCTL 为高电平(断开态),再切换到推挽输出。 */ gpio_bit_set(GPIOG, GPIO_PIN_4 | GPIO_PIN_5 | GPIO_PIN_6 | GPIO_PIN_7 | GPIO_PIN_8 | GPIO_PIN_9 | GPIO_PIN_10 | GPIO_PIN_11); gpio_bit_set(GPIOC, GPIO_PIN_8 | GPIO_PIN_9); //gpio_bit_set(GPIOK, GPIO_PIN_1 | GPIO_PIN_2); /* 主控板开关量输出控制(DO) PG4 114 DO OUT1|板载继电器K1控制 PG5 115 DO OUT2|板载继电器K2控制 PG6 116 DO OUT3|板载继电器K3控制 PG7 117 DO OUT4|板载继电器K4控制 PG8 118 DO OUT5|板载继电器K5控制 PC8 124 DO OUT6|板载继电器K6控制 PC9 125 DO OUT7|板载继电器K7控制 PG9 153 DO OUT8|板载继电器K8控制 PG10 154 DO OUT9|板载继电器K9控制 PG11 155 DO OUT10|板载继电器K10控制 PK1 108 D0 A_gun_elelock_ ctr|A枪电子锁控制 PK2 109 DO B_gun_elelock_ ctr|B枪电子锁控制 */ /* Configure GPIO pins as output mode (no pull-up/pull-down) */ gpio_mode_set(GPIOG, GPIO_MODE_OUTPUT, GPIO_PUPD_NONE, GPIO_PIN_4 | GPIO_PIN_5 |GPIO_PIN_6 | GPIO_PIN_7 | GPIO_PIN_8 | GPIO_PIN_9 | GPIO_PIN_10 | GPIO_PIN_11 ); /* Set output type to push-pull and speed to 60MHz */ gpio_output_options_set(GPIOG, GPIO_OTYPE_PP, GPIO_OSPEED_60MHZ, GPIO_PIN_4 | GPIO_PIN_5 |GPIO_PIN_6 | GPIO_PIN_7 | GPIO_PIN_8 | GPIO_PIN_9 | GPIO_PIN_10 | GPIO_PIN_11); /* Configure GPIO pins as output mode (no pull-up/pull-down) */ gpio_mode_set(GPIOC, GPIO_MODE_OUTPUT, GPIO_PUPD_NONE, GPIO_PIN_8 | GPIO_PIN_9); /* Set output type to push-pull and speed to 60MHz */ gpio_output_options_set(GPIOC, GPIO_OTYPE_PP, GPIO_OSPEED_60MHZ, GPIO_PIN_8 | GPIO_PIN_9); /* Configure GPIO pins as output mode (no pull-up/pull-down) */ gpio_mode_set(GPIOK, GPIO_MODE_OUTPUT, GPIO_PUPD_NONE, GPIO_PIN_1 | GPIO_PIN_2 ); /* Set output type to push-pull and speed to 60MHz */ gpio_output_options_set(GPIOK, GPIO_OTYPE_PP, GPIO_OSPEED_60MHZ, GPIO_PIN_1 | GPIO_PIN_2 ); /* DO/电子锁电平已在切换为输出模式前预置为高电平(断开态),避免继电器抖动。 */ /* 主控板内部开关量输出控制(DO) PE4 3 DO INSA_CTL|A枪绝缘监测接地开关 PE3 2 DO UNBALA_CTL|A枪绝缘监测正极回路开关 PA5 50 DO INSB_CTL|B枪绝缘监测接地开关 PE5 4 DO UNBALB_CTL|B枪绝缘监测正极回路开关 */ /* Configure GPIO pins as output mode (no pull-up/pull-down) */ gpio_mode_set(GPIOE, GPIO_MODE_OUTPUT, GPIO_PUPD_NONE,GPIO_PIN_3 | GPIO_PIN_4 | GPIO_PIN_5); /* Set output type to push-pull and speed to 60MHz */ gpio_output_options_set(GPIOE, GPIO_OTYPE_PP, GPIO_OSPEED_60MHZ,GPIO_PIN_3 | GPIO_PIN_4 | GPIO_PIN_5); /* Configure GPIO pins as output mode (no pull-up/pull-down) */ gpio_mode_set(GPIOA, GPIO_MODE_OUTPUT, GPIO_PUPD_NONE, GPIO_PIN_5 ); /* Set output type to push-pull and speed to 60MHz */ gpio_output_options_set(GPIOA, GPIO_OTYPE_PP, GPIO_OSPEED_60MHZ, GPIO_PIN_5 ); /* 板上LED指示灯 PG15 DO H7_RUN */ /* Configure GPIO pins as output mode (no pull-up/pull-down) */ gpio_mode_set(GPIOG, GPIO_MODE_OUTPUT, GPIO_PUPD_NONE,GPIO_PIN_15); /* Set output type to push-pull and speed to 60MHz */ gpio_output_options_set(GPIOG, GPIO_OTYPE_PP, GPIO_OSPEED_60MHZ,GPIO_PIN_15); /* 主控板内部连接确认模式选择控制 PF8 28 DO CHK_CSA_CTL PF2 20 DO CHK_CSB_CTL */ /* Configure GPIO pins as output mode (no pull-up/pull-down) */ gpio_mode_set(GPIOF, GPIO_MODE_OUTPUT, GPIO_PUPD_NONE,GPIO_PIN_2 | GPIO_PIN_8); /* Set output type to push-pull and speed to 60MHz */ gpio_output_options_set(GPIOF, GPIO_OTYPE_PP, GPIO_OSPEED_60MHZ,GPIO_PIN_2 | GPIO_PIN_8); /* 主控板内部控制输出 PE2 1 DO WDO PB7 166 DO ESP8685_EN|ESP8685蓝牙WIFI模块使能控制 PE6 5 DO FC41D_RST|FC41D蓝牙WIFI模块复位(高有效,常态低) PF3 21 DO 4G_RST|WH606 4G模块复位控制 PC13 9 DO 4G_POWER|WH606 4G模块电源控制 PA10 129 DO CIU_RST|CIU98_A加密芯片复位控制 */ gpio_bit_reset(FC41D_RST_PORT, FC41D_RST_PIN); /* FC41D 常态低(高电平复位) */ /* Configure GPIO pins as output mode (no pull-up/pull-down) */ gpio_mode_set(GPIOE, GPIO_MODE_OUTPUT, GPIO_PUPD_NONE,GPIO_PIN_2 | GPIO_PIN_6); /* Set output type to push-pull and speed to 60MHz */ gpio_output_options_set(GPIOE, GPIO_OTYPE_PP, GPIO_OSPEED_60MHZ,GPIO_PIN_2 | GPIO_PIN_6); gpio_mode_set(GPIOB, GPIO_MODE_OUTPUT, GPIO_PUPD_NONE, GPIO_PIN_7 ); /* Set output type to push-pull and speed to 60MHz */ gpio_output_options_set(GPIOB, GPIO_OTYPE_PP, GPIO_OSPEED_60MHZ, GPIO_PIN_7 ); gpio_mode_set(GPIOF, GPIO_MODE_OUTPUT, GPIO_PUPD_NONE, GPIO_PIN_3 ); /* Set output type to push-pull and speed to 60MHz */ gpio_output_options_set(GPIOF, GPIO_OTYPE_PP, GPIO_OSPEED_60MHZ, GPIO_PIN_3 ); gpio_mode_set(GPIOC, GPIO_MODE_OUTPUT, GPIO_PUPD_NONE, GPIO_PIN_13 ); /* Set output type to push-pull and speed to 60MHz */ gpio_output_options_set(GPIOC, GPIO_OTYPE_PP, GPIO_OSPEED_60MHZ, GPIO_PIN_13 ); gpio_mode_set(GPIOA, GPIO_MODE_OUTPUT, GPIO_PUPD_NONE, GPIO_PIN_10 ); /* Set output type to push-pull and speed to 60MHz */ gpio_output_options_set(GPIOA, GPIO_OTYPE_PP, GPIO_OSPEED_60MHZ, GPIO_PIN_10 ); /* 温度采集通道选择控制 PD10 数字地址“A”输出控制 PD13 数字地址“B”输出控制 PJ8 数字地址“C”输出控制 */ /* Configure GPIO pins as output mode (no pull-up/pull-down) */ gpio_mode_set(GPIOD, GPIO_MODE_OUTPUT, GPIO_PUPD_NONE,GPIO_PIN_10 | GPIO_PIN_13); /* Set output type to push-pull and speed to 60MHz */ gpio_output_options_set(GPIOD, GPIO_OTYPE_PP, GPIO_OSPEED_60MHZ,GPIO_PIN_10 | GPIO_PIN_13); gpio_mode_set(GPIOJ, GPIO_MODE_OUTPUT, GPIO_PUPD_NONE, GPIO_PIN_8 ); /* Set output type to push-pull and speed to 60MHz */ gpio_output_options_set(GPIOJ, GPIO_OTYPE_PP, GPIO_OSPEED_60MHZ, GPIO_PIN_8); } void v_inpin_config(void) { /* 开启GPIO - inpin 外设时钟 */ rcu_periph_clock_enable(RCU_GPIOA); rcu_periph_clock_enable(RCU_GPIOB); rcu_periph_clock_enable(RCU_GPIOD); rcu_periph_clock_enable(RCU_GPIOE); rcu_periph_clock_enable(RCU_GPIOF); rcu_periph_clock_enable(RCU_GPIOG); /* 开关量输入检测 PC0 DI YX1|系统开关量输入检测 PB0 55 DI YX2|系统开关量输入检测 PF14 61 DI YX3|系统开关量输入检测 PB1 56 DI YX4|系统开关量输入检测 PF15 62 DI YX5|系统开关量输入检测 PB2 57 DI YX6|系统开关量输入检测 PG0 63 DI YX7|系统开关量输入检测 PF11 58 DI YX8|系统开关量输入检测 PE11 73 DI YX9|系统开关量输入检测 PF12 59 DI YX10|系统开关量输入检测 PE15 77 DI YX11|系统开关量输入检测 PF13 60 DI YX12|系统开关量输入检测 PG1 66 DI Aux_Padet|A枪辅助电源检测 PB10 78 DI Aux_Pbdet|B枪辅助电源检测 */ /* configure pin as input */ gpio_mode_set(GPIOC, GPIO_MODE_INPUT, GPIO_PUPD_NONE, GPIO_PIN_0); gpio_mode_set(GPIOB, GPIO_MODE_INPUT, GPIO_PUPD_NONE, GPIO_PIN_0); gpio_mode_set(GPIOF, GPIO_MODE_INPUT, GPIO_PUPD_NONE, GPIO_PIN_14); gpio_mode_set(GPIOB, GPIO_MODE_INPUT, GPIO_PUPD_NONE, GPIO_PIN_1); gpio_mode_set(GPIOF, GPIO_MODE_INPUT, GPIO_PUPD_NONE, GPIO_PIN_15); gpio_mode_set(GPIOB, GPIO_MODE_INPUT, GPIO_PUPD_NONE, GPIO_PIN_2); gpio_mode_set(GPIOG, GPIO_MODE_INPUT, GPIO_PUPD_NONE, GPIO_PIN_0); gpio_mode_set(GPIOF, GPIO_MODE_INPUT, GPIO_PUPD_NONE, GPIO_PIN_11); gpio_mode_set(GPIOE, GPIO_MODE_INPUT, GPIO_PUPD_NONE, GPIO_PIN_11); gpio_mode_set(GPIOF, GPIO_MODE_INPUT, GPIO_PUPD_NONE, GPIO_PIN_12); gpio_mode_set(GPIOE, GPIO_MODE_INPUT, GPIO_PUPD_NONE, GPIO_PIN_15); gpio_mode_set(GPIOF, GPIO_MODE_INPUT, GPIO_PUPD_NONE, GPIO_PIN_13); gpio_mode_set(GPIOG, GPIO_MODE_INPUT, GPIO_PUPD_NONE, GPIO_PIN_1); gpio_mode_set(GPIOB, GPIO_MODE_INPUT, GPIO_PUPD_NONE, GPIO_PIN_10); /* 连接确认开关量输入检测 PF10 30 DI CHECKOUTA1|A枪链接确认开关量输入检测 PF9 29 DI CHECKOUTA2|A枪链接确认开关量输入检测 PD3 146 DI CHECKOUTB1|B枪链接确认开关量输入检测 PA15 139 DI CHECKOUTB2|B枪链接确认开关量输入检测 */ /* configure pin as input */ gpio_mode_set(GPIOF, GPIO_MODE_INPUT, GPIO_PUPD_NONE, GPIO_PIN_9 | GPIO_PIN_10); gpio_mode_set(GPIOD, GPIO_MODE_INPUT, GPIO_PUPD_NONE, GPIO_PIN_3); gpio_mode_set(GPIOA, GPIO_MODE_INPUT, GPIO_PUPD_NONE, GPIO_PIN_15); } //温度采集通道选择控制 void v_temp_config(void) { //开启GPIO时钟 rcu_periph_clock_enable(RCU_GPIOD); rcu_periph_clock_enable(RCU_GPIOJ); //数字地址“A”配置 gpio_mode_set(GPIOD, GPIO_MODE_OUTPUT, GPIO_PUPD_NONE, GPIO_PIN_10); //数字地址“B”配置 gpio_mode_set(GPIOD, GPIO_MODE_OUTPUT, GPIO_PUPD_NONE, GPIO_PIN_13); //数字地址“C”配置 gpio_mode_set(GPIOJ, GPIO_MODE_OUTPUT, GPIO_PUPD_NONE, GPIO_PIN_8); } void v_4g_config() { //开启GPIO时钟 rcu_periph_clock_enable(RCU_GPIOF); rcu_periph_clock_enable(RCU_GPIOC); //4G模块RTS配置 gpio_mode_set(GPIOF, GPIO_MODE_OUTPUT, GPIO_PUPD_NONE, GPIO_PIN_3); //4G模块电源控制 gpio_mode_set(GPIOC, GPIO_MODE_OUTPUT, GPIO_PUPD_NONE, GPIO_PIN_13); }