Skip to content
Closed
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
110 changes: 110 additions & 0 deletions configs/STARTFPVG473/config.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,110 @@
/*
* This file is part of Betaflight.
*
* Betaflight is free software. You can redistribute this software
* and/or modify this software 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.
*
* Betaflight 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 this software.
*
* If not, see <http://www.gnu.org/licenses/>.
*/
/*it's test file*/

#pragma once

#define FC_TARGET_MCU STM32G47X
Copy link
Contributor

Choose a reason for hiding this comment

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

💡 Verification agent

🧩 Analysis chain

Confirm STM32G47X is a supported target macro

Please verify STM32G47X is recognized by Betaflight (timer/serial/DMA backends exist for G4xx). If not, builds will fail.

Run:


🏁 Script executed:

#!/bin/bash
set -euo pipefail
# Clone firmware to validate platform support
git clone --depth 1 https://github.com/betaflight/betaflight bf

echo "MCU macro presence:"
rg -n "STM32G47X" bf/src || true

echo "G4 platform files present:"
fd -t f "stm32g4" bf/src | sed 's|^|  |'

echo "Timer backend includes PC13?"
rg -n "PC13" bf/src/platform/STM32/timer_stm32g4xx.c || true

echo "UART pins supported (PC10/PC11 for UART4)?"
rg -n "PC10|PC11|UART4|USART3" bf/src/platform/STM32/serial_uart_stm32g4xx.c || true

echo "I2C1 SCL on PA15 supported?"
rg -n "PA15|I2C1" bf/src/platform/STM32/bus_i2c_stm32g4xx.c || true

Length of output: 2882


🏁 Script executed:

#!/bin/bash
set -euo pipefail
# Search for FC_TARGET_MCU usage in entire BF repository
echo "FC_TARGET_MCU occurrences:"
rg -nC3 "FC_TARGET_MCU" bf || true

# List board-specific config.h files to inspect how targets are named
echo "Board config.h files:"
fd -t f "config.h" bf/src | sed 's|^|  |'

Length of output: 1007


🏁 Script executed:

#!/bin/bash
set -euo pipefail
# Check supported G4 MCU macros in STM32G4.mk
grep -R "STM32G47" -n bf/src/platform/STM32/mk/STM32G4.mk || true

Length of output: 150


Use STM32G474xx as the target macro
Update FC_TARGET_MCU in configs/STARTFPVG473/config.h (line 25) from STM32G47X to STM32G474xx. Betaflight’s STM32G4.mk only defines STM32G474xxSTM32G47X isn’t recognized, so the build will fail.

🤖 Prompt for AI Agents
In configs/STARTFPVG473/config.h around line 25, the FC_TARGET_MCU macro is set
to STM32G47X which is not recognized by the build system; change the definition
to STM32G474xx so it matches Betaflight’s STM32G4.mk. Open
configs/STARTFPVG473/config.h, replace the current FC_TARGET_MCU value with
STM32G474xx, save the file, and re-run the build to confirm the issue is
resolved.


#define BOARD_NAME STARTFPVG473
#define MANUFACTURER_ID ST

#define USE_ACC
#define USE_GYRO
#define USE_ACC_SPI_ICM42688P
#define USE_GYRO_SPI_ICM42688P
#define USE_ACCGYRO_BMI270
#define USE_BARO
#define USE_BARO_BMP280
#define USE_BARO_DPS310
#define USE_FLASH
#define USE_FLASH_M25P16
#define USE_MAX7456

#define BEEPER_PIN PA8
#define MOTOR1_PIN PB0
#define MOTOR2_PIN PB1
#define MOTOR3_PIN PB6
#define MOTOR4_PIN PC13
#define LED_STRIP_PIN PB2
Comment on lines +42 to +47
Copy link
Contributor

Choose a reason for hiding this comment

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

💡 Verification agent

🧩 Analysis chain

Motor/LED/beeper pin sanity check

  • MOTOR4_PIN is PC13, which on STM32 typically lacks timer PWM capability and has low drive strength; not suitable for motors.
  • LED_STRIP_PIN PB2 requires a timer with DMA-capable channel; ensure TIMER_PIN_MAPPING provides a valid DMA channel for LED.

Please confirm the actual copper routing and intended timers for MOTOR4 and LED_STRIP. If MOTOR4 cannot stay on PC13, reassign to a valid timer pin before hardware freeze.


