Skip to content

Add AXISFLYINGH743PRO target#11693

Merged
sensei-hacker merged 5 commits into
iNavFlight:release/9.1from
sensei-hacker:feature-axisflyingh743pro-target
Jul 7, 2026
Merged

Add AXISFLYINGH743PRO target#11693
sensei-hacker merged 5 commits into
iNavFlight:release/9.1from
sensei-hacker:feature-axisflyingh743pro-target

Conversation

@sensei-hacker

Copy link
Copy Markdown
Member

Summary

Adds a new INAV target for the AxisFlying H743 PRO flight controller, based on the manufacturer's public unified-target configuration.

  • STM32H743 MCU
  • Dual ICM42688P gyro/acc, each registered via the shared USE_IMU_ICM42605 driver (WHO_AM_I detection covers ICM42605/ICM42686P/ICM42688P), tagged 0/1 on separate SPI buses (SPI1 CW0_DEG, SPI4 CW90_DEG)
  • Hardware CLKIN sync pins (one per gyro) wired as plain timer outputs — no INAV driver actually consumes CLKIN, this matches existing precedent (DAKEFPVH743PRO/DAKEFPVH743_SLIM)
  • DPS310 baro, MAX7456 OSD, PY25Q128HA flash (already supported by the existing M25P16 driver)
  • 8 motors, 4 servos, 2 PINIO pins

Changes

  • New src/main/target/AXISFLYINGH743PRO/ directory: target.h, target.c, config.c, CMakeLists.txt
  • TIM4_CH4 (servo 4) requires USE_DSHOT_DMAR — an H7 DMAMUX quirk where that channel otherwise has no DMA request line
  • Motor/servo DMA options deliberately skip option 8 (DMA2 Stream0), which is hardwired to ADC1 (also used here for VBAT/current sensing)
  • UART5 is RX-only (ESC telemetry); its TX pin is wired to PC12 (otherwise unused on this board), since the H7 UART5 driver requires a real AF-valid TX pin even when unused — worth double-checking against the schematic that PC12 is genuinely not connected to anything, since that can't be confirmed from firmware source alone

Testing

  • Hardware target build succeeds cleanly: FLASH 35.24% (646,603 / 1792 KB), RAM 22.45% (117,696 / 512 KB), no warnings
  • Not flight-tested — no physical unit available to the author

STM32H743 board with dual ICM42688P gyros (each registered via the shared
USE_IMU_ICM42605 driver, tagged 0/1 on separate SPI buses with CLKIN sync
pins wired as plain timer outputs -- no driver actually consumes CLKIN),
DPS310 baro, MAX7456 OSD, PY25Q128HA flash, 8 motors, 4 servos, and 2
PINIO pins.

TIM4 CH4 (servo 4) requires USE_DSHOT_DMAR, a known H7 DMAMUX quirk where
that channel has no DMA request line otherwise. Motor/servo DMA options
deliberately skip option 8 (DMA2 Stream0) since it's hardwired to ADC1,
which this board also uses for VBAT/current sensing. UART5 is RX-only
(ESC telemetry); its TX pin is wired to PC12, an otherwise-unused pin,
since the H7 UART5 driver requires a real AF-valid TX pin to be defined
even when unused.
@sensei-hacker sensei-hacker added this to the 9.1 milestone Jul 7, 2026
@sensei-hacker sensei-hacker added Testing Required New target This PR adds a new target hardware needed Blocked by lack of hardware to reproduce issue labels Jul 7, 2026
@qodo-code-review

Copy link
Copy Markdown
Contributor

Qodo reviews are paused for this user.

Troubleshooting steps vary by plan Learn more →

On a Teams plan?
Reviews resume once this user has a paid seat and their Git account is linked in Qodo.
Link Git account →

Using GitHub Enterprise Server, GitLab Self-Managed, or Bitbucket Data Center?
These require an Enterprise plan - Contact us
Contact us →

@sensei-hacker

sensei-hacker commented Jul 7, 2026

Copy link
Copy Markdown
Member Author

Hardware bring-up checklist

For use once physical units are available for testing:

  • Samples received
  • Flash firmware
  • Calibrate
  • Orientation matches
  • Gyro
  • Accel working
  • Baro working
  • Blackbox
  • UART1
  • UART2
  • UART3
  • UART4
  • UART5
  • UART7
  • UART8
  • Buzzer working
  • DShot support on m1-8
  • Additional motor / servo outputs (S1-S4)
  • Voltage sensor
  • Current sensor
  • I2C Bus (I2C1, I2C2)
  • Video Out working
  • OSD working
  • LEDs working
  • PINIO1
  • PINIO2

@github-actions

github-actions Bot commented Jul 7, 2026

Copy link
Copy Markdown

Test firmware build ready — commit 27a7bb7

Download firmware for PR #11693

