From 6dba827d0a3f4587f60b6cdbfe9ee64ec831db64 Mon Sep 17 00:00:00 2001 From: jannes Date: Wed, 16 Jan 2019 20:11:35 +0100 Subject: [PATCH 1/3] nox-board-support --- Makefile | 2 +- src/main/target/NOX/target.c | 39 +++++++++ src/main/target/NOX/target.h | 147 ++++++++++++++++++++++++++++++++++ src/main/target/NOX/target.mk | 11 +++ 4 files changed, 198 insertions(+), 1 deletion(-) create mode 100755 src/main/target/NOX/target.c create mode 100755 src/main/target/NOX/target.h create mode 100755 src/main/target/NOX/target.mk diff --git a/Makefile b/Makefile index ecf1df11cfa..3c466b5978c 100644 --- a/Makefile +++ b/Makefile @@ -121,7 +121,7 @@ endif GROUP_1_TARGETS := ALIENFLIGHTF3 ALIENFLIGHTF4 AIRHEROF3 AIRHEROF3_QUAD COLIBRI_RACE LUX_RACE SPARKY REVO SPARKY2 COLIBRI KISSFC FALCORE FF_F35_LIGHTNING FF_FORTINIF4 FF_PIKOF4 FF_PIKOF4OSD GROUP_2_TARGETS := SPRACINGF3 SPRACINGF3EVO SPRACINGF3EVO_1SS SPRACINGF3MINI SPRACINGF4EVO CLRACINGF4AIR CLRACINGF4AIRV2 BEEROTORF4 BETAFLIGHTF3 BETAFLIGHTF4 PIKOBLX SPRACINGF3NEO GROUP_3_TARGETS := OMNIBUS AIRBOTF4 BLUEJAYF4 OMNIBUSF4 OMNIBUSF4PRO OMNIBUSF4V3 FIREWORKSV2 SPARKY2 MATEKF405 OMNIBUSF7 DYSF4PRO OMNIBUSF4PRO_LEDSTRIPM5 OMNIBUSF7NXT OMNIBUSF7V2 ASGARD32F4 -GROUP_4_TARGETS := ANYFC ANYFCF7 ANYFCF7_EXTERNAL_BARO ANYFCM7 ALIENFLIGHTNGF7 PIXRACER YUPIF4 YUPIF4MINI YUPIF4R2 YUPIF7 MATEKF405SE MATEKF411 MATEKF722 MATEKF405OSD MATEKF405_SERVOS6 +GROUP_4_TARGETS := ANYFC ANYFCF7 ANYFCF7_EXTERNAL_BARO ANYFCM7 ALIENFLIGHTNGF7 PIXRACER YUPIF4 YUPIF4MINI YUPIF4R2 YUPIF7 MATEKF405SE MATEKF411 MATEKF722 MATEKF405OSD MATEKF405_SERVOS6 NOX GROUP_OTHER_TARGETS := $(filter-out $(GROUP_1_TARGETS) $(GROUP_2_TARGETS) $(GROUP_3_TARGETS) $(GROUP_4_TARGETS), $(VALID_TARGETS)) REVISION = $(shell git rev-parse --short HEAD) diff --git a/src/main/target/NOX/target.c b/src/main/target/NOX/target.c new file mode 100755 index 00000000000..c3c9af9959a --- /dev/null +++ b/src/main/target/NOX/target.c @@ -0,0 +1,39 @@ +/* + * This file is part of Cleanflight. + * + * Cleanflight is free software: you can redistribute it and/or modify + * it 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. + * + * Cleanflight 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 Cleanflight. If not, see . + */ + +#include +#include + +#include "drivers/io.h" + +#include "drivers/dma.h" +#include "drivers/timer.h" + +const timerHardware_t timerHardware[] = { + { TIM2, IO_TAG(PB10), TIM_Channel_3, 0, IOCFG_AF_PP_PD, GPIO_AF_TIM2, TIM_USE_PPM }, //PPM + { TIM2, IO_TAG(PA0), TIM_Channel_1, 1, IOCFG_AF_PP_PD, GPIO_AF_TIM2, TIM_USE_LED}, //2812LED + + { TIM5, IO_TAG(PA1), TIM_Channel_2, 1, IOCFG_AF_PP_PD, GPIO_AF_TIM5, TIM_USE_MC_MOTOR | TIM_USE_FW_MOTOR }, //S1 + { TIM1, IO_TAG(PA7), TIM_Channel_1, 1, IOCFG_AF_PP_PD, GPIO_AF_TIM1, TIM_USE_MC_MOTOR | TIM_USE_FW_MOTOR }, //S2 + { TIM4, IO_TAG(PB8), TIM_Channel_3, 1, IOCFG_AF_PP_PD, GPIO_AF_TIM4, TIM_USE_MC_MOTOR | TIM_USE_FW_SERVO }, //S3 + { TIM3, IO_TAG(PB1), TIM_Channel_4, 1, IOCFG_AF_PP_PD, GPIO_AF_TIM3, TIM_USE_MC_MOTOR | TIM_USE_FW_SERVO }, //S4 + + { TIM9, IO_TAG(PA2), TIM_Channel_1, 0, IOCFG_AF_PP_PD, GPIO_AF_TIM9, TIM_USE_ANY }, //UART2 TX + { TIM9, IO_TAG(PA3), TIM_Channel_2, 0, IOCFG_AF_PP_PD, GPIO_AF_TIM9, TIM_USE_ANY }, //UART2 RX +}; + +const int timerHardwareCount = sizeof(timerHardware) / sizeof(timerHardware[0]); \ No newline at end of file diff --git a/src/main/target/NOX/target.h b/src/main/target/NOX/target.h new file mode 100755 index 00000000000..7951a76183c --- /dev/null +++ b/src/main/target/NOX/target.h @@ -0,0 +1,147 @@ +/* + * This file is part of Cleanflight. + * + * Cleanflight is free software: you can redistribute it and/or modify + * it 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. + * + * Cleanflight 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 Cleanflight. If not, see . + */ + +#pragma once + + +#define TARGET_BOARD_IDENTIFIER "NOX1" +#define USBD_PRODUCT_STRING "NoxF4V1" + +#define LED0 PA4 + +#define BEEPER PC13 +#define BEEPER_INVERTED + +#define I2C2_SCL NONE +#define I2C2_SDA NONE + +// *************** SPI ********************** +#define USE_SPI +#define USE_SPI_DEVICE_1 +#define SPI1_SCK_PIN PB3 +#define SPI1_MISO_PIN PB4 +#define SPI1_MOSI_PIN PB5 + +#define USE_SPI_DEVICE_2 +#define SPI2_SCK_PIN PB13 +#define SPI2_MISO_PIN PB14 +#define SPI2_MOSI_PIN PB15 + + +// *************** SPI Gyro & ACC ********************** +#define MPU6000_CS_PIN PB12 +#define MPU6000_SPI_BUS BUS_SPI2 + +#define USE_EXTI +#define GYRO_INT_EXTI PA8 +#define USE_MPU_DATA_READY_SIGNAL + +#define USE_GYRO +#define USE_GYRO_MPU6000 + +#define USE_ACC +#define USE_ACC_MPU6000 + +// *************** SPI BARO ***************************** +#define USE_BARO +#define USE_BARO_BMP280 +#define USE_BARO_SPI_BMP280 +#define BMP280_SPI_BUS BUS_SPI2 +#define BMP280_CS_PIN PA9 + +// *************** SPI OSD ***************************** +#define USE_OSD +#define USE_MAX7456 +#define MAX7456_SPI_BUS BUS_SPI2 +#define MAX7456_CS_PIN PA10 +//#define MAX7456_SPI_CLK (SPI_CLOCK_STANDARD*2) +//#define MAX7456_RESTORE_CLK (SPI_CLOCK_FAST) + +// *************** SPI FLASH ************************** +#define USE_FLASHFS +#define USE_FLASH_M25P16 +#define M25P16_CS_PIN PA15 +#define M25P16_SPI_BUS BUS_SPI1 +#define ENABLE_BLACKBOX_LOGGING_ON_SPIFLASH_BY_DEFAULT + +// *************** UART ***************************** +#define USE_UART_INVERTER + +#define USE_VCP + +#define USE_UART1 +#define UART1_TX_PIN PB6 +#define UART1_RX_PIN PB7 + +#define USE_UART2 +#define UART2_TX_PIN PA2 +#define UART2_RX_PIN PA3 + +// #define INVERTER_PIN_UART2 PC14 +#define INVERTER_PIN_UART2_RX PC14 // PC14 used as inverter select GPIO + +#define USE_SOFTSERIAL1 +#define SOFTSERIAL_1_TX_PIN PA2 // Workaround for softserial not initializing with only RX +#define SOFTSERIAL_1_RX_PIN PA2 // Backdoor timer on UART2_TX, used for ESC telemetry + +#define SERIAL_PORT_COUNT 4 //VCP, USART1, USART2, SOFTSERIAL1 + +#define DEFAULT_RX_TYPE RX_TYPE_SERIAL +#define SERIALRX_PROVIDER SERIALRX_SBUS +#define SERIALRX_UART SERIAL_PORT_USART2 + +// *************** ADC ***************************** +#define USE_ADC +#define ADC_INSTANCE ADC1 +#define ADC_CHANNEL_1_PIN NONE +#define ADC_CHANNEL_2_PIN PA5 +#define ADC_CHANNEL_3_PIN NONE + +#define CURRENT_METER_ADC_CHANNEL ADC_CHN_1 +#define VBAT_ADC_CHANNEL ADC_CHN_2 +#define RSSI_ADC_CHANNEL ADC_CHN_3 +/* +#define ADC_INSTANCE ADC1 +#define ADC1_DMA_STREAM DMA2_Stream0 +#define ADC_CHANNEL_1_PIN PA5 +#define ADC_CHANNEL_2_PIN NONE +//#define ADC_CHANNEL_3_PIN PA0 +#define VBAT_ADC_CHANNEL ADC_CHN_1 +//#define CURRENT_METER_ADC_CHANNEL ADC_CHN_2 +//#define RSSI_ADC_CHANNEL ADC_CHN_3 +*/ +// *************** LED2812 ************************ +#define USE_LED_STRIP +#define WS2811_PIN PA0 +#define WS2811_DMA_HANDLER_IDENTIFER DMA2_ST1_HANDLER +#define WS2811_DMA_STREAM DMA2_Stream1 +#define WS2811_DMA_CHANNEL DMA_Channel_6 + +// *************** OTHERS ************************* +#define DEFAULT_FEATURES (FEATURE_OSD | FEATURE_SOFTSERIAL | FEATURE_VBAT) + + +// #define USE_SPEKTRUM_BIND +// #define BIND_PIN PA10 // RX1 + +#define USE_SERIAL_4WAY_BLHELI_INTERFACE + +#define TARGET_IO_PORTA (0xffff & ~(BIT(14)|BIT(13))) +#define TARGET_IO_PORTB (0xffff & ~(BIT(2)|BIT(11))) +#define TARGET_IO_PORTC (BIT(13)|BIT(14)|BIT(15)) + +#define MAX_PWM_OUTPUT_PORTS 4 diff --git a/src/main/target/NOX/target.mk b/src/main/target/NOX/target.mk new file mode 100755 index 00000000000..80f7f2d1c00 --- /dev/null +++ b/src/main/target/NOX/target.mk @@ -0,0 +1,11 @@ +F411_TARGETS += $(TARGET) +FEATURES += VCP ONBOARDFLASH + +TARGET_SRC = \ + drivers/accgyro/accgyro_mpu6000.c \ + drivers/barometer/barometer_bmp280.c \ + drivers/light_ws2811strip.c \ + drivers/light_ws2811strip_stdperiph.c \ + drivers/flash_m25p16.c \ + drivers/max7456.c + From 910a9a36abfb07752f052d23439bc687a244e058 Mon Sep 17 00:00:00 2001 From: jannes Date: Wed, 16 Jan 2019 21:08:49 +0100 Subject: [PATCH 2/3] nox-board-support --- src/main/target/NOX/target.mk | 1 - 1 file changed, 1 deletion(-) diff --git a/src/main/target/NOX/target.mk b/src/main/target/NOX/target.mk index 80f7f2d1c00..d0c27801a35 100755 --- a/src/main/target/NOX/target.mk +++ b/src/main/target/NOX/target.mk @@ -5,7 +5,6 @@ TARGET_SRC = \ drivers/accgyro/accgyro_mpu6000.c \ drivers/barometer/barometer_bmp280.c \ drivers/light_ws2811strip.c \ - drivers/light_ws2811strip_stdperiph.c \ drivers/flash_m25p16.c \ drivers/max7456.c From b9c2d7ecc0193277935205f7c95594fe1802d13b Mon Sep 17 00:00:00 2001 From: jannes Date: Thu, 17 Jan 2019 12:02:33 +0100 Subject: [PATCH 3/3] nox-board-support --- docs/Board - NOX.md | 46 ++++++++++++++++++++++++++++++++++++ src/main/target/NOX/target.c | 16 ++++++------- 2 files changed, 54 insertions(+), 8 deletions(-) create mode 100755 docs/Board - NOX.md diff --git a/docs/Board - NOX.md b/docs/Board - NOX.md new file mode 100755 index 00000000000..a9553eabfa6 --- /dev/null +++ b/docs/Board - NOX.md @@ -0,0 +1,46 @@ +# Board - [NOX](https://inavflight.com/shop/p/NOX) + +![Airbot]https://youtu.be/j3zIYFYZ_SQ +![Banggood](https://img.staticbg.com/thumb/view/oaupload/banggood/images/A5/01/79d28a2c-ef4b-4e4f-bab6-14edf66bbb23.jpg) +![Banggood]https://img.staticbg.com/images/oaupload/banggood/images/2E/C5/c14a1e86-4e58-4bc8-85de-8e344cb382b9.jpg) +![Banggood]https://img.staticbg.com/images/oaupload/banggood/images/42/F7/45a68ade-9be1-4fff-afec-bbdd45f0331d.jpg) + +## Airbot Specification: +* Betaflight OSD +* STM32F411 MCU +* MPU6000 Gyro - It's also replaceable +* Barometer +* 5V BEC with LC filter (500ma) +* 4000uf capacitors onboard - No Need for bulky caps +* 4in1 ESC + +* BLHeli32 - The 32-bit architecture that we've come to expect +* DSHOT 1200 +* 35A Per motor +* Telemetry Output functionality +* ESC upgradeable + +## Banggood Specification: +* Model: F4 Nox4 +* Version: Acro Version / Deluxe Version +* Acro Version: Without Barometer and Blackbox +* Deluxe Version: With Barometer and Blackbox +* CPU: STM32F411C +* MPU: MPU6000 +* Input Voltage: Support 2-4S Lipo Input +* Built-In Betaflight OSD +* Built-in 5V @ 3A BEC +* 3.3V +* Built-in LC Filter +* DShot, Proshot ESC +* Support Spektrum 1024 /2048 , SBUS, IBUS, PPM +* Size: 27x27mm +* Mounting Hole: 20x20mm , M2.5 +* Weight: 3.3g +* DSM / IBUS/SBUS Receiver, choose UART RX2 +* PPM Receiver, don't need choose UART Port + + +## Where to buy: +* [Airbot](https://store.myairbot.com/noxv2.html) +* [Banggood](https://www.banggood.com/nl/20x20mm-Betaflight-F4-Noxe-MPU6000-Flight-Controller-AIO-OSD-5V-BEC-Built-in-LC-Filter-for-RC-Drone-p-1310419.html) diff --git a/src/main/target/NOX/target.c b/src/main/target/NOX/target.c index c3c9af9959a..dd64b492834 100755 --- a/src/main/target/NOX/target.c +++ b/src/main/target/NOX/target.c @@ -24,16 +24,16 @@ #include "drivers/timer.h" const timerHardware_t timerHardware[] = { - { TIM2, IO_TAG(PB10), TIM_Channel_3, 0, IOCFG_AF_PP_PD, GPIO_AF_TIM2, TIM_USE_PPM }, //PPM - { TIM2, IO_TAG(PA0), TIM_Channel_1, 1, IOCFG_AF_PP_PD, GPIO_AF_TIM2, TIM_USE_LED}, //2812LED + DEF_TIM(TIM2, CH3, PB10, TIM_USE_PPM, 0, 0), //PPM + DEF_TIM(TIM2, CH1, PA0, TIM_USE_LED, 0, 0), //2812LED - { TIM5, IO_TAG(PA1), TIM_Channel_2, 1, IOCFG_AF_PP_PD, GPIO_AF_TIM5, TIM_USE_MC_MOTOR | TIM_USE_FW_MOTOR }, //S1 - { TIM1, IO_TAG(PA7), TIM_Channel_1, 1, IOCFG_AF_PP_PD, GPIO_AF_TIM1, TIM_USE_MC_MOTOR | TIM_USE_FW_MOTOR }, //S2 - { TIM4, IO_TAG(PB8), TIM_Channel_3, 1, IOCFG_AF_PP_PD, GPIO_AF_TIM4, TIM_USE_MC_MOTOR | TIM_USE_FW_SERVO }, //S3 - { TIM3, IO_TAG(PB1), TIM_Channel_4, 1, IOCFG_AF_PP_PD, GPIO_AF_TIM3, TIM_USE_MC_MOTOR | TIM_USE_FW_SERVO }, //S4 + DEF_TIM(TIM5, CH2, PA1, TIM_USE_MC_MOTOR | TIM_USE_FW_MOTOR, 0, 0), // S1_OUT + DEF_TIM(TIM1, CH1, PA7, TIM_USE_MC_MOTOR | TIM_USE_FW_MOTOR, 0, 0), // S2_OUT + DEF_TIM(TIM4, CH3, PB8, TIM_USE_MC_MOTOR | TIM_USE_FW_SERVO, 0, 0), // S3_OUT + DEF_TIM(TIM3, CH4, PB1, TIM_USE_MC_MOTOR | TIM_USE_FW_SERVO, 0, 0), // S4_OUT - { TIM9, IO_TAG(PA2), TIM_Channel_1, 0, IOCFG_AF_PP_PD, GPIO_AF_TIM9, TIM_USE_ANY }, //UART2 TX - { TIM9, IO_TAG(PA3), TIM_Channel_2, 0, IOCFG_AF_PP_PD, GPIO_AF_TIM9, TIM_USE_ANY }, //UART2 RX + DEF_TIM(TIM9, CH1, PA2, TIM_USE_ANY, 0, 0), //UART2 TX + DEF_TIM(TIM9, CH2, PA3, TIM_USE_ANY, 0, 0), //UART2 RX }; const int timerHardwareCount = sizeof(timerHardware) / sizeof(timerHardware[0]); \ No newline at end of file