🏁 Script executed:

#!/bin/bash
# Locate timer mapping file
TIMER_FILE=$(fd timer_stm32f4xx.c | head -n1)
echo "Timer mapping file: $TIMER_FILE"

# Check for PC13 mapping (motor4)
echo "=== PC13 mappings ==="
rg -n "PC13" -C2 "$TIMER_FILE" || echo "No mapping for PC13 found"

# Check for PB2 mapping (LED strip)
echo "=== PB2 mappings ==="
rg -n "PB2" -C2 "$TIMER_FILE" || echo "No mapping for PB2 found"

# Show beginning of the STARTFPVG473 config
echo "=== STARTFPVG473/config.h (lines 1–100) ==="
sed -n '1,100p' configs/STARTFPVG473/config.h

# Look for timer pin mapping overrides in this config
echo "=== TIMER_PIN_MAPPING in STARTFPVG473/config.h ==="
rg -n "TIMER_PIN_MAPPING" -C2 configs/STARTFPVG473/config.h

Length of output: 4550


🏁 Script executed:

#!/bin/bash
# Locate the STM32G4 timer mapping file
TIMER_FILE=$(fd timer_stm32g4xx.c | head -n1)
echo "Timer mapping file: $TIMER_FILE"

# Show DEF_TIM entries for PC13 and PB2 in the STM32G4 mapping
echo "=== DEF_TIM entries for PC13 in $TIMER_FILE ==="
grep -R "DEF_TIM.*PC13" "$TIMER_FILE" || echo "No DEF_TIM for PC13 found"
echo "=== DEF_TIM entries for PB2 in $TIMER_FILE ==="
grep -R "DEF_TIM.*PB2" "$TIMER_FILE" || echo "No DEF_TIM for PB2 found"

# Show the pin-to-timer map (timerPinMap) section
echo "=== timerPinMap array in $TIMER_FILE ==="
grep -R "timerPinMap" -n "$TIMER_FILE" -A5 -B2 || echo "timerPinMap array not found"

# Locate the macro definition for TIMER_PIN_MAP across the repo
echo "=== TIMER_PIN_MAP macro definition in repo ==="
grep -R "#define TIMER_PIN_MAP" -n .

Length of output: 37631


🏁 Script executed:

#!/bin/bash
echo "Timer files in bf/src/platform/STM32:"
ls -1 bf/src/platform/STM32 | grep timer
echo "Searching DEF_TIM entries for PC13 in timer mapping files:"
grep -R "DEF_TIM.*PC13" bf/src/platform/STM32/timer*.c || echo "No mapping for PC13 found in any timer file"
echo "Searching DEF_TIM entries for PB2 in timer mapping files:"
grep -R "DEF_TIM.*PB2" bf/src/platform/STM32/timer*.c || echo "No mapping for PB2 found in any timer file"

Length of output: 1427


Fix invalid TIMER_PIN_MAPPING for MOTOR4 and LED_STRIP

  • MOTOR4_PIN PC13 isn’t on TIM3 – timer_stm32g4xx.c only defines PC13 for TIM1_CH1N and TIM8_CH4N, yet config uses TIMER_PIN_MAP(4, PC13, 2, 5) (offset 2 → TIM3, ch 1N). Remap to a valid TIM1 or TIM8 channel (e.g. TIMER_PIN_MAP(4, PC13, 0, 5) for TIM1_CH1N) or choose a pin with TIM3_CHx support.
  • LED_STRIP_PIN PB2 isn’t on TIM2_CH1 – timer_stm32g4xx.c only defines PB2 for TIM5_CH1 and TIM20_CH1, yet config uses TIMER_PIN_MAP(0, PB2, 1, 1) (offset 1 → TIM2, ch 1). Use TIMER_PIN_MAP(0, PB2, 3, 1) for TIM5_CH1 (with matching DMA_OPT) or the TIM20 entry.
🤖 Prompt for AI Agents
In configs/STARTFPVG473/config.h around lines 42–47, the TIMER_PIN_MAPPING
entries are invalid: PC13 (MOTOR4_PIN) is not mapped to TIM3 but to
TIM1_CH1N/TIM8_CH4N so change the TIMER_PIN_MAP for MOTOR4 to target TIM1 (use
offset 0 for TIM1_CH1N) or pick a pin actually on TIM3; PB2 (LED_STRIP_PIN) is
not TIM2_CH1 but TIM5_CH1/TIM20_CH1 so change the LED_STRIP TIMER_PIN_MAP to
target TIM5 (use offset 3 for TIM5_CH1) and update the DMA option to the
matching DMA_OPT for TIM5 (or pick the TIM20 mapping instead) to make the
pin/timer/channel combos valid.

