From daa1ff614ec163daa1d80360b5f37af3d9ac8c8d Mon Sep 17 00:00:00 2001
From: niepingyu <1401798620@qq.com>
Date: Mon, 15 Dec 2025 13:37:16 +0800
Subject: [PATCH 1/3] add HAKRCH743 target
---
src/main/target/HAKRCH743/CMakeLists.txt | 1 +
src/main/target/HAKRCH743/config.c | 28 ++++
src/main/target/HAKRCH743/target.c | 51 +++++++
src/main/target/HAKRCH743/target.h | 178 +++++++++++++++++++++++
4 files changed, 258 insertions(+)
create mode 100644 src/main/target/HAKRCH743/CMakeLists.txt
create mode 100644 src/main/target/HAKRCH743/config.c
create mode 100644 src/main/target/HAKRCH743/target.c
create mode 100644 src/main/target/HAKRCH743/target.h
diff --git a/src/main/target/HAKRCH743/CMakeLists.txt b/src/main/target/HAKRCH743/CMakeLists.txt
new file mode 100644
index 00000000000..eb70a0acdca
--- /dev/null
+++ b/src/main/target/HAKRCH743/CMakeLists.txt
@@ -0,0 +1 @@
+target_stm32h743xi(HAKRCH743)
diff --git a/src/main/target/HAKRCH743/config.c b/src/main/target/HAKRCH743/config.c
new file mode 100644
index 00000000000..b963bfbfa59
--- /dev/null
+++ b/src/main/target/HAKRCH743/config.c
@@ -0,0 +1,28 @@
+/*
+ * 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 "fc/fc_msp_box.h"
+#include "io/piniobox.h"
+
+void targetConfiguration(void)
+{
+ pinioBoxConfigMutable()->permanentId[0] = BOX_PERMANENT_ID_USER1;
+ pinioBoxConfigMutable()->permanentId[1] = BOX_PERMANENT_ID_USER2;
+}
diff --git a/src/main/target/HAKRCH743/target.c b/src/main/target/HAKRCH743/target.c
new file mode 100644
index 00000000000..05c1674f07b
--- /dev/null
+++ b/src/main/target/HAKRCH743/target.c
@@ -0,0 +1,51 @@
+/*
+ * 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/bus.h"
+#include "drivers/io.h"
+#include "drivers/pwm_mapping.h"
+#include "drivers/timer.h"
+#include "drivers/pinio.h"
+#include "drivers/sensor.h"
+
+BUSDEV_REGISTER_SPI_TAG(busdev_icm42688_0, DEVHW_ICM42605, ICM42688_0_SPI_BUS, ICM42688_0_CS_PIN, NONE, 0, DEVFLAGS_NONE, IMU_ICM42688_0_ALIGN);
+// BUSDEV_REGISTER_SPI_TAG(busdev_icm42688_1, DEVHW_ICM42605, ICM42688_1_SPI_BUS, ICM42688_1_CS_PIN, NONE, 1, DEVFLAGS_NONE, IMU_ICM42688_1_ALIGN);
+
+timerHardware_t timerHardware[] = {
+ DEF_TIM(TIM5, CH1, PA0, TIM_USE_OUTPUT_AUTO, 0, 0), // S1
+ DEF_TIM(TIM5, CH2, PA1, TIM_USE_OUTPUT_AUTO, 0, 1), // S2
+ DEF_TIM(TIM5, CH3, PA2, TIM_USE_OUTPUT_AUTO, 0, 2), // S3
+ DEF_TIM(TIM5, CH4, PA3, TIM_USE_OUTPUT_AUTO, 0, 3), // S4
+
+ DEF_TIM(TIM4, CH1, PD12, TIM_USE_OUTPUT_AUTO, 0, 4), // S5
+ DEF_TIM(TIM4, CH2, PD13, TIM_USE_OUTPUT_AUTO, 0, 5), // S6
+ DEF_TIM(TIM4, CH3, PD14, TIM_USE_OUTPUT_AUTO, 0, 0), // S7
+ DEF_TIM(TIM4, CH4, PD15, TIM_USE_OUTPUT_AUTO, 0, 0), // S8
+
+ DEF_TIM(TIM15, CH1, PE5, TIM_USE_OUTPUT_AUTO, 0, 0), // S9
+ DEF_TIM(TIM15, CH2, PE6, TIM_USE_OUTPUT_AUTO, 0, 0), // S10
+ DEF_TIM(TIM3, CH3, PB0, TIM_USE_OUTPUT_AUTO, 0, 0), // S11
+ DEF_TIM(TIM3, CH4, PB1, TIM_USE_OUTPUT_AUTO, 0, 0), // S12
+
+ DEF_TIM(TIM1, CH1, PA8, TIM_USE_LED, 0, 9), // LED_2812
+ DEF_TIM(TIM1, CH1, PE9, TIM_USE_BEEPER, 0, 0), // BEEPER
+};
+
+const int timerHardwareCount = sizeof(timerHardware) / sizeof(timerHardware[0]);
diff --git a/src/main/target/HAKRCH743/target.h b/src/main/target/HAKRCH743/target.h
new file mode 100644
index 00000000000..8f0d69159f6
--- /dev/null
+++ b/src/main/target/HAKRCH743/target.h
@@ -0,0 +1,178 @@
+/*
+ * 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 "HK743"
+#define USBD_PRODUCT_STRING "HAKRCH743"
+
+#define USE_TARGET_CONFIG
+
+/*** Indicators ***/
+#define LED0 PE3
+#define LED1 PE4
+#define BEEPER PE9
+#define BEEPER_INVERTED
+
+/*** SPI/I2C bus ***/
+#define USE_SPI
+#define USE_SPI_DEVICE_1
+#define SPI1_NSS1_PIN PC15
+#define SPI1_SCK_PIN PA5
+#define SPI1_MISO_PIN PA6
+#define SPI1_MOSI_PIN PD7
+
+#define USE_SPI_DEVICE_3
+#define SPI3_NSS_PIN PE2
+#define SPI3_SCK_PIN PB3
+#define SPI3_MISO_PIN PB4
+#define SPI3_MOSI_PIN PB5
+
+#define USE_SPI_DEVICE_4
+#define SPI4_NSS_PIN PC13
+#define SPI4_SCK_PIN PE12
+#define SPI4_MISO_PIN PE13
+#define SPI4_MOSI_PIN PE14
+
+#define USE_I2C
+#define USE_I2C_DEVICE_1
+#define I2C1_SCL PB6
+#define I2C1_SDA PB7
+
+#define USE_I2C_DEVICE_2
+#define I2C2_SCL PB10
+#define I2C2_SDA PB11
+
+/*** IMU sensors ***/
+
+#define USE_DUAL_GYRO
+#define USE_TARGET_IMU_HARDWARE_DESCRIPTORS
+#define USE_SPI
+#define USE_IMU_ICM42605
+
+// IMU0 ICM42688P/ICM42605
+#define ICM42688_0_CS_PIN PC15
+#define ICM42688_0_SPI_BUS BUS_SPI1
+#define IMU_ICM42688_0_ALIGN CW0_DEG
+
+
+// IMU1 ICM42688P/ICM42605
+#define ICM42688_1_CS_PIN PC13
+#define ICM42688_1_SPI_BUS BUS_SPI4
+#define IMU_ICM42688_1_ALIGN CW270_DEG
+
+
+/*** OSD ***/
+#define USE_MAX7456
+#define MAX7456_SPI_BUS BUS_SPI3
+#define MAX7456_CS_PIN PE2
+
+
+// *** PINIO ***
+#define USE_PINIO
+#define USE_PINIOBOX
+#define PINIO1_PIN PD10
+#define PINIO2_PIN PD11
+
+/*** Serial ports ***/
+#define USE_VCP
+
+#define USE_UART1
+#define UART1_RX_PIN PA10
+#define UART1_TX_PIN PA9
+
+#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 PB8
+#define UART4_TX_PIN PB9
+
+#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 // VCP, UART1, UART2, UART3, UART4, UART5, UART6, UART7, UART8
+#define DEFAULT_RX_TYPE RX_TYPE_SERIAL
+#define SERIALRX_PROVIDER SERIALRX_SBUS
+#define SERIALRX_UART SERIAL_PORT_USART7
+
+/*** BARO & MAG ***/
+#define USE_BARO
+#define BARO_I2C_BUS BUS_I2C1
+#define USE_BARO_BMP280
+#define USE_BARO_SPL06
+#define USE_BARO_DPS310
+
+#define USE_MAG
+#define MAG_I2C_BUS BUS_I2C2
+#define USE_MAG_ALL
+
+/*** 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 VBAT_ADC_CHANNEL ADC_CHN_1
+#define CURRENT_METER_ADC_CHANNEL ADC_CHN_2
+#define RSSI_ADC_CHANNEL ADC_CHN_3
+
+/*** LED STRIP ***/
+#define USE_LED_STRIP
+#define WS2811_PIN PA8
+
+// *************** SDIO SD BLACKBOX*******************
+#define USE_SDCARD
+#define USE_SDCARD_SDIO
+#define SDCARD_SDIO_DEVICE SDIODEV_1
+#define SDCARD_SDIO_4BIT
+#define ENABLE_BLACKBOX_LOGGING_ON_SDCARD_BY_DEFAULT
+
+
+#define DEFAULT_FEATURES (FEATURE_OSD | FEATURE_TELEMETRY | FEATURE_CURRENT_METER | FEATURE_VBAT | FEATURE_TX_PROF_SEL | FEATURE_BLACKBOX)
+
+/*** Timer/PWM output ***/
+#define USE_SERIAL_4WAY_BLHELI_INTERFACE
+#define MAX_PWM_OUTPUT_PORTS 12
+#define USE_DSHOT
+#define USE_ESC_SENSOR
+
+/*** Used pins ***/
+#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
\ No newline at end of file
From aba749b2f4e6987bcd7f5a3e406fbb93467c5038 Mon Sep 17 00:00:00 2001
From: HAKRC8899 <18948734563@163.com>
Date: Tue, 16 Dec 2025 08:32:24 +0800
Subject: [PATCH 2/3] Update src/main/target/HAKRCH743/target.c
Co-authored-by: qodo-code-review[bot] <151058649+qodo-code-review[bot]@users.noreply.github.com>
---
src/main/target/HAKRCH743/target.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/src/main/target/HAKRCH743/target.c b/src/main/target/HAKRCH743/target.c
index 05c1674f07b..c1a72d29fbc 100644
--- a/src/main/target/HAKRCH743/target.c
+++ b/src/main/target/HAKRCH743/target.c
@@ -26,7 +26,7 @@
#include "drivers/sensor.h"
BUSDEV_REGISTER_SPI_TAG(busdev_icm42688_0, DEVHW_ICM42605, ICM42688_0_SPI_BUS, ICM42688_0_CS_PIN, NONE, 0, DEVFLAGS_NONE, IMU_ICM42688_0_ALIGN);
-// BUSDEV_REGISTER_SPI_TAG(busdev_icm42688_1, DEVHW_ICM42605, ICM42688_1_SPI_BUS, ICM42688_1_CS_PIN, NONE, 1, DEVFLAGS_NONE, IMU_ICM42688_1_ALIGN);
+BUSDEV_REGISTER_SPI_TAG(busdev_icm42688_1, DEVHW_ICM42605, ICM42688_1_SPI_BUS, ICM42688_1_CS_PIN, NONE, 1, DEVFLAGS_NONE, IMU_ICM42688_1_ALIGN);
timerHardware_t timerHardware[] = {
DEF_TIM(TIM5, CH1, PA0, TIM_USE_OUTPUT_AUTO, 0, 0), // S1
From 77aac46f3513e0171bb3c955385e2102ec7d3538 Mon Sep 17 00:00:00 2001
From: HAKRC8899 <18948734563@163.com>
Date: Tue, 16 Dec 2025 10:18:20 +0800
Subject: [PATCH 3/3] Update target.c
---
src/main/target/HAKRCH743/target.c | 5 ++---
1 file changed, 2 insertions(+), 3 deletions(-)
diff --git a/src/main/target/HAKRCH743/target.c b/src/main/target/HAKRCH743/target.c
index c1a72d29fbc..047eeeebd70 100644
--- a/src/main/target/HAKRCH743/target.c
+++ b/src/main/target/HAKRCH743/target.c
@@ -36,8 +36,8 @@ timerHardware_t timerHardware[] = {
DEF_TIM(TIM4, CH1, PD12, TIM_USE_OUTPUT_AUTO, 0, 4), // S5
DEF_TIM(TIM4, CH2, PD13, TIM_USE_OUTPUT_AUTO, 0, 5), // S6
- DEF_TIM(TIM4, CH3, PD14, TIM_USE_OUTPUT_AUTO, 0, 0), // S7
- DEF_TIM(TIM4, CH4, PD15, TIM_USE_OUTPUT_AUTO, 0, 0), // S8
+ DEF_TIM(TIM4, CH3, PD14, TIM_USE_OUTPUT_AUTO, 0, 6), // S7
+ DEF_TIM(TIM4, CH4, PD15, TIM_USE_OUTPUT_AUTO, 0, 7), // S8
DEF_TIM(TIM15, CH1, PE5, TIM_USE_OUTPUT_AUTO, 0, 0), // S9
DEF_TIM(TIM15, CH2, PE6, TIM_USE_OUTPUT_AUTO, 0, 0), // S10
@@ -45,7 +45,6 @@ timerHardware_t timerHardware[] = {
DEF_TIM(TIM3, CH4, PB1, TIM_USE_OUTPUT_AUTO, 0, 0), // S12
DEF_TIM(TIM1, CH1, PA8, TIM_USE_LED, 0, 9), // LED_2812
- DEF_TIM(TIM1, CH1, PE9, TIM_USE_BEEPER, 0, 0), // BEEPER
};
const int timerHardwareCount = sizeof(timerHardware) / sizeof(timerHardware[0]);