243 targets built. Find your board's .hex file by name on that page (e.g. MATEKF405SE.hex). Files are individually downloadable — no GitHub login required.

Development build for testing only. Use Full Chip Erase when flashing.

@Maxxiimme

Copy link
Copy Markdown

Tested on real hardware (Axisflying H743 Pro) successfully!

I have compiled and tested this target configuration on a live build with a receiver bound and active. Everything is functional, including the video subsystem, but I found a small logic inversion for the camera switcher.

Checklist & Test Results:

  • Voltage sensor: Voltage is accurately read (23.51V for a 6S battery) via ADC1.
  • UART8: Works perfectly with GPS (UBLOX10 protocol detected and active on USART8).
  • Buzzer working: Verified and operational on PC13.
  • Dual Gyro / ACC: Successfully detected as ICM42605. The 3D model orientation is perfectly aligned with CW0_DEG for Gyro 1 and CW90_DEG for Gyro 2.
  • Barometer & Magnetometer: DPS310 and external IST8310 are both active (OK) on the I2C buses.
  • DSHOT & DMAMUX: Quadcopter motor configuration (M1-M4) is verified and operational. The USE_DSHOT_DMAR implementation perfectly handles the TIM4 constraints.

PINIO1 & PINIO2 (Video & Camera Switcher) behavior:

  • PINIO1 (VTX Power on PE2 / USER1) works perfectly to power on/off the VTX.
  • PINIO2 (Camera Switcher on PA8 / USER2) is currently set to PINIO_FLAGS_INVERTED in target.h. With this flag active, the camera feed is black on boot. Activating both USER1 and USER2 simultaneously restores both the OSD and the camera video feed.

Proof (CLI status output):

INAV/AXISFLYINGH743PRO 9.1.0 Jul  7 2026 / 00:43:35 (acd72582) 
GCC-13.2.1 20231009
System Uptime: 147 seconds
Current Time: 2041-06-28T01:04:00.000+00:00
Voltage: 23.51V (6S battery - OK)
CPU Clock=480MHz, GYRO=ICM42605, ACC=ICM42605, BARO=DPS310, MAG=IST8310, PITOT=VIRTUAL
STM32 system clocks:
  SYSCLK = 480 MHz
  HCLK   = 240 MHz
  PCLK1  = 120 MHz
  PCLK2  = 120 MHz
Sensor status: GYRO=OK, ACC=OK, MAG=OK, BARO=OK, RANGEFINDER=NONE, OPFLOW=NONE, PITOT=OK, GPS=OK
ESC Temperature(s): Motor Count = 4
ESC 0: 0°C, ESC 1: 0°C, ESC 2: 0°C, ESC 3: 0°C, 
Stack size: 6144, Stack address: 0x20020000, Heap available: 1916
I2C Errors: 55, config size: 13523, max available config: 131072
ADC channel usage:
   BATTERY : configured = ADC 1, used = ADC 1
      RSSI : configured = none, used = none
   CURRENT : configured = ADC 2, used = ADC 2
  AIRSPEED : configured = none, used = none
System load: 2, cycle time: 504, PID rate: 1984, RX rate: 250, System rate: 10
Arming disabled flags: CLI
OSD: MAX7456 [30 x 16]
VTX: band: A, chan: 2, power: 1 (25 mW), freq: 5845 MHz
GPS: HW Version: UBLOX10 Proto: 34.09 Baud: 115200
  SATS: 0

@sensei-hacker

sensei-hacker commented Jul 7, 2026

Copy link
Copy Markdown
Member Author

Wow you're getting different and better results than I am. Thanks!

With this flag active, the camera feed is black on boot. Activating both USER1 and USER2 simultaneously restores both the OSD

Is your camera connected to C1 or C2, please?

@Maxxiimme

Copy link
Copy Markdown

Is your camera connected to C1 or C2, please?

Connect to C1

@sensei-hacker

Copy link
Copy Markdown
Member Author

@Maxxiimme could you perhaps share your diff or dump that is working for you?

@Maxxiimme

Copy link
Copy Markdown

Here is the diff all from my working configuration:


diff all

# version
# INAV/AXISFLYINGH743PRO 9.1.0 Jul  7 2026 / 00:43:35 (acd72582) 
# GCC-13.2.1 20231009

# start the command batch
batch start

# reset configuration to default settings
defaults noreboot

# resources

# Timer overrides

# Outputs [servo]

# safehome

# Fixed Wing Approach

# geozone

# geozone vertices

# features
feature VBAT
feature GPS
feature TELEMETRY
feature CURRENT_METER
feature PWM_OUTPUT_ENABLE
feature OSD

# beeper

# blackbox
blackbox -NAV_ACC
blackbox NAV_POS
blackbox NAV_PID
blackbox MAG
blackbox ACC
blackbox ATTI
blackbox RC_DATA
blackbox RC_COMMAND
blackbox MOTORS
blackbox -GYRO_RAW
blackbox -PEAKS_R
blackbox -PEAKS_P
blackbox -PEAKS_Y
blackbox SERVOS