#define UART1_TX_PIN PA9
#define UART2_TX_PIN PA2
#define UART3_TX_PIN PB10
#define UART4_TX_PIN PC10
#define UART1_RX_PIN PA10
#define UART2_RX_PIN PA3
#define UART3_RX_PIN PB11
#define UART4_RX_PIN PC11
#define I2C1_SCL_PIN PA15
#define I2C1_SDA_PIN PB7
#define LED0_PIN PC15
#define LED1_PIN PC14
#define SPI1_SCK_PIN PA5
#define SPI2_SCK_PIN PB13
#define SPI3_SCK_PIN PB3
#define SPI1_SDI_PIN PA6
#define SPI2_SDI_PIN PB14
#define SPI3_SDI_PIN PB4
#define SPI1_SDO_PIN PA7
#define SPI2_SDO_PIN PB15
#define SPI3_SDO_PIN PB5
#define ADC_VBAT_PIN PA0
#define ADC_CURR_PIN PA1
#define FLASH_CS_PIN PB9
#define MAX7456_SPI_CS_PIN PB12
#define GYRO_1_EXTI_PIN PC4
#define GYRO_1_CS_PIN PA4

#define TIMER_PIN_MAPPING \
TIMER_PIN_MAP( 0, PB2, 1, 1 ) \
TIMER_PIN_MAP( 1, PB0, 1, 2 ) \
TIMER_PIN_MAP( 2, PB1, 1, 3 ) \
TIMER_PIN_MAP( 3, PB6, 3, 4 ) \
TIMER_PIN_MAP( 4, PC13, 2, 5 )
Comment on lines +76 to +81
Copy link
Contributor

Choose a reason for hiding this comment

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

💡 Verification agent

🧩 Analysis chain

TIMER_PIN_MAPPING contains invalid entries

  • Channel “5” is invalid (timer channels are 1–4).
  • PC13 generally has no timer channel; mapping it will fail.
  • Numeric timer identifiers (1,2,3) must correspond to real TIMx instances with DMA support for DSHOT/LED.

Please correct the map using g4 backend references. As an example pattern (not a final proposal—use what your PCB supports):

#define TIMER_PIN_MAPPING \
    /* LED_STRIP: pick a DMA-capable timer channel */ \
    TIMER_PIN_MAP( 0, PB2,  3, 4 ) /* e.g., TIM3_CH4 for LED */ \
    /* Motors on real timer channels */ \
    TIMER_PIN_MAP( 1, PB0,  3, 3 ) /* TIM3_CH3 */ \
    TIMER_PIN_MAP( 2, PB1,  3, 4 ) /* TIM3_CH4 */ \
    TIMER_PIN_MAP( 3, PB6,  4, 1 ) /* TIM4_CH1 */ \
    /* Replace PC13 with a valid pin, e.g., PC6 TIM8_CH1 if routed */ \
    /* TIMER_PIN_MAP( 4, PC6, 8, 1 ) */

Use serial_uart_stm32g4xx.c and timer_stm32g4xx.c as the source of truth.


🏁 Script executed:

#!/bin/bash
# Locate the STARTFPVG473 board config header
fd STARTFPVG473/config.h

Length of output: 26


🏁 Script executed:

#!/bin/bash
# Find directory or files related to STARTFPVG473
fd -t f -I STARTFPVG473 || true

# Locate any headers mentioning STARTFPVG473
rg -l STARTFPVG473 -g '*.h' || true

# Check TIMER_PIN_MAPPING definitions across configs for similar patterns
rg -n "TIMER_PIN_MAPPING" -g 'configs/**' || true

Length of output: 35339


🏁 Script executed:

#!/bin/bash
sed -n '60,100p' configs/STARTFPVG473/config.h

Length of output: 1174


🏁 Script executed:

#!/bin/bash
# Show initial config including TIMER_PIN_MAPPING
sed -n '1,100p' configs/STARTFPVG473/config.h

