[board] support Holybro Kakute F7 (#2746)

This commit is contained in:
Gautier Hattenberger
2021-07-12 10:35:21 +02:00
committed by GitHub
parent bfee649fe9
commit 726c44682e
9 changed files with 3358 additions and 0 deletions
+280
View File
@@ -0,0 +1,280 @@
<!DOCTYPE airframe SYSTEM "../../airframe.dtd">
<airframe name="Kakute_F7">
<description>
Holybro Kakute F7 test board
</description>
<firmware name="rotorcraft">
<configure name="RTOS_DEBUG" value="0"/>
<configure name="PERIODIC_FREQUENCY" value="500"/>
<target name="ap" board="holybro_kakute_f7">
</target>
<target name="nps" board="pc">
<module name="fdm" type="jsbsim"/>
</target>
<module name="radio_control" type="sbus"/>
<module name="motor_mixing"/>
<module name="actuators" type="pwm">
<define name="SERVO_HZ" value="400"/>
</module>
<module name="telemetry" type="xbee_api"/>
<module name="imu" type="mpu6000">
<define name="IMU_MPU_CHAN_X" value="1"/>
<define name="IMU_MPU_CHAN_Y" value="0"/>
<define name="IMU_MPU_GYRO_RANGE" value="MPU60X0_GYRO_RANGE_1000"/>
<define name="IMU_MPU_ACCEL_RANGE" value="MPU60X0_ACCEL_RANGE_8G"/>
<configure name="IMU_MPU_SPI_DEV" value="spi4"/>
<configure name="IMU_MPU_SPI_SLAVE_IDX" value="SPI_SLAVE0"/>
</module>
<module name="gps" type="optitrack"/>
<configure name="USE_MAGNETOMETER" value="FALSE"/>
<module name="stabilization" type="int_quat"/>
<module name="ahrs" type="int_cmpl_quat"/>
<module name="ins"/>
<module name="air_data"/>
<module name="sys_mon"/>
</firmware>
<servos driver="Pwm">
<servo name="FL" no="4" min="1000" neutral="1200" max="2000"/>
<servo name="FR" no="2" min="1000" neutral="1200" max="2000"/>
<servo name="BR" no="1" min="1000" neutral="1200" max="2000"/>
<servo name="BL" no="3" min="1000" neutral="1200" max="2000"/>
</servos>
<commands>
<axis name="ROLL" failsafe_value="0"/>
<axis name="PITCH" failsafe_value="0"/>
<axis name="YAW" failsafe_value="0"/>
<axis name="THRUST" failsafe_value="0"/>
</commands>
<section name="MIXING" prefix="MOTOR_MIXING_">
<!-- front left (CW), front right (CCW), back right (CW), back left (CCW) -->
<define name="TYPE" value="QUAD_X"/>
</section>
<command_laws>
<call fun="motor_mixing_run(autopilot_get_motors_on(),FALSE,values)"/>
<set servo="FL" value="motor_mixing.commands[MOTOR_FRONT_LEFT]"/>
<set servo="FR" value="motor_mixing.commands[MOTOR_FRONT_RIGHT]"/>
<set servo="BR" value="motor_mixing.commands[MOTOR_BACK_RIGHT]"/>
<set servo="BL" value="motor_mixing.commands[MOTOR_BACK_LEFT]"/>
</command_laws>
<section name="IMU" prefix="IMU_">
<define name="GYRO_P_SIGN" value="-1"/>
<define name="GYRO_Q_SIGN" value="-1"/>
<define name="GYRO_R_SIGN" value="-1"/>
<define name="ACCEL_X_SIGN" value="-1"/>
<define name="ACCEL_Y_SIGN" value="-1"/>
<define name="ACCEL_Z_SIGN" value="-1"/>
<define name="ACCEL_X_NEUTRAL" value="-42"/>
<define name="ACCEL_Y_NEUTRAL" value="64"/>
<define name="ACCEL_Z_NEUTRAL" value="-155"/>
<define name="ACCEL_X_SENS" value="2.43600300517" integer="16"/>
<define name="ACCEL_Y_SENS" value="2.43442233815" integer="16"/>
<define name="ACCEL_Z_SENS" value="2.46007236396" integer="16"/>
<!-- MPU MAG -->
<define name="MAG_X_SIGN" value="1"/>
<define name="MAG_Y_SIGN" value="1"/>
<define name="MAG_Z_SIGN" value="-1"/>
<define name="MAG_X_NEUTRAL" value="-53"/>
<define name="MAG_Y_NEUTRAL" value="-17"/>
<define name="MAG_Z_NEUTRAL" value="-29"/>
<define name="MAG_X_SENS" value="14.1339051912" integer="16"/>
<define name="MAG_Y_SENS" value="15.9334896814" integer="16"/>
<define name="MAG_Z_SENS" value="15.9429325263" integer="16"/>
<!--define name= "MAG_X_CURRENT_COEF" value="0.0350248861409"/>
<define name= "MAG_Y_CURRENT_COEF" value="-0.0118884242797"/>
<define name= "MAG_Z_CURRENT_COEF" value="0.0176235525201"/-->
<define name="BODY_TO_IMU_PHI" value="0." unit="deg"/>
<define name="BODY_TO_IMU_THETA" value="0." unit="deg"/>
<define name="BODY_TO_IMU_PSI" value="0." unit="deg"/>
</section>
<section name="AHRS" prefix="AHRS_">
<!-- values used if no GPS fix, on 3D fix is update by geo_mag module if loaded -->
<!-- Toulouse -->
<define name="H_X" value="0.513081"/>
<define name="H_Y" value="-0.00242783"/>
<define name="H_Z" value="0.858336"/>
<define name="HEADING_UPDATE_GPS_MIN_SPEED" value="0"/>
<define name="USE_GPS_HEADING" value="TRUE"/>
<define name="GRAVITY_HEURISTIC_FACTOR" value="0"/>
</section>
<section name="STABILIZATION_RATE" prefix="STABILIZATION_RATE_">
<!-- setpoints -->
<define name="SP_MAX_P" value="300" unit="deg/s"/>
<define name="SP_MAX_Q" value="300" unit="deg/s"/>
<define name="SP_MAX_R" value="240" unit="deg/s"/>
<define name="DEADBAND_P" value="20"/>
<define name="DEADBAND_Q" value="20"/>
<define name="DEADBAND_R" value="200"/>
<!-- feedback -->
<define name="GAIN_P" value="1000"/>
<define name="GAIN_Q" value="1000"/>
<define name="GAIN_R" value="800"/>
<define name="IGAIN_P" value="75"/>
<define name="IGAIN_Q" value="75"/>
<define name="IGAIN_R" value="50"/>
</section>
<section name="STABILIZATION_ATTITUDE" prefix="STABILIZATION_ATTITUDE_">
<!-- setpoints -->
<define name="SP_MAX_PHI" value="45." unit="deg"/>
<define name="SP_MAX_THETA" value="45." unit="deg"/>
<define name="SP_MAX_R" value="200." unit="deg/s"/>
<define name="DEADBAND_A" value="0"/>
<define name="DEADBAND_E" value="0"/>
<define name="DEADBAND_R" value="250"/>
<!-- reference -->
<define name="REF_OMEGA_P" value="400" unit="deg/s"/>
<define name="REF_ZETA_P" value="0.85"/>
<define name="REF_MAX_P" value="400." unit="deg/s"/>
<define name="REF_MAX_PDOT" value="RadOfDeg(8000.)"/>
<define name="REF_OMEGA_Q" value="400" unit="deg/s"/>
<define name="REF_ZETA_Q" value="0.85"/>
<define name="REF_MAX_Q" value="400." unit="deg/s"/>
<define name="REF_MAX_QDOT" value="RadOfDeg(8000.)"/>
<define name="REF_OMEGA_R" value="250" unit="deg/s"/>
<define name="REF_ZETA_R" value="0.85"/>
<define name="REF_MAX_R" value="250." unit="deg/s"/>
<define name="REF_MAX_RDOT" value="RadOfDeg(1800.)"/>
<!-- feedback -->
<define name="PHI_PGAIN" value="500"/>
<define name="PHI_DGAIN" value="260"/>
<define name="PHI_IGAIN" value="100"/>
<define name="THETA_PGAIN" value="500"/>
<define name="THETA_DGAIN" value="260"/>
<define name="THETA_IGAIN" value="100"/>
<define name="PSI_PGAIN" value="1279"/>
<define name="PSI_DGAIN" value="802"/>
<define name="PSI_IGAIN" value="31"/>
<!-- feedforward -->
<define name="PHI_DDGAIN" value="300"/>
<define name="THETA_DDGAIN" value="300"/>
<define name="PSI_DDGAIN" value="300"/>
</section>
<section name="STABILIZATION_ATTITUDE_INDI" prefix="STABILIZATION_INDI_">
<!-- control effectiveness -->
<!--define name="G1_P" value="0.018284"/>
<define name="G1_Q" value="0.017385"/>
<define name="G1_R" value="0.0024217"/>
<define name="G2_R" value="-0.30628"/-->
<define name="G1_P" value="0.025483"/>
<define name="G1_Q" value="0.022144"/>
<define name="G1_R" value="0.0023438"/>
<define name="G2_R" value="-0.23538"/>
<define name="FILTER_ROLL_RATE" value="TRUE"/>
<define name="FILTER_PITCH_RATE" value="TRUE"/>
<define name="FILTER_YAW_RATE" value="FALSE"/>
<!-- reference acceleration for attitude control -->
<define name="REF_ERR_P" value="170.0"/>
<define name="REF_ERR_Q" value="600.0"/>
<define name="REF_ERR_R" value="600.0"/>
<define name="REF_RATE_P" value="14.3"/>
<define name="REF_RATE_Q" value="28.0"/>
<define name="REF_RATE_R" value="28.0"/>
<!-- second order filter parameters -->
<define name="FILT_CUTOFF" value="3.2"/>
<define name="FILT_CUTOFF_R" value="3.2"/>
<!-- first order actuator dynamics -->
<define name="ACT_DYN_P" value="0.06"/>
<define name="ACT_DYN_Q" value="0.06"/>
<define name="ACT_DYN_R" value="0.06"/>
<!-- Adaptive Learning Rate -->
<define name="USE_ADAPTIVE" value="FALSE"/>
<define name="ADAPTIVE_MU" value="0.0001"/>
</section>
<section name="GUIDANCE_V" prefix="GUIDANCE_V_">
<define name="HOVER_KP" value="150"/>
<define name="HOVER_KD" value="80"/>
<define name="HOVER_KI" value="20"/>
<define name="NOMINAL_HOVER_THROTTLE" value="0.35"/>
<define name="ADAPT_THROTTLE_ENABLED" value="TRUE"/>
</section>
<section name="GUIDANCE_H" prefix="GUIDANCE_H_">
<define name="REF_MAX_SPEED" value="0.5" unit="m/s"/>
<define name="MAX_BANK" value="20" unit="deg"/>
<define name="USE_SPEED_REF" value="TRUE"/>
<define name="PGAIN" value="180"/>
<define name="DGAIN" value="180"/>
<define name="AGAIN" value="0"/>
<define name="IGAIN" value="30"/>
</section>
<section name="NAVIGATION" prefix="NAV_">
<define name="DESCEND_VSPEED" value="-0.4"/>
<define name="CLIMB_VSPEED" value="0.25"/>
</section>
<section name="SIMULATOR" prefix="NPS_">
<define name="ACTUATOR_NAMES" value="nw_motor, ne_motor, se_motor, sw_motor" type="string[]"/>
<define name="JSBSIM_MODEL" value="HOOPERFLY/hooperfly_teensyfly_quad" type="string"/>
<define name="SENSORS_PARAMS" value="nps_sensors_params_default.h" type="string"/>
<!-- mode switch on joystick channel 5 (axis numbering starting at zero) -->
<define name="JS_AXIS_MODE" value="4"/>
</section>
<section name="AUTOPILOT">
<define name="MODE_STARTUP" value="AP_MODE_NAV"/>
<define name="MODE_MANUAL" value="AP_MODE_ATTITUDE_DIRECT"/>
<define name="MODE_AUTO1" value="AP_MODE_HOVER_Z_HOLD"/>
<define name="MODE_AUTO2" value="AP_MODE_NAV"/>
<define name="ARRIVED_AT_WAYPOINT" value="0.5"/>
</section>
<section name="BAT">
<define name="CATASTROPHIC_BAT_LEVEL" value="9.3" unit="V"/>
<define name="CRITIC_BAT_LEVEL" value="9.8" unit="V"/>
<define name="LOW_BAT_LEVEL" value="10.5" unit="V"/>
<define name="MAX_BAT_LEVEL" value="12.4" unit="V"/>
<define name="MILLIAMP_AT_FULL_THROTTLE" value="20000" unit="mA"/>
<define name="MILLIAMP_AT_IDLE_THROTTLE" value="1000" value="mA"/>
<define name="CURRENT_ESTIMATION_NONLINEARITY" value="1.0"/>
</section>
<section name="GCS">
<define name="ALT_SHIFT_PLUS_PLUS" value="5"/>
<define name="ALT_SHIFT_PLUS" value="1"/>
<define name="ALT_SHIFT_MINUS" value="-1"/>
<define name="AC_ICON" value="quadrotor_x"/>
</section>
</airframe>
+97
View File
@@ -0,0 +1,97 @@
# Hey Emacs, this is a -*- makefile -*-
#
# holybr_kakute_f7.makefile
#
# based on STM32F7
# only compatible with ChibiOS
#
BOARD=holybro
BOARD_VERSION=kakute_f7
BOARD_DIR=$(BOARD)/$(BOARD_VERSION)
BOARD_CFG=\"boards/$(BOARD_DIR)/$(BOARD)_$(BOARD_VERSION).h\"
ARCH=chibios
$(TARGET).ARCHDIR = $(ARCH)
RTOS=chibios
MCU=cortex-m7
## FPU on F7
USE_FPU=hard
USE_FPU_OPT= -mfpu=fpv5-sp-d16 -fsingle-precision-constant
USE_LTO ?= yes
$(TARGET).CFLAGS += -DSTM32F7 -DPPRZLINK_ENABLE_FD -DDSHOT_CHANNEL_FIRST_INDEX=1U
#$(TARGET).CFLAGS += -DUSE_HARD_FAULT_RECOVERY
##############################################################################
# Architecture or project specific options
#
# Define project name here (target)
PROJECT = $(TARGET)
# Project specific files and paths (see Makefile.chibios for details)
CHIBIOS_BOARD_PLATFORM = STM32F7xx/platform.mk
CHIBIOS_BOARD_PORT = ARMCMx/STM32F7xx/port.mk
#CHIBIOS_BOARD_LINKER = STM32F76xxI.ld
CHIBIOS_BOARD_LINKER = STM32F746xG.ld
CHIBIOS_BOARD_STARTUP = startup_stm32f7xx.mk
# ITCM flash is a special flash that allow faster operations
# At the moment it is not possible to flash the code in this mode using dfu-util
# but it should work with the BlackMagicProbe or STLINK
# By default, normal flash is used
ifeq ($(USE_ITCM),1)
$(TARGET).CFLAGS += -DUSE_ITCM=1
DFU_ADDR = 0x00200000
else
$(TARGET).CFLAGS += -DUSE_ITCM=0
DFU_ADDR = 0x08000000
endif
##############################################################################
# Compiler settings
#
# default flash mode is via usb dfu bootloader
# possibilities: DFU-UTIL, SWD, STLINK
FLASH_MODE ?= DFU-UTIL
HAS_LUFTBOOT = FALSE
#
# default LED configuration
#
RADIO_CONTROL_LED ?= none
BARO_LED ?= none
AHRS_ALIGNER_LED ?= none
GPS_LED ?= none
SYS_TIME_LED ?= 1
#
# default UART configuration (modem, gps, spektrum)
#
MODEM_PORT ?= UART1
MODEM_BAUD ?= B57600
GPS_PORT ?= UART2
GPS_BAUD ?= B57600
RADIO_CONTROL_SPEKTRUM_PRIMARY_PORT ?= UART6
# single mode
SBUS_PORT ?= UART6
#
# default actuator configuration
#
# you can use different actuators by adding a configure option to your firmware section
# e.g. <configure name="ACTUATORS" value="actuators_ppm/>
# and by setting the correct "driver" attribute in servo section
# e.g. <servo driver="Ppm">
#
ACTUATORS ?= actuators_pwm
+3
View File
@@ -36,6 +36,7 @@
<board name="crazyflie_.*"/> <board name="crazyflie_.*"/>
<board name="nucleo.*"/> <board name="nucleo.*"/>
<board name="matek_.*"/> <board name="matek_.*"/>
<board name="holybro_.*"/>
</boards> </boards>
</mode> </mode>
<mode name="STLink (SWD)"> <mode name="STLink (SWD)">
@@ -53,6 +54,7 @@
<board name="crazyflie_.*"/> <board name="crazyflie_.*"/>
<board name="nucleo.*"/> <board name="nucleo.*"/>
<board name="matek_.*"/> <board name="matek_.*"/>
<board name="holybro_.*"/>
</boards> </boards>
</mode> </mode>
<mode name="BlackMagic Probe (SWD)"> <mode name="BlackMagic Probe (SWD)">
@@ -74,6 +76,7 @@
<board name="crazyflie_.*"/> <board name="crazyflie_.*"/>
<board name="nucleo.*"/> <board name="nucleo.*"/>
<board name="matek_.*"/> <board name="matek_.*"/>
<board name="holybro_.*"/>
</boards> </boards>
</mode> </mode>
<mode name="BlackMagic Probe (SWD_NOPWR)"> <mode name="BlackMagic Probe (SWD_NOPWR)">
@@ -0,0 +1,277 @@
/*
ChibiOS - Copyright (C) 2006..2018 Giovanni Di Sirio
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
*/
/*
* This file has been automatically generated using ChibiStudio board
* generator plugin. Do not edit manually.
*/
#include "hal.h"
#include "stm32_gpio.h"
/*===========================================================================*/
/* Driver local definitions. */
/*===========================================================================*/
/*===========================================================================*/
/* Driver exported variables. */
/*===========================================================================*/
/*===========================================================================*/
/* Driver local variables and types. */
/*===========================================================================*/
/**
* @brief Type of STM32 GPIO port setup.
*/
typedef struct {
uint32_t moder;
uint32_t otyper;
uint32_t ospeedr;
uint32_t pupdr;
uint32_t odr;
uint32_t afrl;
uint32_t afrh;
} gpio_setup_t;
/**
* @brief Type of STM32 GPIO initialization data.
*/
typedef struct {
#if STM32_HAS_GPIOA || defined(__DOXYGEN__)
gpio_setup_t PAData;
#endif
#if STM32_HAS_GPIOB || defined(__DOXYGEN__)
gpio_setup_t PBData;
#endif
#if STM32_HAS_GPIOC || defined(__DOXYGEN__)
gpio_setup_t PCData;
#endif
#if STM32_HAS_GPIOD || defined(__DOXYGEN__)
gpio_setup_t PDData;
#endif
#if STM32_HAS_GPIOE || defined(__DOXYGEN__)
gpio_setup_t PEData;
#endif
#if STM32_HAS_GPIOF || defined(__DOXYGEN__)
gpio_setup_t PFData;
#endif
#if STM32_HAS_GPIOG || defined(__DOXYGEN__)
gpio_setup_t PGData;
#endif
#if STM32_HAS_GPIOH || defined(__DOXYGEN__)
gpio_setup_t PHData;
#endif
#if STM32_HAS_GPIOI || defined(__DOXYGEN__)
gpio_setup_t PIData;
#endif
#if STM32_HAS_GPIOJ || defined(__DOXYGEN__)
gpio_setup_t PJData;
#endif
#if STM32_HAS_GPIOK || defined(__DOXYGEN__)
gpio_setup_t PKData;
#endif
} gpio_config_t;
/**
* @brief STM32 GPIO static initialization data.
*/
static const gpio_config_t gpio_default_config = {
#if STM32_HAS_GPIOA
{VAL_GPIOA_MODER, VAL_GPIOA_OTYPER, VAL_GPIOA_OSPEEDR, VAL_GPIOA_PUPDR,
VAL_GPIOA_ODR, VAL_GPIOA_AFRL, VAL_GPIOA_AFRH},
#endif
#if STM32_HAS_GPIOB
{VAL_GPIOB_MODER, VAL_GPIOB_OTYPER, VAL_GPIOB_OSPEEDR, VAL_GPIOB_PUPDR,
VAL_GPIOB_ODR, VAL_GPIOB_AFRL, VAL_GPIOB_AFRH},
#endif
#if STM32_HAS_GPIOC
{VAL_GPIOC_MODER, VAL_GPIOC_OTYPER, VAL_GPIOC_OSPEEDR, VAL_GPIOC_PUPDR,
VAL_GPIOC_ODR, VAL_GPIOC_AFRL, VAL_GPIOC_AFRH},
#endif
#if STM32_HAS_GPIOD
{VAL_GPIOD_MODER, VAL_GPIOD_OTYPER, VAL_GPIOD_OSPEEDR, VAL_GPIOD_PUPDR,
VAL_GPIOD_ODR, VAL_GPIOD_AFRL, VAL_GPIOD_AFRH},
#endif
#if STM32_HAS_GPIOE
{VAL_GPIOE_MODER, VAL_GPIOE_OTYPER, VAL_GPIOE_OSPEEDR, VAL_GPIOE_PUPDR,
VAL_GPIOE_ODR, VAL_GPIOE_AFRL, VAL_GPIOE_AFRH},
#endif
#if STM32_HAS_GPIOF
{VAL_GPIOF_MODER, VAL_GPIOF_OTYPER, VAL_GPIOF_OSPEEDR, VAL_GPIOF_PUPDR,
VAL_GPIOF_ODR, VAL_GPIOF_AFRL, VAL_GPIOF_AFRH},
#endif
#if STM32_HAS_GPIOG
{VAL_GPIOG_MODER, VAL_GPIOG_OTYPER, VAL_GPIOG_OSPEEDR, VAL_GPIOG_PUPDR,
VAL_GPIOG_ODR, VAL_GPIOG_AFRL, VAL_GPIOG_AFRH},
#endif
#if STM32_HAS_GPIOH
{VAL_GPIOH_MODER, VAL_GPIOH_OTYPER, VAL_GPIOH_OSPEEDR, VAL_GPIOH_PUPDR,
VAL_GPIOH_ODR, VAL_GPIOH_AFRL, VAL_GPIOH_AFRH},
#endif
#if STM32_HAS_GPIOI
{VAL_GPIOI_MODER, VAL_GPIOI_OTYPER, VAL_GPIOI_OSPEEDR, VAL_GPIOI_PUPDR,
VAL_GPIOI_ODR, VAL_GPIOI_AFRL, VAL_GPIOI_AFRH},
#endif
#if STM32_HAS_GPIOJ
{VAL_GPIOJ_MODER, VAL_GPIOJ_OTYPER, VAL_GPIOJ_OSPEEDR, VAL_GPIOJ_PUPDR,
VAL_GPIOJ_ODR, VAL_GPIOJ_AFRL, VAL_GPIOJ_AFRH},
#endif
#if STM32_HAS_GPIOK
{VAL_GPIOK_MODER, VAL_GPIOK_OTYPER, VAL_GPIOK_OSPEEDR, VAL_GPIOK_PUPDR,
VAL_GPIOK_ODR, VAL_GPIOK_AFRL, VAL_GPIOK_AFRH}
#endif
};
/*===========================================================================*/
/* Driver local functions. */
/*===========================================================================*/
static void gpio_init(stm32_gpio_t *gpiop, const gpio_setup_t *config) {
gpiop->OTYPER = config->otyper;
gpiop->OSPEEDR = config->ospeedr;
gpiop->PUPDR = config->pupdr;
gpiop->ODR = config->odr;
gpiop->AFRL = config->afrl;
gpiop->AFRH = config->afrh;
gpiop->MODER = config->moder;
}
static void stm32_gpio_init(void) {
/* Enabling GPIO-related clocks, the mask comes from the
registry header file.*/
rccResetAHB1(STM32_GPIO_EN_MASK);
rccEnableAHB1(STM32_GPIO_EN_MASK, true);
/* Initializing all the defined GPIO ports.*/
#if STM32_HAS_GPIOA
gpio_init(GPIOA, &gpio_default_config.PAData);
#endif
#if STM32_HAS_GPIOB
gpio_init(GPIOB, &gpio_default_config.PBData);
#endif
#if STM32_HAS_GPIOC
gpio_init(GPIOC, &gpio_default_config.PCData);
#endif
#if STM32_HAS_GPIOD
gpio_init(GPIOD, &gpio_default_config.PDData);
#endif
#if STM32_HAS_GPIOE
gpio_init(GPIOE, &gpio_default_config.PEData);
#endif
#if STM32_HAS_GPIOF
gpio_init(GPIOF, &gpio_default_config.PFData);
#endif
#if STM32_HAS_GPIOG
gpio_init(GPIOG, &gpio_default_config.PGData);
#endif
#if STM32_HAS_GPIOH
gpio_init(GPIOH, &gpio_default_config.PHData);
#endif
#if STM32_HAS_GPIOI
gpio_init(GPIOI, &gpio_default_config.PIData);
#endif
#if STM32_HAS_GPIOJ
gpio_init(GPIOJ, &gpio_default_config.PJData);
#endif
#if STM32_HAS_GPIOK
gpio_init(GPIOK, &gpio_default_config.PKData);
#endif
}
/*===========================================================================*/
/* Driver interrupt handlers. */
/*===========================================================================*/
/*===========================================================================*/
/* Driver exported functions. */
/*===========================================================================*/
/**
* @brief Early initialization code.
* @details GPIO ports and system clocks are initialized before everything
* else.
*/
void __early_init(void) {
stm32_gpio_init();
stm32_clock_init();
}
#if HAL_USE_SDC || defined(__DOXYGEN__)
/**
* @brief SDC card detection.
*/
bool sdc_lld_is_card_inserted(SDCDriver *sdcp) {
(void)sdcp;
/* assume card is inserted as there is no SD_DETECT pin
* actual detection will be done by the software
*/
return true;
}
/**
* @brief SDC card write protection detection.
*/
bool sdc_lld_is_write_protected(SDCDriver *sdcp) {
(void)sdcp;
return false;
}
#endif /* HAL_USE_SDC */
#if HAL_USE_MMC_SPI || defined(__DOXYGEN__)
/**
* @brief MMC_SPI card detection.
*/
bool mmc_lld_is_card_inserted(MMCDriver *mmcp) {
(void)mmcp;
/* TODO: Fill the implementation.*/
return true;
}
/**
* @brief MMC_SPI card write protection detection.
*/
bool mmc_lld_is_write_protected(MMCDriver *mmcp) {
(void)mmcp;
/* TODO: Fill the implementation.*/
return false;
}
#endif
/**
* @brief Board-specific initialization code.
* @todo Add your board-specific code, if any.
*/
void boardInit(void) {
}
/** Energy saving procedure for SD log closing
*/
void mcu_periph_energy_save(void)
{
palSetLineMode(LINE_LED1, PAL_MODE_INPUT);
palSetLineMode(LINE_OSD_CS, PAL_MODE_INPUT);
palSetLineMode(LINE_IMU_CS, PAL_MODE_INPUT);
palSetLineMode(LINE_SDCARD_CS, PAL_MODE_INPUT);
}
File diff suppressed because it is too large Load Diff
@@ -0,0 +1,24 @@
#
# ChibiOS/RT - Copyright (C) 2006-2013 Giovanni Di Sirio
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
#
# Required include directories
BOARDINC = $(CHIBIOS_BOARD_DIR)
# List of all the board related files.
BOARDSRC = ${BOARDINC}/board.c
# Shared variables
ALLCSRC += $(BOARDSRC)
ALLINC += $(BOARDINC)
@@ -0,0 +1,116 @@
MCU_MODEL = STM32F745V(E-G)Tx
CHIBIOS_VERSION = 3.0
HEADER
/*
* Board identifier.
*/
#define BOARD_KAKUTE_F7
#define BOARD_NAME "HOLYBRO KAKUTE F7"
/*
* Board oscillators-related settings.
*/
#if !defined(STM32_HSECLK)
#define STM32_HSECLK 8000000U
#endif
#if !defined(STM32_LSECLK)
#define STM32_LSECLK 32768U
#endif
#define STM32_LSEDRV (3U << 3U)
/*
* Board voltages.
* Required for performance limits calculation.
*/
#define STM32_VDD 300U
/*
* MCU type as defined in the ST header.
*/
#define STM32F745xx
CONFIG
# PIN NAME PERIPH_TYPE AF_NUMBER or
# PIN NAME FUNCTION PP_or_OPENDRAIN PIN_SPEED PULL_RESISTOR INITIAL_LEVEL AF_NUMBER
# SPEED : SPEED_VERYLOW, SPEED_LOW, SPEED_MEDIUM, SPEED_HIGH
#
# DEFAULT AND SYS
#
# 'SYS' => ['ALTERNATE', 'PUSHPULL', 'SPEED_HIGH', 'FLOATING', 'LEVEL_HIGH'],
# 'ADC' => ['ANALOG', 'PUSHPULL', 'SPEED_HIGH', 'FLOATING', 'LEVEL_LOW'],
# 'PWM' => ['ALTERNATE', 'PUSHPULL', 'SPEED_HIGH', 'FLOATING', 'LEVEL_LOW'],
# 'ICU' => ['ALTERNATE', 'PUSHPULL', 'SPEED_HIGH', 'FLOATING', 'LEVEL_HIGH'],
# 'I2C' => ['ALTERNATE', 'OPENDRAIN', 'SPEED_HIGH', 'PULLUP', 'LEVEL_HIGH'],
# 'SPI' => ['ALTERNATE', 'PUSHPULL', 'SPEED_HIGH', 'FLOATING', 'LEVEL_HIGH'],
# 'UART' => ['ALTERNATE', 'PUSHPULL', 'SPEED_HIGH', 'PULLUP', 'LEVEL_HIGH'],
# 'OTG' => ['ALTERNATE', 'PUSHPULL', 'SPEED_HIGH', 'FLOATING', 'LEVEL_HIGH'],
# 'ETH' => ['ALTERNATE', 'PUSHPULL', 'SPEED_HIGH', 'FLOATING', 'LEVEL_HIGH'],
# 'FSMC' => ['ALTERNATE', 'PUSHPULL', 'SPEED_HIGH', 'FLOATING', 'LEVEL_HIGH'],
# 'SDIO' => ['ALTERNATE', 'PUSHPULL', 'SPEED_HIGH', 'PULLUP', 'LEVEL_HIGH'],
# 'SDIOCK' => ['ALTERNATE', 'PUSHPULL', 'SPEED_HIGH', 'FLOATING', 'LEVEL_HIGH'],
# 'CAN' => ['ALTERNATE', 'PUSHPULL', 'SPEED_HIGH', 'FLOATING', 'LEVEL_HIGH'],
# 'DCMI' => ['ALTERNATE', 'PUSHPULL', 'SPEED_HIGH', 'FLOATING', 'LEVEL_HIGH'],
# 'LED' => ['OUTPUT', 'PUSHPULL', 'SPEED_VERYLOW', 'FLOATING', 'LEVEL_LOW'],
# 'PASSIVE' => ['INPUT', 'PUSHPULL', 'SPEED_VERYLOW', 'FLOATING', 'LEVEL_LOW']);
#
# SYSTEM
A13 SWDIO SYS AF:SYS_JTMS-SWDIO
A14 SWCLK SYS AF:SYS_JTCK-SWCLK
C14 OSC32_IN SYS AF0
C15 OSC32_OUT SYS AF0
H00 OSC_IN SYS AF0
H01 OSC_OUT SYS AF0
#DEFAULT
DEFAULT INPUT PUSHPULL SPEED_VERYLOW PULLDOWN LEVEL_LOW AF0
# ACTIVE PINS
PA00 UART4_TX UART AF:UART4_TX
PA01 UART4_RX UART AF:UART4_RX
PA02 LED1 LED
PA03 S6 PWM AF:TIM5_CH4 ()
PA04 SDCARD_CS OUTPUT PUSHPULL SPEED_HIGH FLOATING LEVEL_HIGH
PA05 SPI1_SCK SPI AF:SPI1_SCK # SDCARD
PA06 SPI1_MISO SPI AF:SPI1_MISO # SDCARD
PA07 SPI1_MOSI SPI AF:SPI1_MOSI # SDCARD
PA09 UART1_TX UART AF:USART1_TX
PA10 UART1_RX UART AF:USART1_RX
PA11 OTG_FS_DM OTG AF:USB_OTG_FS_DM
PA12 OTG_FS_DP OTG AF:USB_OTG_FS_DP
PB00 S4 PWM AF:TIM3_CH3 ()
PB01 S1 PWM AF:TIM1_CH3N ()
PB06 I2C1_SCL I2C AF:I2C1_SCL
PB07 I2C1_SDA I2C AF:I2C1_SDA
PB10 UART3_TX UART AF:USART3_TX
PB11 UART3_RX UART AF:USART3_RX
PB12 OSD_CS OUTPUT PUSHPULL SPEED_HIGH FLOATING LEVEL_HIGH # MAX7456
PB13 SPI2_SCK SPI AF:SPI2_SCK # MAX7456
PB14 SPI2_MISO SPI AF:SPI2_MISO # MAX7456
PB15 SPI2_MOSI SPI AF:SPI2_MOSI # MAX7456
PC02 CURRENT_MEAS ADC ADC1_IN12 ()
PC03 VBAT_MEAS ADC ADC1_IN13 ()
PC05 RSSI ADC ADC1_IN15 ()
PC06 RC2 PASSIVE (AF:TIM8_CH1, AF:USART6_TX)
PC07 RC1 PASSIVE (AF:TIM3_CH2, AF:USART6_RX)
PC09 S5 PWM AF:TIM3_CH4 ()
PD05 UART2_TX UART AF:USART2_TX
PD06 UART2_RX UART AF:USART2_RX
PD15 BUZZER PWM AF:TIM4_CH4 ()
PE02 SPI4_CLK SPI AF:SPI4_SCK # IMU ICM20689 (MPU6000)
PE04 IMU_CS OUTPUT PUSHPULL SPEED_HIGH FLOATING LEVEL_HIGH
PE05 SPI4_MISO SPI AF:SPI4_MISO
PE06 SPI4_MOSI SPI AF:SPI4_MOSI
PE07 UART7_RX UART AF:UART7_RX
PE08 UART7_TX UART AF:UART7_TX
PE09 S2 PWM AF:TIM1_CH1 ()
PE11 S3 PWM AF:TIM1_CH2 ()
@@ -0,0 +1,466 @@
#ifndef CONFIG_HOLYBRO_KAKUTE_F7_H
#define CONFIG_HOLYBRO_KAKUTE_F7_H
#define BOARD_HOLYBRO_KAKUTE_F7
/**
* ChibiOS board file
*/
#include "board.h"
/**
* PPRZ definitions
*/
/*
* AHB_CLK
*/
#define AHB_CLK STM32_HCLK
/*
* Concat macro
*/
#define _CONCAT_BOARD_PARAM(_s1, _s2) _s1 ## _s2
#define CONCAT_BOARD_PARAM(_s1, _s2) _CONCAT_BOARD_PARAM(_s1, _s2)
/*
* LEDs
*/
/* blue, 1 on LED_ON, 0 on LED_OFF */
#ifndef USE_LED_1
#define USE_LED_1 1
#endif
#define LED_1_GPIO PAL_PORT(LINE_LED1)
#define LED_1_GPIO_PIN PAL_PAD(LINE_LED1)
#define LED_1_GPIO_ON gpio_set
#define LED_1_GPIO_OFF gpio_clear
/*
* ADCs
*/
// RSSI
#if USE_ADC_1
#define AD1_1_CHANNEL CONCAT_BOARD_PARAM(ADC_CHANNEL_IN, RSSI_ADC_IN)
#define ADC_1 AD1_1
#define ADC_1_GPIO_PORT PAL_PORT(LINE_RSSI)
#define ADC_1_GPIO_PIN PAL_PAD(LINE_RSSI)
#endif
// VBAT enabled by default
#ifndef USE_ADC_2
#define USE_ADC_2 1
#endif
#if USE_ADC_2
#define AD1_2_CHANNEL CONCAT_BOARD_PARAM(ADC_CHANNEL_IN, VBAT_MEAS_ADC_IN)
#define ADC_2 AD1_2
#define ADC_2_GPIO_PORT PAL_PORT(LINE_VBAT_MEAS)
#define ADC_2_GPIO_PIN PAL_PAD(LINE_VBAT_MEAS)
#endif
// CURRENT
#if USE_ADC_3
#define AD1_3_CHANNEL CONCAT_BOARD_PARAM(ADC_CHANNEL_IN, CURRENT_MEAS_ADC_IN)
#define ADC_3 AD1_3
#define ADC_3_GPIO_PORT PAL_PORT(LINE_CURRENT_MEAS)
#define ADC_3_GPIO_PIN PAL_PAD(LINE_CURRENT_MEAS)
#endif
/* allow to define ADC_CHANNEL_VSUPPLY in the airframe file*/
#ifndef ADC_CHANNEL_VSUPPLY
#define ADC_CHANNEL_VSUPPLY ADC_2
#endif
/*
* R1 = 1k
* R2 = 10k
* adc * (3.3 / 2^12) * ((R1 + R2) / R1)
*/
#define VBAT_R1 1000.0f
#define VBAT_R2 10000.0f
#define DefaultVoltageOfAdc(adc) ((3.3f/4096.0f)*((VBAT_R1+VBAT_R2)/VBAT_R1)*adc)
/*
* current sensor: 132A, 3.3V 12bits ADC -> 40 A/V -> 40000 * 3.3/2^12 mA/ADC
*/
#define DefaultMilliAmpereOfAdc(adc) ((40000.f*3.3f/4096.f)*adc)
/*
* PWM defines
*/
#ifndef USE_PWM1
#define USE_PWM1 1
#endif
#if USE_PWM1
#define PWM_SERVO_1 1
#define PWM_SERVO_1_GPIO PAL_PORT(LINE_S1)
#define PWM_SERVO_1_PIN PAL_PAD(LINE_S1)
#define PWM_SERVO_1_AF AF_S1
#define PWM_SERVO_1_DRIVER CONCAT_BOARD_PARAM(PWMD, S1_TIM)
#define PWM_SERVO_1_CHANNEL (S1_TIM_CH-1)
#define PWM_SERVO_1_ACTIVE PWM_OUTPUT_ACTIVE_HIGH
#else
#define PWM_SERVO_1_ACTIVE PWM_OUTPUT_DISABLED
#endif
#ifndef USE_PWM2
#define USE_PWM2 1
#endif
#if USE_PWM2
#define PWM_SERVO_2 2
#define PWM_SERVO_2_GPIO PAL_PORT(LINE_S2)
#define PWM_SERVO_2_PIN PAL_PAD(LINE_S2)
#define PWM_SERVO_2_AF AF_S2
#define PWM_SERVO_2_DRIVER CONCAT_BOARD_PARAM(PWMD, S2_TIM)
#define PWM_SERVO_2_CHANNEL (S2_TIM_CH-1)
#define PWM_SERVO_2_ACTIVE PWM_OUTPUT_ACTIVE_HIGH
#else
#define PWM_SERVO_2_ACTIVE PWM_OUTPUT_DISABLED
#endif
#ifndef USE_PWM3
#define USE_PWM3 1
#endif
#if USE_PWM3
#define PWM_SERVO_3 3
#define PWM_SERVO_3_GPIO PAL_PORT(LINE_S3)
#define PWM_SERVO_3_PIN PAL_PAD(LINE_S3)
#define PWM_SERVO_3_AF AF_S3
#define PWM_SERVO_3_DRIVER CONCAT_BOARD_PARAM(PWMD, S3_TIM)
#define PWM_SERVO_3_CHANNEL (S3_TIM_CH-1)
#define PWM_SERVO_3_ACTIVE PWM_OUTPUT_ACTIVE_HIGH
#else
#define PWM_SERVO_3_ACTIVE PWM_OUTPUT_DISABLED
#endif
#ifndef USE_PWM4
#define USE_PWM4 1
#endif
#if USE_PWM4
#define PWM_SERVO_4 4
#define PWM_SERVO_4_GPIO PAL_PORT(LINE_S4)
#define PWM_SERVO_4_PIN PAL_PAD(LINE_S4)
#define PWM_SERVO_4_AF AF_S4
#define PWM_SERVO_4_DRIVER CONCAT_BOARD_PARAM(PWMD, S4_TIM)
#define PWM_SERVO_4_CHANNEL (S4_TIM_CH-1)
#define PWM_SERVO_4_ACTIVE PWM_OUTPUT_ACTIVE_HIGH
#else
#define PWM_SERVO_4_ACTIVE PWM_OUTPUT_DISABLED
#endif
#ifndef USE_PWM5
#define USE_PWM5 1
#endif
#if USE_PWM5
#define PWM_SERVO_5 5
#define PWM_SERVO_5_GPIO PAL_PORT(LINE_S5)
#define PWM_SERVO_5_PIN PAL_PAD(LINE_S5)
#define PWM_SERVO_5_AF AF_S5
#define PWM_SERVO_5_DRIVER CONCAT_BOARD_PARAM(PWMD, S5_TIM)
#define PWM_SERVO_5_CHANNEL (S5_TIM_CH-1)
#define PWM_SERVO_5_ACTIVE PWM_OUTPUT_ACTIVE_HIGH
#else
#define PWM_SERVO_5_ACTIVE PWM_OUTPUT_DISABLED
#endif
#ifndef USE_PWM6
#define USE_PWM6 1
#endif
#if USE_PWM6
#define PWM_SERVO_6 6
#define PWM_SERVO_6_GPIO PAL_PORT(LINE_S6)
#define PWM_SERVO_6_PIN PAL_PAD(LINE_S6)
#define PWM_SERVO_6_AF AF_S6
#define PWM_SERVO_6_DRIVER CONCAT_BOARD_PARAM(PWMD, S6_TIM)
#define PWM_SERVO_6_CHANNEL (S6_TIM_CH-1)
#define PWM_SERVO_6_ACTIVE PWM_OUTPUT_ACTIVE_HIGH
#else
#define PWM_SERVO_6_ACTIVE PWM_OUTPUT_DISABLED
#endif
// servo index starting at 1 + regular servos
// so NB = 1+6
#define ACTUATORS_PWM_NB 7
#ifdef STM32_PWM_USE_TIM1
#define PWM_CONF_TIM1 STM32_PWM_USE_TIM1
#else
#define PWM_CONF_TIM1 1
#endif
#define PWM_CONF1_DEF { \
PWM_FREQUENCY, \
PWM_FREQUENCY/TIM1_SERVO_HZ, \
NULL, \
{ \
{ PWM_SERVO_2_ACTIVE, NULL }, \
{ PWM_SERVO_3_ACTIVE, NULL }, \
{ PWM_SERVO_1_ACTIVE, NULL }, \
{ PWM_OUTPUT_DISABLED, NULL }, \
}, \
0, \
0 \
}
#ifdef STM32_PWM_USE_TIM3
#define PWM_CONF_TIM3 STM32_PWM_USE_TIM3
#else
#define PWM_CONF_TIM3 1
#endif
#define PWM_CONF3_DEF { \
PWM_FREQUENCY, \
PWM_FREQUENCY/TIM3_SERVO_HZ, \
NULL, \
{ \
{ PWM_OUTPUT_DISABLED, NULL }, \
{ PWM_OUTPUT_DISABLED, NULL }, \
{ PWM_SERVO_4_ACTIVE, NULL }, \
{ PWM_SERVO_5_ACTIVE, NULL }, \
}, \
0, \
0 \
}
#ifdef STM32_PWM_USE_TIM5
#define PWM_CONF_TIM5 STM32_PWM_USE_TIM5
#else
#define PWM_CONF_TIM5 1
#endif
#define PWM_CONF5_DEF { \
PWM_FREQUENCY, \
PWM_FREQUENCY/TIM5_SERVO_HZ, \
NULL, \
{ \
{ PWM_OUTPUT_DISABLED, NULL }, \
{ PWM_OUTPUT_DISABLED, NULL }, \
{ PWM_OUTPUT_DISABLED, NULL }, \
{ PWM_SERVO_6_ACTIVE, NULL }, \
}, \
0, \
0 \
}
/**
* DSHOT
*/
#ifndef DSHOT_TELEMETRY_DEV
#define DSHOT_TELEMETRY_DEV NULL
#endif
#ifndef USE_DSHOT_TIM
#define USE_DSHOT_TIM 0
#endif
#if USE_DSHOT_TIM
#define DSHOT_SERVO_1 1
#define DSHOT_SERVO_1_GPIO PAL_PORT(LINE_S1)
#define DSHOT_SERVO_1_PIN PAL_PAD(LINE_S1)
#define DSHOT_SERVO_1_AF AF_S1
#define DSHOT_SERVO_1_DRIVER CONCAT_BOARD_PARAM(DSHOTD, S1_TIM)
#define DSHOT_SERVO_1_CHANNEL S1_TIM_CH
#define DSHOT_SERVO_2 2
#define DSHOT_SERVO_2_GPIO PAL_PORT(LINE_S2)
#define DSHOT_SERVO_2_PIN PAL_PAD(LINE_S2)
#define DSHOT_SERVO_2_AF AF_S2
#define DSHOT_SERVO_2_DRIVER CONCAT_BOARD_PARAM(DSHOTD, S2_TIM)
#define DSHOT_SERVO_2_CHANNEL S2_TIM_CH
#define DSHOT_SERVO_3 3
#define DSHOT_SERVO_3_GPIO PAL_PORT(LINE_S3)
#define DSHOT_SERVO_3_PIN PAL_PAD(LINE_S3)
#define DSHOT_SERVO_3_AF AF_S3
#define DSHOT_SERVO_3_DRIVER CONCAT_BOARD_PARAM(DSHOTD, S3_TIM)
#define DSHOT_SERVO_3_CHANNEL S3_TIM_CH
#define DSHOT_SERVO_4 4
#define DSHOT_SERVO_4_GPIO PAL_PORT(LINE_S4)
#define DSHOT_SERVO_4_PIN PAL_PAD(LINE_S4)
#define DSHOT_SERVO_4_AF AF_S4
#define DSHOT_SERVO_4_DRIVER CONCAT_BOARD_PARAM(DSHOTD, S4_TIM)
#define DSHOT_SERVO_4_CHANNEL S4_TIM_CH
#define DSHOT_CONF_TIM1 1
#define DSHOT_CONF4_DEF { \
.dma_stream = STM32_PWM1_UP_DMA_STREAM, \
.dma_channel = STM32_PWM1_UP_DMA_CHANNEL, \
.pwmp = &PWMD1, \
.tlm_sd = DSHOT_TELEMETRY_DEV, \
.dma_buf = &dshot4DmaBuffer, \
.dcache_memory_in_use = false \
}
#define DSHOT_CONF_TIM3 1
#define DSHOT_CONF3_DEF { \
.dma_stream = STM32_PWM3_UP_DMA_STREAM, \
.dma_channel = STM32_PWM3_UP_DMA_CHANNEL, \
.pwmp = &PWMD3, \
.tlm_sd = DSHOT_TELEMETRY_DEV, \
.dma_buf = &dshot4DmaBuffer, \
.dcache_memory_in_use = false \
}
#endif
/**
* UART1 (Modem)
*/
#define UART1_GPIO_PORT_TX PAL_PORT(LINE_UART1_TX)
#define UART1_GPIO_TX PAL_PAD(LINE_UART1_TX)
#define UART1_GPIO_PORT_RX PAL_PORT(LINE_UART1_RX)
#define UART1_GPIO_RX PAL_PAD(LINE_UART1_RX)
#define UART1_GPIO_AF AF_UART1_TX
/**
* UART2 (GPS)
*/
#define UART2_GPIO_PORT_TX PAL_PORT(LINE_UART2_TX)
#define UART2_GPIO_TX PAL_PAD(LINE_UART2_TX)
#define UART2_GPIO_PORT_RX PAL_PORT(LINE_UART2_RX)
#define UART2_GPIO_RX PAL_PAD(LINE_UART2_RX)
#define UART2_GPIO_AF AF_UART2_TX
/**
* UART3 (Companion)
*/
#define UART3_GPIO_PORT_TX PAL_PORT(LINE_UART3_TX)
#define UART3_GPIO_TX PAL_PAD(LINE_UART3_TX)
#define UART3_GPIO_PORT_RX PAL_PORT(LINE_UART3_RX)
#define UART3_GPIO_RX PAL_PAD(LINE_UART3_RX)
#define UART3_GPIO_AF AF_UART3_TX
/**
* UART4
*/
#define UART4_GPIO_PORT_TX PAL_PORT(LINE_UART4_TX)
#define UART4_GPIO_TX PAL_PAD(LINE_UART4_TX)
#define UART4_GPIO_PORT_RX PAL_PORT(LINE_UART4_RX)
#define UART4_GPIO_RX PAL_PAD(LINE_UART4_RX)
#define UART4_GPIO_AF AF_UART4_TX
/**
* SBUS / Spektrum port
*/
#define USE_UART6_RX TRUE
#define USE_UART6_TX FALSE
#define UART6_GPIO_PORT_RX PAL_PORT(LINE_RC1)
#define UART6_GPIO_RX PAL_PAD(LINE_RC1)
#define UART6_GPIO_AF RC1_USART_AF
/* The line that is pulled low at power up to initiate the bind process
*/
#define SPEKTRUM_BIND_PIN PAL_PORT(LINE_XXX)
#define SPEKTRUM_BIND_PIN_PORT PAL_PAD(LINE_XXX)
// no wait with chibios as the RTC oscillator takes longer to stabilize
#define SPEKTRUM_BIND_WAIT 30000
/**
* PPM radio defines
*
* available on RC2
*/
#define RC_PPM_TICKS_PER_USEC 6
#define PPM_TIMER_FREQUENCY 6000000
#define PPM_CHANNEL CONCAT_BOARD_PARAM(ICU_CHANNEL_, RC2_TIM_CH)
#define PPM_TIMER CONCAT_BOARD_PARAM(ICUD, RC2_TIM)
/**
* I2C defines
*/
// Digital noise filter: 0 disabled, [0x1 - 0xF] enable up to n t_I2CCLK
#define STM32_CR1_DNF(n) ((n & 0x0f) << 8)
// Timing register
#define I2C_FAST_400KHZ_DNF0_100NS_PCLK54MHZ_TIMINGR (STM32_TIMINGR_PRESC(0U) | \
STM32_TIMINGR_SCLDEL(10U) | STM32_TIMINGR_SDADEL(0U) | \
STM32_TIMINGR_SCLH(34U) | STM32_TIMINGR_SCLL(86U))
#define I2C_STD_100KHZ_DNF0_100NS_PCLK54MHZ_TIMINGR (STM32_TIMINGR_PRESC(1U) | \
STM32_TIMINGR_SCLDEL(9U) | STM32_TIMINGR_SDADEL(0U) | \
STM32_TIMINGR_SCLH(105U) | STM32_TIMINGR_SCLL(153U))
#ifndef I2C1_CLOCK_SPEED
#define I2C1_CLOCK_SPEED 400000
#endif
#if I2C1_CLOCK_SPEED == 400000
#define I2C1_CFG_DEF { \
.timingr = I2C_FAST_400KHZ_DNF0_100NS_PCLK54MHZ_TIMINGR, \
.cr1 = STM32_CR1_DNF(0), \
.cr2 = 0 \
}
#elif I2C1_CLOCK_SPEED == 100000
#define I2C1_CFG_DEF { \
.timingr = I2C_STD_100KHZ_DNF0_100NS_PCLK54MHZ_TIMINGR, \
.cr1 = STM32_CR1_DNF(0), \
.cr2 = 0 \
}
#else
#error "Unknown I2C1 clock speed"
#endif
/**
* SPI Config
*/
// Internal SPI (SDCARD)
#define SPI1_GPIO_AF AF_SPI1_CLK
#define SPI1_GPIO_PORT_MISO PAL_PORT(LINE_SPI1_MISO)
#define SPI1_GPIO_MISO PAL_PAD(LINE_SPI1_MISO)
#define SPI1_GPIO_PORT_MOSI PAL_PORT(LINE_SPI1_MOSI)
#define SPI1_GPIO_MOSI PAL_PAD(LINE_SPI1_MOSI)
#define SPI1_GPIO_PORT_SCK PAL_PORT(LINE_SPI1_CLK)
#define SPI1_GPIO_SCK PAL_PAD(LINE_SPI1_CLK)
// Internal SPI (OSD)
#define SPI2_GPIO_AF AF_SPI2_CLK
#define SPI2_GPIO_PORT_MISO PAL_PORT(LINE_SPI2_MISO)
#define SPI2_GPIO_MISO PAL_PAD(LINE_SPI2_MISO)
#define SPI2_GPIO_PORT_MOSI PAL_PORT(LINE_SPI2_MOSI)
#define SPI2_GPIO_MOSI PAL_PAD(LINE_SPI2_MOSI)
#define SPI2_GPIO_PORT_SCK PAL_PORT(LINE_SPI2_CLK)
#define SPI2_GPIO_SCK PAL_PAD(LINE_SPI2_CLK)
// Internal SPI (IMU)
#define SPI4_GPIO_AF AF_SPI4_INTERNAL_CLK
#define SPI4_GPIO_PORT_MISO PAL_PORT(LINE_SPI4_INTERNAL_MISO)
#define SPI4_GPIO_MISO PAL_PAD(LINE_SPI4_INTERNAL_MISO)
#define SPI4_GPIO_PORT_MOSI PAL_PORT(LINE_SPI4_INTERNAL_MOSI)
#define SPI4_GPIO_MOSI PAL_PAD(LINE_SPI4_INTERNAL_MOSI)
#define SPI4_GPIO_PORT_SCK PAL_PORT(LINE_SPI4_INTERNAL_CLK)
#define SPI4_GPIO_SCK PAL_PAD(LINE_SPI4_INTERNAL_CLK)
// SLAVE0 on IMU1 (MPU6000)
#define SPI_SELECT_SLAVE0_PORT PAL_PORT(LINE_IMU_CS)
#define SPI_SELECT_SLAVE0_PIN PAL_PAD(LINE_IMU_CS)
// SLAVE1 on SDCARD
#define SPI_SELECT_SLAVE1_PORT PAL_PORT(LINE_SDCARD_CS)
#define SPI_SELECT_SLAVE1_PIN PAL_PAD(LINE_SDCARD_CS)
// SLAVE2 on OSD
#define SPI_SELECT_SLAVE2_PORT PAL_PORT(LINE_OSD_CS)
#define SPI_SELECT_SLAVE2_PIN PAL_PAD(LINE_OSD_CS)
/**
* Baro
*
* Apparently needed for backwards compatibility
* with the ancient onboard baro boards
*/
#ifndef USE_BARO_BOARD
#define USE_BARO_BOARD 0
#endif
/*
* Actuators for fixedwing
*/
/* Default actuators driver */
#define DEFAULT_ACTUATORS "subsystems/actuators/actuators_pwm.h"
#define ActuatorDefaultSet(_x,_y) ActuatorPwmSet(_x,_y)
#define ActuatorsDefaultInit() ActuatorsPwmInit()
#define ActuatorsDefaultCommit() ActuatorsPwmCommit()
#endif /* CONFIG_HOLYBRO_KAKUTE_F7_H */
File diff suppressed because it is too large Load Diff