From 07814f1df3a013aa8a9d910ecce267c0bb604c34 Mon Sep 17 00:00:00 2001
From: LiuYongNan <844550332@qq.com>
Date: Fri, 31 Jul 2026 15:41:23 +0800
Subject: [PATCH] Add target HUMMINGBIRD_FC305_H7
---
.../HUMMINGBIRD_FC305_H7/CMakeLists.txt | 1 +
src/main/target/HUMMINGBIRD_FC305_H7/config.c | 32 +++
src/main/target/HUMMINGBIRD_FC305_H7/target.c | 47 +++++
src/main/target/HUMMINGBIRD_FC305_H7/target.h | 199 ++++++++++++++++++
4 files changed, 279 insertions(+)
create mode 100644 src/main/target/HUMMINGBIRD_FC305_H7/CMakeLists.txt
create mode 100644 src/main/target/HUMMINGBIRD_FC305_H7/config.c
create mode 100644 src/main/target/HUMMINGBIRD_FC305_H7/target.c
create mode 100644 src/main/target/HUMMINGBIRD_FC305_H7/target.h
diff --git a/src/main/target/HUMMINGBIRD_FC305_H7/CMakeLists.txt b/src/main/target/HUMMINGBIRD_FC305_H7/CMakeLists.txt
new file mode 100644
index 00000000000..3a78c1c5256
--- /dev/null
+++ b/src/main/target/HUMMINGBIRD_FC305_H7/CMakeLists.txt
@@ -0,0 +1 @@
+target_stm32h743xi(HUMMINGBIRD_FC305_H7)
diff --git a/src/main/target/HUMMINGBIRD_FC305_H7/config.c b/src/main/target/HUMMINGBIRD_FC305_H7/config.c
new file mode 100644
index 00000000000..d66574e348c
--- /dev/null
+++ b/src/main/target/HUMMINGBIRD_FC305_H7/config.c
@@ -0,0 +1,32 @@
+/*
+ * This file is part of Cleanflight.
+ *
+ * Cleanflight is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * Cleanflight is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with Cleanflight. If not, see .
+ */
+
+#include
+#include "platform.h"
+
+#include "fc/config.h"
+
+#include "io/piniobox.h"
+
+
+void targetConfiguration(void)
+{
+ pinioBoxConfigMutable()->permanentId[0] = BOX_PERMANENT_ID_USER1;
+ pinioBoxConfigMutable()->permanentId[1] = BOX_PERMANENT_ID_USER2;
+ pinioBoxConfigMutable()->permanentId[2] = BOX_PERMANENT_ID_USER3;
+ beeperConfigMutable()->pwmMode = true;
+}
diff --git a/src/main/target/HUMMINGBIRD_FC305_H7/target.c b/src/main/target/HUMMINGBIRD_FC305_H7/target.c
new file mode 100644
index 00000000000..d41d7d1888a
--- /dev/null
+++ b/src/main/target/HUMMINGBIRD_FC305_H7/target.c
@@ -0,0 +1,47 @@
+/*
+ * This file is part of INAV.
+ *
+ * INAV is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * INAV is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with INAV. If not, see .
+ */
+
+#include
+
+#include
+
+#include "drivers/io.h"
+#include "drivers/pwm_mapping.h"
+#include "drivers/timer.h"
+
+timerHardware_t timerHardware[] = {
+ DEF_TIM(TIM5, CH4, PA3, TIM_USE_OUTPUT_AUTO, 0, 0), // Motor 1
+ DEF_TIM(TIM5, CH3, PA2, TIM_USE_OUTPUT_AUTO, 0, 1), // Motor 2
+ DEF_TIM(TIM5, CH2, PA1, TIM_USE_OUTPUT_AUTO, 0, 2), // Motor 3
+ DEF_TIM(TIM5, CH1, PA0, TIM_USE_OUTPUT_AUTO, 0, 3), // Motor 4
+ DEF_TIM(TIM4, CH1, PD12, TIM_USE_OUTPUT_AUTO, 0, 4), // Motor 5
+ DEF_TIM(TIM4, CH2, PD13, TIM_USE_OUTPUT_AUTO, 0, 5), // Motor 6
+ DEF_TIM(TIM4, CH3, PD14, TIM_USE_OUTPUT_AUTO, 0, 6), // Motor 7
+ DEF_TIM(TIM4, CH4, PD15, TIM_USE_OUTPUT_AUTO, 0, 7), // Motor 8
+
+ // TIM12 has no DMA request on STM32H743; these are PWM-only servo outputs.
+ DEF_TIM(TIM12, CH1, PB14, TIM_USE_OUTPUT_AUTO, 0, 0), // Servo 1
+ DEF_TIM(TIM12, CH2, PB15, TIM_USE_OUTPUT_AUTO, 0, 0), // Servo 2
+
+ DEF_TIM(TIM2, CH1, PA15, TIM_USE_BEEPER, 0, 0), // Beeper
+ DEF_TIM(TIM15, CH1, PE5, TIM_USE_LED, 0, 13), // LED strip
+
+ // INAV does not currently support the Betaflight GYRO CLKIN feature.
+ // DEF_TIM(TIM1, CH1, PE9, TIM_USE_ANY, 0, 0), // GYRO_CLKIN
+};
+
+const int timerHardwareCount = sizeof(timerHardware) / sizeof(timerHardware[0]);
diff --git a/src/main/target/HUMMINGBIRD_FC305_H7/target.h b/src/main/target/HUMMINGBIRD_FC305_H7/target.h
new file mode 100644
index 00000000000..62ec28ac5db
--- /dev/null
+++ b/src/main/target/HUMMINGBIRD_FC305_H7/target.h
@@ -0,0 +1,199 @@
+/*
+ * This file is part of INAV.
+ *
+ * INAV is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * INAV is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with INAV. If not, see .
+ */
+
+#pragma once
+
+#define TARGET_BOARD_IDENTIFIER "HBH7"
+#define USBD_PRODUCT_STRING "HUMMINGBIRD_FC305_H7"
+
+#define USE_TARGET_CONFIG
+
+// *************** LED, beeper ********************
+#define LED0 PE3
+#define LED1 PE4
+
+#define BEEPER PA15
+#define BEEPER_INVERTED
+#define BEEPER_PWM_FREQUENCY 5400
+
+// *************** SPI1 - ICM42688P ***************
+#define USE_SPI
+#define USE_SPI_DEVICE_1
+#define SPI1_SCK_PIN PA5
+#define SPI1_MISO_PIN PA6
+#define SPI1_MOSI_PIN PA7
+#define SPI1_NSS_PIN PA4
+
+// INAV's ICM42605 driver also detects the ICM42688P by WHO_AM_I.
+#define USE_IMU_ICM42605
+#define IMU_ICM42605_ALIGN CW0_DEG
+#define ICM42605_SPI_BUS BUS_SPI1
+#define ICM42605_CS_PIN SPI1_NSS_PIN
+#define ICM42605_EXTI_PIN PE10
+
+// INAV does not currently support the Betaflight GYRO CLKIN feature.
+// #define GYRO_CLKIN_PIN PE9 // TIM1_CH1
+
+// *************** SPI3 - spare configurable bus ***********
+#define USE_SPI_DEVICE_3
+#define SPI3_SCK_PIN PB3
+#define SPI3_MISO_PIN PB4
+#define SPI3_MOSI_PIN PB5
+#define SPI3_NSS_PIN PD10
+
+// *************** SPI4 - MAX7456 OSD *************
+#define USE_SPI_DEVICE_4
+#define SPI4_SCK_PIN PE12
+#define SPI4_MISO_PIN PE13
+#define SPI4_MOSI_PIN PE14
+#define SPI4_NSS_PIN PE11
+
+#define USE_OSD
+#define USE_MAX7456
+#define MAX7456_SPI_BUS BUS_SPI4
+#define MAX7456_CS_PIN SPI4_NSS_PIN
+
+// *************** I2C1 - external sensors ********
+#define USE_I2C
+#define USE_I2C_DEVICE_1
+#define I2C1_SCL PB8
+#define I2C1_SDA PB9
+
+#define USE_MAG
+#define MAG_I2C_BUS BUS_I2C1
+#define USE_MAG_ALL
+
+#define TEMPERATURE_I2C_BUS BUS_I2C1
+#define PITOT_I2C_BUS BUS_I2C1
+
+#define USE_RANGEFINDER
+#define USE_RANGEFINDER_MSP
+#define RANGEFINDER_I2C_BUS BUS_I2C1
+
+// *************** I2C2 - onboard barometer *******
+#define USE_I2C_DEVICE_2
+#define I2C2_SCL PB10
+#define I2C2_SDA PB11
+
+#define USE_BARO
+#define BARO_I2C_BUS BUS_I2C2
+#define USE_BARO_DPS310
+
+// *************** SDIO SD card *******************
+#define USE_SDCARD
+#define USE_SDCARD_SDIO
+#define USE_SDIO_PULLUP
+#define SDCARD_SDIO_DEVICE SDIODEV_1
+#define SDCARD_SDIO_4BIT
+#define ENABLE_BLACKBOX_LOGGING_ON_SDCARD_BY_DEFAULT
+
+// SDIODEV_1 uses the STM32H743 fixed AF12 pin mapping:
+// CK=PC12, CMD=PD2, D0=PC8, D1=PC9, D2=PC10, D3=PC11.
+
+// *************** UARTs **************************
+#define USE_VCP
+
+#define USE_UART1
+#define UART1_RX_PIN PB7
+#define UART1_TX_PIN PB6
+
+#define USE_UART2
+#define UART2_RX_PIN PD6
+#define UART2_TX_PIN PD5
+
+#define USE_UART3
+#define UART3_RX_PIN PD9
+#define UART3_TX_PIN PD8
+
+#define USE_UART4
+#define UART4_RX_PIN PD0
+#define UART4_TX_PIN PD1
+
+#define USE_UART5
+#define UART5_RX_PIN PB12
+#define UART5_TX_PIN PB13
+
+#define USE_UART6
+#define UART6_RX_PIN PC7
+#define UART6_TX_PIN PC6
+
+#define USE_UART7
+#define UART7_RX_PIN PE7
+#define UART7_TX_PIN PE8
+
+#define USE_UART8
+#define UART8_RX_PIN PE0
+#define UART8_TX_PIN PE1
+
+#define SERIAL_PORT_COUNT 9
+
+#define DEFAULT_RX_TYPE RX_TYPE_SERIAL
+#define SERIALRX_PROVIDER SERIALRX_CRSF
+#define SERIALRX_UART SERIAL_PORT_USART5
+
+#define USE_ESC_SENSOR
+
+// *************** ADC ****************************
+#define USE_ADC
+#define ADC_INSTANCE ADC1
+
+#define ADC_CHANNEL_1_PIN PC0
+#define ADC_CHANNEL_2_PIN PC1
+#define ADC_CHANNEL_3_PIN PC5
+#define ADC_CHANNEL_4_PIN PC4 // External ADC1 / airspeed
+
+// Secondary battery ADC pads are present but not enabled by default.
+// #define ADC_CHANNEL_5_PIN PB1 // VBAT2 (Betaflight ADC_VBAT2_PIN)
+// #define ADC_CHANNEL_6_PIN PB0 // CURR2 (Betaflight ADC_CURR2_PIN)
+
+#define VBAT_ADC_CHANNEL ADC_CHN_1
+#define CURRENT_METER_ADC_CHANNEL ADC_CHN_2
+#define RSSI_ADC_CHANNEL ADC_CHN_3
+#define AIRSPEED_ADC_CHANNEL ADC_CHN_4
+
+#define DEFAULT_VOLTAGE_METER_SOURCE VOLTAGE_METER_ADC
+#define DEFAULT_CURRENT_METER_SOURCE CURRENT_METER_ADC
+#define CURRENT_METER_SCALE 800
+
+// *************** PINIO **************************
+#define USE_PINIO
+#define USE_PINIOBOX
+#define PINIO1_PIN PC15 // 10V enable
+#define PINIO2_PIN PC14
+#define PINIO3_PIN PC13
+#define PINIO1_FLAGS PINIO_FLAGS_INVERTED
+#define PINIO2_FLAGS PINIO_FLAGS_INVERTED
+#define PINIO3_FLAGS PINIO_FLAGS_INVERTED
+
+// *************** LED strip **********************
+#define USE_LED_STRIP
+#define WS2811_PIN PE5
+
+// *************** Other features *****************
+#define DEFAULT_FEATURES (FEATURE_OSD | FEATURE_TELEMETRY | FEATURE_CURRENT_METER | FEATURE_VBAT | FEATURE_TX_PROF_SEL | FEATURE_BLACKBOX)
+
+#define USE_SERIAL_4WAY_BLHELI_INTERFACE
+#define USE_DSHOT
+#define USE_DSHOT_DMAR
+
+#define TARGET_IO_PORTA 0xffff
+#define TARGET_IO_PORTB 0xffff
+#define TARGET_IO_PORTC 0xffff
+#define TARGET_IO_PORTD 0xffff
+#define TARGET_IO_PORTE 0xffff
+
+#define MAX_PWM_OUTPUT_PORTS 10