Skip to content

Pr add board X-MAV-AP-H743v3 - #34117

Open
TompsonTan wants to merge 2 commits into
ArduPilot:masterfrom
TompsonTan:pr_ap-h743v3
Open

Pr add board X-MAV-AP-H743v3#34117
TompsonTan wants to merge 2 commits into
ArduPilot:masterfrom
TompsonTan:pr_ap-h743v3

Conversation

@TompsonTan

Copy link
Copy Markdown
Contributor

Dear Ardupilot Developer. We have developed a flight controller AP-H743v3, We will keep developing it and want to add our flight controller to supported hardware.

Best regard!
-->

@Hwurzburg Hwurzburg left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Preliminary

No purchase/where-to-buy link anywhere in the README or PR description (just a link to the vendor's homepage). Without one the board can't be added to the wiki — it's invisible to ArduPilot users. Please add a link to where the board can actually be bought.

README.md

UART Mapping — this needs to be a table (see readme_template.md), and it's missing DMA status entirely. Also, SERIAL2 -> UART4 is labeled (User) but nothing in hwdef.dat overrides DEFAULT_SERIAL2_PROTOCOL, so it actually boots as MAVLink2 — and your own pinout image labels this connector TEL2, so MAVLink2 looks like the intended behavior, not (User). Fix the label (or add the override in hwdef.dat if (User) was actually intended — see hwdef.dat note below).

| Serial# | Protocol        | Port    | Notes                        |
|---------|-----------------|---------|-------------------------------|
| SERIAL0 | MAVLink2        | USB     |                               |
| SERIAL1 | MAVLink2        | USART2  | DMA enabled                   |
| SERIAL2 | MAVLink2        | UART4   | DMA enabled                   |
| SERIAL3 | GPS             | USART1  | DMA enabled                   |
| SERIAL4 | None (User)     | USART6  | DMA enabled                   |
| SERIAL5 | None (User)     | UART8   | DMA enabled                   |
| SERIAL6 | MSP DisplayPort | USART3  | DMA enabled                   |
| SERIAL7 | RCIN            | UART5   | DMA enabled                   |
| SERIAL8 | ESC Telemetry   | UART7   | RX7 only, on ESC connector    |

VTX Support — "Pin 1 of the connector is 9v" is wrong for this board; your own images and features list (12V 2A BEC) show the DJI connector's power pin is 12V, not 9V (looks copy-pasted from the v2 README, which really does have a 9V BEC). Also double check it's actually pin 1 — the pinout image shows the power pin as the last pin in the SH1.0-6P row (SBUS, GND, RX3, TX3, GND, 12V), not the first.

The SH1.0-6P connector supports a DJI Air Unit / HD VTX connection. Protocol defaults to DisplayPort. The last pin of the connector is 12v so be careful not to connect this to a peripheral requiring 5v.

Two more connectors shown in the pinout/wiring images aren't documented anywhere: the FPV Camera pad (12V/GND/VIDEO-IN, feeding the onboard AT7456E OSD) and the separate VTX(Analog) pad (12V/GND/VIDEO-OUT). Both are fixed to the 12V rail with no relay/GPIO control, which is fine, but please add them to the OSD/VTX sections so users know they exist and what voltage feeds them. Also note that simultaneous HD VTX OSD and analog OSD operation are enabled by default (via OSD_TYPE2 5 in defaults.parm).

Battery Monitoring — this is an analog monitor (BATT_MONITOR 4), so add a note that BATT_VOLT_MULT/BATT_AMP_PERVLT need adjusting to match whatever external current sensor is actually attached (the current sensor is off-board, on the ESC connector, so the shipped scale is only a starting point).

Compass — use the standard wording for a built-in compass:

The AP-H743v3 has a built-in compass (QMC5883P). Due to potential interference, the autopilot is usually used with an external I2C compass as part of a GPS/Compass combination, using the SDA and SCL connector.

Loading Firmware — dfu-util (a common "favorite DFU tool") can't flash a .hex file — it has no Intel-HEX parser, so -D X-MAV-AP-H743v3_with_bl.hex would write the literal ASCII text to 0x08000000 and the board won't boot. Point at the .bin bootloader instead, and add the firmware-server pointer:

Firmware for the AP-H743v3 is available from the [ArduPilot Firmware Server](https://firmware.ardupilot.org) under the `X-MAV-AP-H743v3` target.

To load ArduPilot firmware, hold boot button or pad low while powering up the board. Then use the STM32CubeProgrammer app or other DFU utility to load the "X-MAV-AP-H743v3_bl.bin" file. Subsequently, a GCS can update firmware using the *.apj files.

hwdef.dat

SERIAL2 (UART4/TEL2 connector) has no DEFAULT_SERIAL2_PROTOCOL override, so it defaults to MAVLink2 per AP_SerialManager. If a general-purpose "User" UART was actually intended here (matching TEL3/TEL4's pattern), add:

define DEFAULT_SERIAL2_PROTOCOL SerialProtocol_None

Otherwise, if MAVLink2 on the TEL2 connector was the intent, just fix the README label instead (see above).

The board needs DFU for the initial firmware load (implying it doesn't ship with ArduPilot preinstalled) and uses a standard 4-in-1 ESC motor connector — consider adding the Betaflight motor-order default so users migrating from Betaflight don't need to rewire their ESCs:

# Motor order implies Betaflight/X for standard ESCs
define HAL_FRAME_TYPE_DEFAULT 12

Re-request my review when these changes are made.

@TompsonTan

Copy link
Copy Markdown
Contributor Author

@Hwurzburg Thank you for your thorough review. All requested changes have been addressed:

  • Added purchase link to Taobao store (available in September 2026).
  • Corrected UART mapping table with DMA status.
  • Fixed SERIAL2 label to MAVLink2 to match hwdef.dat (no override).
  • Corrected VTX voltage to 12V and clarified pinout order (left to right, 12V on rightmost).
  • Added documentation for FPV Camera and Analog VTX connectors in OSD section.
  • Added note about battery monitor multipliers needing adjustment for external sensor.
  • Reworded compass description using standard phrasing.
  • Updated firmware loading instructions to use .bin (not .hex) and recommended STM32CubeProgrammer.

Regarding the Betaflight motor order default: we have decided not to add it, as we do not specifically target Betaflight migration users. Our users are expected to use the standard ArduPilot motor order and can adjust parameters if needed.

Please re-review when you have time. Thanks!

@TompsonTan

Copy link
Copy Markdown
Contributor Author

@andyp1per Hi, just a polite follow-up – could you please take a look at this PR for technical review when you get a chance? We have updated the documentation based on the previous suggestions. Thank you!

@andyp1per

Copy link
Copy Markdown
Contributor

Automated hwdef review (/hwdef-check)

PR 34117 · base upstream/master · new board X-MAV-AP-H743v3

Build

  • ./waf configure --board X-MAV-AP-H743v3: pass
  • Board ID AP_HW_X-MAV-AP-H743V3 1220 already in master, so the missing AP_Bootloader: commit is expected here. No DMA-starved peripherals; all 8 UARTs get DMA, matching the README's "DMA enabled" column.

Must-fix

  • Tools/bootloaders/X-MAV-AP-H743v3_bl.hex is missing. build_bootloaders.py emits it alongside the .bin and every recent board addition commits both. It belongs in the bootloaders: commit. (The README's advice to flash the .bin rather than the .hex is fine and unrelated - the hex still has to be in-tree.)
  • README has no CAN section. hwdef defines CAN1 (PD0/PD1) and CAN2 (PB5/PB6) and the bottom-port image shows two dedicated CAN connectors, but the docs only say "2 CAN" in the feature list.

Should-fix

  • hwdef.dat:14-15 - drop STM32_ST_USE_TIMER 12 and define CH_CFG_ST_RESOLUTION 16. The H7 default is TIM5 (hwdef/common/stm32h7_mcuconf.h:644) and this board only uses TIM1/TIM2/TIM3 for PWM, so TIM5 is free. Removing them gets the 32-bit tick back and clears the mismatch with hwdef-bl.dat, which leaves the default. Looks copied from X-MAV-AP-H743r1, which doesn't need it either.
  • hwdef.dat:165 - AP_COMPASS_QMC5883P_INTERNAL_BUS_PROBING_ENABLED is dead. Nothing outside the two X-MAV hwdefs reads it. The generic internal QMC5883P probe is gated on AP_COMPASS_INTERNAL_BUS_PROBING_ENABLED and only runs when all_external is set (AP_Compass.cpp:1170), so your explicit COMPASS QMC5883P I2C:ALL_INTERNAL line and its rotation are already honoured. Delete the line rather than renaming it.
  • hwdef.dat:151 - define AP_BARO_SPL06_ENABLED 1 is redundant; the BARO SPL06 line already generates it (build/X-MAV-AP-H743v3/hwdef.h:287).
  • IMU sampling: HAL_DEFAULT_INS_FAST_SAMPLE defaults to 1, which is instance 0 - the BMI088, which has no fast-sampling path. So nothing on this board fast-samples and the ICM45686 sits at the default rate. Set define HAL_DEFAULT_INS_FAST_SAMPLE 2. The ICM45686 is also a 20-bit hi-res part, so define HAL_INS_HIGHRES_SAMPLE 2 is available if you want it - declining is legitimate, it pins accel to 16G and gyro to 2000dps.
  • hwdef.dat:157 - 10*MHZ 10*MHZ for the ICM45686. Convention for ICM4xxxx on H7 is 2*MHZ 16*MHZ: 16MHz rounds to 24MHz on the H7 dividers (within the part's rating) and 2MHz is the safe probe clock. 10MHz for probing is high; H743r1 uses 2MHz. The BMI088 at 10/10 is fine on the high side but could use the same 2MHz probe clock.
  • Trailing whitespace on hwdef.dat:28 and hwdef.dat:95 - git diff --check flags both.

Notes

  • SERIAL_ORDER is not UART-numbered, but that is correct here and should not be "fixed": the board's own connector labels give both numbers ("UART2 / TEL1(PX4) / SERIAL1(AP)"), which is the Pixhawk-family convention, and the README table is consistent with it.
  • BIDIR placement is right - one per channel pair on TIM1 (CH1+CH3), TIM3 (CH3), TIM2 (CH3) - and the README's group table matches.
  • I2C pull-ups: both bus pin lines are bare, which is correct if the board fits external resistors. Please confirm I2C1 (internal, baro) and I2C4 both have them - the .dat can't distinguish "external resistors fitted" from "no pull-ups anywhere", and a bus without them doesn't work. No HAL_I2C_INTERNAL_MASK needed; the default of 1 already marks I2C1 internal, which matches the layout.
  • README says "1 I2C" but the bottom-port image shows a dedicated I2C4 connector and the GPS1 connector also carries SDA/SCL. Worth saying "2 I2C connectors on one bus".
  • README:52 - SERIAL7_Protocol should be SERIAL7_PROTOCOL, and the sentence would read better as "configured on UART5 (SERIAL7)".
  • SPI1_RX and SPI4_RX share DMA stream (2,7) with each other and with USART1/USART2/UART4 TX. That is normal for an H743 carrying 8 UARTs and 3 SPI buses, but both IMU read paths land on the same stream - worth confirming IMU sample rates hold up with telemetry and GPS running.

Generated by Claude via /hwdef-check. Not a substitute for a human review pass.

@andyp1per andyp1per left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

See comment

@TompsonTan

Copy link
Copy Markdown
Contributor Author

@andyp1per

Hi Andy,

Thank you for your thorough review and valuable suggestions. I have updated the PR with the following changes based on your feedback:

Removed STM32_ST_USE_TIMER 12 and define CH_CFG_ST_RESOLUTION 16 to restore the default H7 timer (TIM5) and 32‑bit system tick.

Removed redundant define AP_BARO_SPL06_ENABLED 1 (the BARO SPL06 line already defines it).

Removed obsolete AP_COMPASS_QMC5883P_INTERNAL_BUS_PROBING_ENABLED macro.

Adjusted ICM45686 SPI clock to 2*MHZ 16*MHZ for proper H7/ICM4xxxx operation.

Added define HAL_DEFAULT_INS_FAST_SAMPLE 2 to enable fast sampling on ICM45686 (instance 2).

Fixed trailing whitespace on lines 28 and 95.

Updated README.md: added a CAN bus section, corrected SERIAL7_PROTOCOL capitalization, and refined the I2C description.

The bootloader .hex file has also been included in the PR.

Could you please review the changes again when you have a moment?

Thanks again for your help!

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants