/*! \file gd32f307c_eval.h \brief definitions for GD32F307C_EVAL's leds, keys and COM ports hardware resources \version 2017-02-10, V1.0.0, firmware for GD32F30x \version 2018-10-10, V1.1.0, firmware for GD32F30x \version 2018-12-25, V2.0.0, firmware for GD32F30x \version 2020-09-30, V2.1.0, firmware for GD32F30x */ /* Copyright (c) 2020, 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. */ #ifndef GD32F303R_EVAL_H #define GD32F303R_EVAL_H #ifdef __cplusplus extern "C" { #endif #ifdef EVAL_LOCAL #define EVAL_EXT #else #define EVAL_EXT extern #endif #include "gd32f30x.h" /* exported types */ typedef enum { LED0 = 0, LED1 = 1, LED2 = 2, LED3 = 3 } led_typedef_enum; typedef enum { KEY_WAKEUP = 0, KEY_TAMPER = 1, KEY_USER = 2, BT_LINK = 3 } key_typedef_enum; typedef enum { KEY_MODE_GPIO = 0, KEY_MODE_EXTI = 1 } keymode_typedef_enum; /* eval board low layer led */ #define LEDn 4U /* user led */ #define LED0_PIN GPIO_PIN_12 #define LED0_GPIO_PORT GPIOA #define LED0_GPIO_CLK RCU_GPIOA /* user BT-REST */ #define LED1_PIN GPIO_PIN_3 #define LED1_GPIO_PORT GPIOB #define LED1_GPIO_CLK RCU_GPIOB /* user BT-WAKEUP */ #define LED2_PIN GPIO_PIN_4 #define LED2_GPIO_PORT GPIOB #define LED2_GPIO_CLK RCU_GPIOB #define LED3_PIN GPIO_PIN_2 #define LED3_GPIO_PORT GPIOD #define LED3_GPIO_CLK RCU_GPIOD #define COMn 4U #define EVAL_COM0 USART0 #define EVAL_COM0_CLK RCU_USART0 #define EVAL_COM0_TX_PIN GPIO_PIN_9 #define EVAL_COM0_RX_PIN GPIO_PIN_10 #define EVAL_COM0_GPIO_PORT GPIOA #define EVAL_COM0_GPIO_CLK RCU_GPIOA #define EVAL_COM1 USART1 #define EVAL_COM1_CLK RCU_USART1 #define EVAL_COM1_TX_PIN GPIO_PIN_2 #define EVAL_COM1_RX_PIN GPIO_PIN_3 #define EVAL_COM1_GPIO_PORT GPIOA #define EVAL_COM1_GPIO_CLK RCU_GPIOA #define EVAL_COM2 USART2 #define EVAL_COM2_CLK RCU_USART2 #define EVAL_COM2_TX_PIN GPIO_PIN_8 #define EVAL_COM2_RX_PIN GPIO_PIN_9 #define EVAL_COM2_GPIO_PORT GPIOD #define EVAL_COM2_GPIO_CLK RCU_GPIOD #define EVAL_COM3 UART3 #define EVAL_COM3_CLK RCU_UART3 #define EVAL_COM3_TX_PIN GPIO_PIN_10 #define EVAL_COM3_RX_PIN GPIO_PIN_11 #define EVAL_COM3_GPIO_PORT GPIOC #define EVAL_COM3_GPIO_CLK RCU_GPIOC #define KEYn 4U /* wakeup push-button */ #define WAKEUP_KEY_PIN GPIO_PIN_0 #define WAKEUP_KEY_GPIO_PORT GPIOA #define WAKEUP_KEY_GPIO_CLK RCU_GPIOA #define WAKEUP_KEY_EXTI_LINE EXTI_0 #define WAKEUP_KEY_EXTI_PORT_SOURCE GPIO_PORT_SOURCE_GPIOA #define WAKEUP_KEY_EXTI_PIN_SOURCE GPIO_PIN_SOURCE_0 #define WAKEUP_KEY_EXTI_IRQn EXTI0_IRQn /* tamper push-button */ #define TAMPER_KEY_PIN GPIO_PIN_13 #define TAMPER_KEY_GPIO_PORT GPIOC #define TAMPER_KEY_GPIO_CLK RCU_GPIOC #define TAMPER_KEY_EXTI_LINE EXTI_13 #define TAMPER_KEY_EXTI_PORT_SOURCE GPIO_PORT_SOURCE_GPIOC #define TAMPER_KEY_EXTI_PIN_SOURCE GPIO_PIN_SOURCE_13 #define TAMPER_KEY_EXTI_IRQn EXTI10_15_IRQn /* user push-button */ #define USER_KEY_PIN GPIO_PIN_14 #define USER_KEY_GPIO_PORT GPIOB #define USER_KEY_GPIO_CLK RCU_GPIOB #define USER_KEY_EXTI_LINE EXTI_14 #define USER_KEY_EXTI_PORT_SOURCE GPIO_PORT_SOURCE_GPIOB #define USER_KEY_EXTI_PIN_SOURCE GPIO_PIN_SOURCE_14 #define USER_KEY_EXTI_IRQn EXTI10_15_IRQn /* user BT-LNK */ #define BT_LINK_PIN GPIO_PIN_2 #define BT_LINK_GPIO_PORT GPIOD #define BT_LINK_GPIO_CLK RCU_GPIOD #define BT_LINK_EXTI_LINE EXTI_2 #define BT_LINK_EXTI_PORT_SOURCE GPIO_PORT_SOURCE_GPIOD #define BT_LINK_EXTI_PIN_SOURCE GPIO_PIN_SOURCE_2 #define BT_LINK_EXTI_IRQn EXTI2_IRQn #define FILTER_BUFFER_MAX 10 #define FILTER_V_DC 0 #define FILTER_V_PV 1 #define FILTER_V_BAT 2 #define FILTER_T_BAT 3 #define FILTER_T_PCB 4 #define FILTER_I_BAT 5 #define FILTER_I_LOAD 6 #define FILTER_I_MOS 7 #define FILTER_MAX 8 typedef struct { uint8_t num; float buffer[FILTER_BUFFER_MAX]; }Filter; //???????? #define BUFFERSIZE 280 #define MOTBUFFERSIZE 10 typedef struct { unsigned char StarRx; // ????????? unsigned char Recevied; // ????????? unsigned short LastRxCnt; // ???????3ms?ж?????????? unsigned char RecevTime; // ????3ms??? unsigned short RxDataCnt; // ???????????? unsigned short TxDataCnt; // ????????? unsigned char TimeOutCnt; // ??????? unsigned char RxBuf[BUFFERSIZE]; // ??????????? unsigned char TxBuf[BUFFERSIZE]; // ??????????? }COMMU; typedef struct { unsigned short MotBuf[MOTBUFFERSIZE]; }MOTOR; typedef struct { COMMU COM1; // ????1 COMMU COM2; // ????2 COMMU COM3; // ????3 COMMU COM4; // ????4 COMMU COM5; // ????5 }MonitorDe; EVAL_EXT MonitorDe MonDe; EVAL_EXT MOTOR MOT[2]; EVAL_EXT uint8_t g_transfer_complete; EVAL_EXT uint8_t g_receiver_complete; EVAL_EXT uint16_t g_receiver_gap; typedef struct { unsigned short UseFlag; unsigned int WorkMode; /* Only valid if SystemStatus equal to 0*/ unsigned int PreWorkMode; /* Previous WorkMode */ unsigned int SystemStatus; /* 0-normal, 1-Flash wipe, 2-Update, 3-Update finish*/ float Target; unsigned short TargetQ; }WorkModeDef; typedef struct { unsigned int UpdateTimeOut; unsigned short PackNumber; unsigned char UpdateBuffer[300]; unsigned char PackNo[500]; }IAPUpdateSysDef; typedef struct { uint16_t DeviceEdition; uint16_t DeviceType; uint16_t Version1; uint16_t Version2; uint16_t ProtocolVersion; }FixedParaDef; typedef struct { unsigned ConfigParaWrite :1; unsigned TimeWrite :2; unsigned UpdatePackWrite :1; unsigned LoraParaWrite :1; }WriteFlagDef; typedef struct { uint16_t VoltageDC; //DC输入电压 uint16_t VoltagePV; //PV输入电压 uint16_t VoltageBat; //电池电压 uint16_t TempBattery; //电池温度 uint16_t TempOnboard; //板载温度 uint16_t CurrentCharge; //电池充电电流 uint16_t CurrentLoad; //负载电流 uint16_t errcode; }ChargeParamDef; typedef struct { /* Parameter area */ WorkModeDef WorkMode; IAPUpdateSysDef IAPUpdateSys; FixedParaDef FixePara; WriteFlagDef WriteFlag; ChargeParamDef ChargeParam; }GlobalVariableDef; // #define STATE_CHARGE_IDLE 0 //空闲 // #define STATE_CHARGE_ENABLE 1 //电池充电模式 // #define STATE_CHARGE_START 2 //开始充电 // #define STATE_CHARGE_HOLDING 3 //充电进行中 // #define STATE_CHARGE_SLOW 4 //接近充满,进入慢充 // #define STATE_CHARGE_RECHARGE 5 //再次充电准备中 // #define STATE_CHARGE_DISABLE 6 //电池充电挂起模式 /* function declarations */ /* configure led GPIO */ void gd_eval_led_init(led_typedef_enum lednum); /* turn on selected led */ void gd_eval_led_on(led_typedef_enum lednum); /* turn off selected led */ void gd_eval_led_off(led_typedef_enum lednum); /* toggle the selected led */ void gd_eval_led_toggle(led_typedef_enum lednum); /* configure key */ void gd_eval_key_init(key_typedef_enum key_num, keymode_typedef_enum key_mode); /* return the selected key state */ uint8_t gd_eval_key_state_get(key_typedef_enum key); /* configure COM port */ void gd_eval_com_init(uint32_t com); #ifdef __cplusplus } #endif #endif /* GD32F307C_EVAL_H */