# Receiver: Channel map

# Ports
serial 0 2048 115200 115200 0 115200

# LEDs

# LED color

# LED mode_color

# Modes [aux]
aux 0 0 0 1700 2100
aux 1 11 2 1300 2100
aux 2 10 3 1700 2100
aux 3 28 2 1700 2100
aux 4 3 2 1300 1700
aux 5 13 4 1700 2100
aux 6 47 0 900 2100
aux 7 48 0 900 2100

# Adjustments [adjrange]

# Receiver rxrange

# temp_sensor

# Mission Control Waypoints [wp]
#wp 0 invalid

# OSD [osd_layout]

# Programming: logic

# Programming: global variables

# Programming: PID controllers

# OSD: custom elements

# master
set gyro_main_lpf_hz = 110
set gyro_dyn_lpf_min_hz = 85
set gyro_dyn_lpf_max_hz = 300
set gyro_dyn_lpf_curve_expo = 3
set dynamic_gyro_notch_q = 250
set dynamic_gyro_notch_min_hz = 73
set dynamic_gyro_notch_mode = 3D
set setpoint_kalman_q = 200
set gyro_zero_x = -2
set gyro_zero_y = 1
set gyro_zero_z = 3
set ins_gravity_cmss =  986.781
set acc_hardware = ICM42605
set acczero_x = 1
set acczero_y = -1
set acczero_z = -16
set accgain_x = 4092
set accgain_y = 4092
set accgain_z = 4095
set align_mag = CW0
set mag_hardware = IST8310
set magzero_x = -1
set magzero_y = -1
set maggain_x = 700
set maggain_y = 218
set maggain_z = 1224
set baro_hardware = DPS310
set pitot_hardware = VIRTUAL
set blackbox_rate_denom = 2
set motor_pwm_protocol = DSHOT600
set failsafe_procedure = RTH
set failsafe_min_distance_procedure = RTH
set applied_defaults = 2
set airmode_type = THROTTLE_THRESHOLD
set nav_wp_radius = 1000
set nav_wp_max_safe_distance = 500
set vtx_channel = 5

# control_profile
control_profile 1

set mc_i_pitch = 90
set mc_d_pitch = 27
set mc_cd_pitch = 88
set mc_p_roll = 36
set mc_i_roll = 82
set mc_d_roll = 24
set mc_cd_roll = 80
set mc_p_yaw = 43
set mc_i_yaw = 84
set mc_cd_yaw = 90
set dterm_lpf_hz = 105
set d_boost_min =  1.000
set d_boost_max =  1.000
set antigravity_gain =  2.000
set antigravity_accelerator =  5.000
set smith_predictor_delay =  1.447
set tpa_rate = 20
set tpa_breakpoint = 1200
set rc_expo = 80
set rc_yaw_expo = 80
set roll_rate = 70
set pitch_rate = 70
set yaw_rate = 60
set ez_enabled = ON
set ez_response = 92
set ez_damping = 108
set ez_stability = 110
set ez_aggressiveness = 80
set ez_rate = 134
set ez_expo = 118

# control_profile
control_profile 2

set d_boost_min =  1.000
set d_boost_max =  1.000
set antigravity_gain =  2.000
set antigravity_accelerator =  5.000
set tpa_rate = 20
set tpa_breakpoint = 1200

# control_profile
control_profile 3

set d_boost_min =  1.000
set d_boost_max =  1.000
set antigravity_gain =  2.000
set antigravity_accelerator =  5.000
set tpa_rate = 20
set tpa_breakpoint = 1200

# mixer_profile
mixer_profile 1

set motor_direction_inverted = ON
set model_preview_type = 3
set motorstop_on_low = OFF

# Mixer: motor mixer

mmix reset

mmix 0  1.000 -1.000  1.000 -1.000
mmix 1  1.000 -1.000 -1.000  1.000
mmix 2  1.000  1.000  1.000  1.000
mmix 3  1.000  1.000 -1.000 -1.000

# Mixer: servo mixer

# mixer_profile
mixer_profile 2


# Mixer: motor mixer

# Mixer: servo mixer

# battery_profile
battery_profile 1


# battery_profile
battery_profile 2


# battery_profile
battery_profile 3


# restore original profile selection
control_profile 1
mixer_profile 1
battery_profile 3

# save configuration
save

# 

@sensei-hacker

Copy link
Copy Markdown
Member Author

I have un-inverted PINIO2, the camera switcher.

@sensei-hacker sensei-hacker removed Testing Required hardware needed Blocked by lack of hardware to reproduce issue labels Jul 7, 2026
@sensei-hacker sensei-hacker merged commit e519b69 into iNavFlight:release/9.1 Jul 7, 2026
7 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

New target This PR adds a new target

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants