基于STM32F765VI自定义ardupilot飞控板
硬件部分
确定板子传感器及外设接口
- IMU: BMI088 ICM20689
- MAG: RM3100
- BARO: MS5611
- FARM: FM25V01-G
- CAN: 2路
- USB: 1路
- SWD:1路
- UART:7路
- I2C: 2路
- 安全开关含灯:1路
- 指示灯:2个
- SD卡: 1路
根据板子功能定义引脚
参考STM32F765xx用户手册的GPIO复用部分结合STM32CubxMX软件对引脚进行预配置。
STM32CubeMX可对引脚冲突进行报错提示,较好的帮助我们完成引脚定义。如下图:完成了我们所需引脚定义且不存在冲突。
软件部分
HAL层硬件定义
定义硬件文件在工程目录下的libraries/AP_HAL_ChibiOS/hwdef路径,在该路径下添加一个文件夹,命名为 myfly , 此名称是自行取的飞控板名称,并在myfly目录下新建 hwdef.dat 和 hwdef_bl.dat 两个文件
以下是根据STM32CubeMX 定义好了引脚之后在软件上配置的代码
hwdef_bl.dat 文件
# hw definition file for processing by chibios_pins.py
# for myfly bootloader
# MCU class and specific type
MCU STM32F7xx STM32F765xx
# board ID for firmware load
APJ_BOARD_ID 166
# crystal frequency, setup to use external oscillator
OSCILLATOR_HZ 16000000
# flash size
FLASH_SIZE_KB 2048
# bootloader starts at zero offset
FLASH_RESERVE_START_KB 0
# the location where the bootloader will put the firmware
FLASH_BOOTLOADER_LOAD_KB 32
# order of UARTs (and USB). Allow bootloading on USB and telem1
SERIAL_ORDER OTG1 USART2 UART7
# PA10 IO-debug-console
PA11 OTG_FS_DM OTG1
PA12 OTG_FS_DP OTG1
# UART2 (telem1)
PD5 USART2_TX USART2
PD6 USART2_RX USART2
# UART7 (debug)
PA8 UART7_RX UART7
PA15 UART7_TX UART7
PA13 JTMS-SWDIO SWD
PA14 JTCK-SWCLK SWD
PD10 LED_BOOTLOADER OUTPUT LOW
define HAL_LED_ON 0
define HAL_USE_EMPTY_STORAGE 1
define HAL_STORAGE_SIZE 16384
# Add CS pins to ensure they are high in bootloader
PB2 BMI088_ACC_CS CS
PC5 BMI088_GYRO_CS CS
PD4 ICM20689_CS CS
PB15 FRAM_CS CS CS
PD7 RM3100_CS CS
PC13 BARO_CS CS
hwdef.dat 文件的定义如下:
# hw definition file for processing by chibios_pins.py
# for myfly board
# MCU class and specific type
MCU STM32F7xx STM32F765xx
# board ID for firmware load
APJ_BOARD_ID 166
# crystal frequency, setup to use external oscillator
OSCILLATOR_HZ 16000000
FLASH_SIZE_KB 2048
# leave 2 sectors free
FLASH_RESERVE_START_KB 32
STM32_ST_USE_TIMER 12
define CH_CFG_ST_RESOLUTION 16
# two I2C bus
I2C_ORDER I2C2 I2C1
# order of UARTs (and USB)
SERIAL_ORDER OTG1 USART2 USART3 USART1 UART4 USART6 UART7 UART8
# tonealarm support
PB9 TIM11_CH1 TIM11 GPIO(32) ALARM
# USB debug-console
PA11 OTG_FS_DM OTG1
PA12 OTG_FS_DP OTG1
PA9 nVBUS INPUT PULLUP
#SWD
PA13 JTMS-SWDIO SWD
PA14 JTCK-SWCLK SWD
# SPI1 for IMU1 (BMI088)
PA5 SPI1_SCK SPI1
PA6 SPI1_MISO SPI1
PA7 SPI1_MOSI SPI1
PB2 BMI088_ACC_CS CS
PC5 BMI088_GYRO_CS CS
# SPI2 for IMU2 (ICM20689)
PD3 SPI2_SCK SPI2
PC2 SPI2_MISO SPI2
PC1 SPI2_MOSI SPI2
PD4 ICM20689_CS CS
# SPI3 for FRAM (FM25V01)
PB3 SPI3_SCK SPI3
PB4 SPI3_MISO SPI3
PB5 SPI3_MOSI SPI3
PB15 FRAM_CS CS CS
# SPI4 for BARO (ms5611) and MAG (RM3100)
PE2 SPI4_SCK SPI4
PE5 SPI4_MISO SPI4
PE6 SPI4_MOSI SPI4
PD7 RM3100_CS CS
PC13 BARO_CS CS
# I2C1
PB8 I2C1_SCL I2C1
PB7 I2C1_SDA I2C1
# I2C2
PB10 I2C2_SCL I2C2
PB11 I2C2_SDA I2C2
PA4 BATT_VOLTAGE_SENS ADC1 SCALE(1) #pin4
PB0 BATT_CURRENT_SENS ADC1 SCALE(1) #pin8
PB1 BATT_VOLTAGE_SENS2 ADC1 SCALE(1) # analog pin9
PC3 BATT_CURRENT_SENS2 ADC1 SCALE(1) # analog pin13
PC0 PRESSURE_SENS ADC1 SCALE(2) #pin10
define HAL_DEFAULT_AIRSPEED_PIN 10
# define default battery setup
define HAL_BATT_VOLT_PIN 4
define HAL_BATT_CURR_PIN 8
define HAL_BATT_VOLT_SCALE 34.6
define HAL_BATT_CURR_SCALE 21
# analog RSSI
PC4 RSSI_ADC ADC1 #pin14
define BOARD_RSSI_ANA_PIN 11
PD10 LED0 OUTPUT LOW GPIO(90) # blue
PD11 LED1 OUTPUT LOW GPIO(91) # green
define HAL_GPIO_A_LED_PIN 91
define HAL_GPIO_B_LED_PIN 90
define HAL_GPIO_LED_OFF 1
# USART1 (GPS1)
PA10 USART1_RX USART1
PB14 USART1_TX USART1
# USART2 (telem1)
PD5 USART2_TX USART2 NODMA
PD6 USART2_RX USART2 NODMA
# USART3 (telem2)
PD9 USART3_RX USART3 NODMA
PD8 USART3_TX USART3 NODMA
# UART4 (GPS2)
PA0 UART4_TX UART4 NODMA
PA1 UART4_RX UART4 NODMA
# UART5 (RX only, for ESC telem), disabled for now until we add uartH support
# PB8 UART5_RX UART5 NODMA
# USART6 (RC input), SERIAL7
PC7 TIM3_CH2 TIM3 RCININT FLOAT LOW
PC6 USART6_TX USART6 NODMA
# as an alternative config setup the RX6 pin as a uart. This allows
# for bi-directional UART based receiver protocols such as FPort
# without any extra hardware
PC7 USART6_RX USART6 NODMA ALT(1)
# UART7 (debug)
PA8 UART7_RX UART7
PA15 UART7_TX UART7
# UART8 (spare)
PE0 UART8_RX UART8 NODMA
PE1 UART8_TX UART8 NODMA
# CAN1 bus
PD1 CAN1_TX CAN1
PD0 CAN1_RX CAN1
# CAN2 bus
PB6 CAN2_TX CAN2
PB12 CAN2_RX CAN2
# Motors
PD12 TIM4_CH1 TIM4 PWM(1) GPIO(50)
PD13 TIM4_CH2 TIM4 PWM(2) GPIO(51)
PD14 TIM4_CH3 TIM4 PWM(3) GPIO(52)
PD15 TIM4_CH4 TIM4 PWM(4) GPIO(53)
PE9 TIM1_CH1 TIM1 PWM(5) GPIO(54)
PE11 TIM1_CH2 TIM1 PWM(6) GPIO(55)
PE13 TIM1_CH3 TIM1 PWM(7) GPIO(56)
PE14 TIM1_CH4 TIM1 PWM(8) GPIO(57)
PA2 TIM9_CH1 TIM9 PWM(9) GPIO(58) NODMA
PA3 TIM9_CH2 TIM9 PWM(10) GPIO(59) NODMA
# microSD support
PC8 SDMMC_D0 SDMMC1
PC9 SDMMC_D1 SDMMC1
PC10 SDMMC_D2 SDMMC1
PC11 SDMMC_D3 SDMMC1
PC12 SDMMC_CK SDMMC1
PD2 SDMMC_CMD SDMMC1
# setup safety switch
PE3 LED_SAFETY OUTPUT
PE4 SAFETY_IN INPUT PULLDOWN
DMA_PRIORITY SDMMC* UART8* ADC* SPI* TIM*
define HAL_STORAGE_SIZE 16384
define STORAGE_FLASH_PAGE 1
# spi devices
SPIDEV ms5611 SPI4 DEVID1 BARO_CS MODE3 20*MHZ 20*MHZ
SPIDEV rm3100 SPI4 DEVID2 RM3100_CS MODE3 2*MHZ 8*MHZ
SPIDEV icm20689 SPI2 DEVID1 ICM20689_CS MODE3 2*MHZ 8*MHZ
SPIDEV bmi088_g SPI1 DEVID1 BMI088_GYRO_CS MODE3 10*MHZ 10*MHZ
SPIDEV bmi088_a SPI1 DEVID2 BMI088_ACC_CS MODE3 10*MHZ 10*MHZ
SPIDEV ramtron SPI3 DEVID1 FRAM_CS MODE3 8*MHZ 8*MHZ
# no built-in compass, but probe the i2c bus for all possible
# external compass types
define ALLOW_ARM_NO_COMPASS
define HAL_COMPASS_DEFAULT HAL_COMPASS_NONE
define HAL_COMPASS_AUTO_ROT_DEFAULT 2
# allow to have have a dedicated safety switch pin
define HAL_HAVE_SAFETY_SWITCH 1
# up to 2 IMUs
IMU Invensense SPI:icm20689 ROTATION_NONE
# 3rd could be BMMI055 or BMI088
IMU BMI088 SPI:bmi088_a SPI:bmi088_g ROTATION_ROLL_180_YAW_90
define HAL_DEFAULT_INS_FAST_SAMPLE 1
define INS_MAX_INSTANCES 2
# one BARO, multiple possible choices for different
BARO MS56XX SPI:ms5611
BARO MS56XX I2C:0:0x77
define HAL_WITH_RAMTRON 1
define HAL_OS_FATFS_IO 1
define HAL_BOARD_LOG_DIRECTORY "/Myfly/LOGS"
define HAL_BOARD_TERRAIN_DIRECTORY "/Myfly/TERRAIN"
define BOARD_PWM_COUNT_DEFAULT 10
编译测试
在工程目录下采用指令下面指令配置目标板子且配置成bootloader目标
./waf configure --board myfly --bootloader
然后使用下面指令编译bootloader
./waf bootloader
生成的文件在工程目录下的build/myfly/bin文件夹内
编译APP固件,配置板子目标
./waf configure --board myfly
编译固件
./waf --targets bin/arducopter
到这里就完成了飞控整体配置,待烧录验证功能是否完整。