# Locate the STM32 G4 timer implementation
fd src/platform/STM32/timer_stm32g4xx.c

# Display the timer pin definitions and mapping function
sed -n '1,200p' src/platform/STM32/timer_stm32g4xx.c

# Check for any mapping entries for PC13
grep -R "PC13" -n src/platform/STM32/timer_stm32g4xx.c || true

Length of output: 3024


🏁 Script executed:

#!/bin/bash
# List STM32 platform directories
fd -t d -I 'STM32*' src/platform

# Find any G4 timer implementation files
fd -t f -I 'timer_stm32g4*' .

Length of output: 208


🏁 Script executed:

#!/bin/bash
# View first 200 lines of the G4 timer implementation
sed -n '1,200p' bf/src/platform/STM32/timer_stm32g4xx.c
# List all DEF_TIM mappings
grep -R "DEF_TIM" -n bf/src/platform/STM32/timer_stm32g4xx.c
# Check for any PC13 entries
grep -R "PC13" -n bf/src/platform/STM32/timer_stm32g4xx.c || true

Length of output: 10841


Fix TIMER_PIN_MAPPING timer instances and pin support

  • PB2 (LED_STRIP_PIN) uses timer index 1 (TIM2) but PB2 only has TIM5 (index 4) or TIM20 (index 11) channels.
  • PB0/PB1 (MOTOR1_PIN/MOTOR2_PIN) are mapped to TIM2 (1) but these pins are on TIM3 (2) or complementary TIM8 (7) channels.
  • PC13 (MOTOR4_PIN) is assigned to TIM3 (2) but PC13 only supports TIM1_CH1N (0) or TIM8_CH4N (7) and isn’t valid for standard PWM—choose a different pin or timer.
  • The fourth parameter is the DMA option, not a timer channel; run dma pin <pin> <dma> or use timer map in CLI to determine the correct DMA_OPT for each entry.
🤖 Prompt for AI Agents
In configs/STARTFPVG473/config.h around lines 76–81, the TIMER_PIN_MAPPING
entries use incorrect timer indices and misuse the fourth field (it's DMA
option, not channel). Update PB2's timer index to a valid timer that actually
drives PB2 (e.g., TIM5 index 4 or TIM20 index 11) instead of 1; update PB0/PB1
to a timer that supports those pins (e.g., TIM3 index 2 or TIM8 index 7) rather
than 1; remove or replace PC13 mapping because PC13 does not support standard
PWM (pick a valid PWM-capable pin instead); and replace each fourth parameter
with the correct DMA_OPT value (obtain correct DMA options by running the CLI
commands `timer map` to verify timer↔pin mappings and `dma pin <pin> <dma>` or
`dma pin <pin> <dma>` help to determine the right DMA_OPT) so the entries use
the correct timer index and DMA option for each pin.


#define ADC1_DMA_OPT 6

#define SPI1_TX_DMA_OPT 14
#define SPI2_TX_DMA_OPT 10
#define SPI3_TX_DMA_OPT 9
#define SPI1_RX_DMA_OPT 13
#define SPI2_RX_DMA_OPT 11
#define SPI3_RX_DMA_OPT 8

#define VTX_SMARTAUDIO_UART SERIAL_PORT_USART2
#define SERIALRX_UART SERIAL_PORT_USART3

#define BARO_I2C_INSTANCE I2CDEV_1
#define MAG_I2C_INSTANCE I2CDEV_1
#define SERIALRX_PROVIDER SERIALRX_CRSF
#define DEFAULT_BLACKBOX_DEVICE BLACKBOX_DEVICE_FLASH
//TODO #define DSHOT_IDLE_VALUE 450
#define DEFAULT_DSHOT_BURST DSHOT_DMAR_OFF
#define DEFAULT_DSHOT_BITBANG DSHOT_BITBANG_ON
#define DEFAULT_CURRENT_METER_SOURCE CURRENT_METER_ADC
#define DEFAULT_VOLTAGE_METER_SOURCE VOLTAGE_METER_ADC
#define DEFAULT_CURRENT_METER_SCALE 750
#define BEEPER_INVERTED
#define SYSTEM_HSE_MHZ 8
#define MAX7456_SPI_INSTANCE SPI2
#define FLASH_SPI_INSTANCE SPI3
#define GYRO_1_SPI_INSTANCE SPI1
#define GYRO_1_ALIGN CW180_DEG