diff --git a/src/main/config/config.c b/src/main/config/config.c index c825fb5af5..acebf9106e 100755 --- a/src/main/config/config.c +++ b/src/main/config/config.c @@ -511,9 +511,21 @@ void validateAndFixConfig(void) } -#if defined(STM32F10X) - // led strip needs the same timer as softserial - if (feature(FEATURE_SOFTSERIAL)) { +#if defined(LED_STRIP) && (defined(USE_SOFTSERIAL1) || defined(USE_SOFTSERIAL2)) + if (feature(FEATURE_SOFTSERIAL) && ( +#ifdef USE_SOFTSERIAL1 + (LED_STRIP_TIMER == SOFTSERIAL_1_TIMER) +#else + 0 +#endif + || +#ifdef USE_SOFTSERIAL2 + (LED_STRIP_TIMER == SOFTSERIAL_2_TIMER) +#else + 0 +#endif + )) { + // led strip needs the same timer as softserial featureClear(FEATURE_LED_STRIP); } #endif diff --git a/src/main/drivers/pwm_mapping.c b/src/main/drivers/pwm_mapping.c index dc169b45a7..c23ae3860d 100755 --- a/src/main/drivers/pwm_mapping.c +++ b/src/main/drivers/pwm_mapping.c @@ -283,43 +283,15 @@ pwmOutputConfiguration_t *pwmInit(drv_pwm_config_t *init) continue; #endif -#ifdef CC3D - // skip SoftSerial port - if (init->useSoftSerial && (timerIndex == PWM3 || timerIndex == PWM4)) - continue; -else -#ifdef STM32F10X - // skip softSerial ports - if (init->useSoftSerial && (timerIndex == PWM5 || timerIndex == PWM6 || timerIndex == PWM7 || timerIndex == PWM8)) +#ifdef SOFTSERIAL1_TIMER + if (init->useSoftSerial && timerHardwarePtr->tim == SOFTSERIAL1_TIMER) continue; #endif -#endif - -#ifdef CHEBUZZF3 - // skip softSerial ports - // PWM4 can no-longer be used since it uses the same timer as PWM5 and PWM6 - if (init->useSoftSerial && (timerIndex == PWM4 || timerIndex == PWM5 || timerIndex == PWM6 || timerIndex == PWM7 || timerIndex == PWM8)) +#ifdef SOFTSERIAL2_TIMER + if (init->useSoftSerial && timerHardwarePtr->tim == SOFTSERIAL2_TIMER) continue; #endif -#if defined(STM32F3DISCOVERY) && !defined(CHEBUZZF3) - // skip softSerial ports - if (init->useSoftSerial && (timerIndex == PWM9 || timerIndex == PWM10 || timerIndex == PWM11 || timerIndex == PWM12)) - continue; -#endif - -#if defined(STM32F10X) && !defined(CC3D) -#define LED_STRIP_TIMER TIM3 -#endif - -#if defined(CC3D) -#define LED_STRIP_TIMER TIM3 -#endif - -#if defined(STM32F303) -#define LED_STRIP_TIMER TIM16 -#endif - #ifdef LED_STRIP_TIMER // skip LED Strip output if (init->useLEDStrip && timerHardwarePtr->tim == LED_STRIP_TIMER) diff --git a/src/main/drivers/serial_softserial.c b/src/main/drivers/serial_softserial.c index 3b7846a033..c4b56cf09c 100644 --- a/src/main/drivers/serial_softserial.c +++ b/src/main/drivers/serial_softserial.c @@ -32,30 +32,15 @@ #include "serial.h" #include "serial_softserial.h" -#if defined(CC3D) -#define SOFTSERIAL_1_TIMER_RX_HARDWARE 2 // PWM 3 -#define SOFTSERIAL_1_TIMER_TX_HARDWARE 3 // PWM 4 -#else - -#if defined(STM32F10X) || defined(CHEBUZZF3) -#define SOFTSERIAL_1_TIMER_RX_HARDWARE 4 // PWM 5 -#define SOFTSERIAL_1_TIMER_TX_HARDWARE 5 // PWM 6 -#define SOFTSERIAL_2_TIMER_RX_HARDWARE 6 // PWM 7 -#define SOFTSERIAL_2_TIMER_TX_HARDWARE 7 // PWM 8 -#endif - -#if defined(STM32F303) && !defined(CHEBUZZF3) -#define SOFTSERIAL_1_TIMER_RX_HARDWARE 8 // PWM 9 -#define SOFTSERIAL_1_TIMER_TX_HARDWARE 9 // PWM 10 -#define SOFTSERIAL_2_TIMER_RX_HARDWARE 10 // PWM 11 -#define SOFTSERIAL_2_TIMER_TX_HARDWARE 11 // PWM 12 -#endif -#endif - #define RX_TOTAL_BITS 10 #define TX_TOTAL_BITS 10 +#if defined(USE_SOFTSERIAL1) && defined(USE_SOFTSERIAL2) #define MAX_SOFTSERIAL_PORTS 2 +#else +#define MAX_SOFTSERIAL_PORTS 1 +#endif + softSerial_t softSerialPorts[MAX_SOFTSERIAL_PORTS]; void onSerialTimer(uint8_t portIndex, captureCompare_t capture); diff --git a/src/main/drivers/timer.c b/src/main/drivers/timer.c index db9bc9e5fd..536942294a 100644 --- a/src/main/drivers/timer.c +++ b/src/main/drivers/timer.c @@ -99,8 +99,8 @@ static const TIM_TypeDef const *timers[MAX_TIMERS] = { const timerHardware_t timerHardware[USABLE_TIMER_CHANNEL_COUNT] = { { TIM4, GPIOB, Pin_6, TIM_Channel_1, TIM4_IRQn, 0, Mode_IPD}, // S1_IN { TIM3, GPIOB, Pin_5, TIM_Channel_2, TIM3_IRQn, 0, Mode_IPD}, // S2_IN - GPIO_PartialRemap_TIM3 - { TIM3, GPIOB, Pin_0, TIM_Channel_3, TIM3_IRQn, 0, Mode_IPD}, // S3_IN - { TIM3, GPIOB, Pin_1, TIM_Channel_4, TIM3_IRQn, 0, Mode_IPD}, // S4_IN + { TIM3, GPIOB, Pin_0, TIM_Channel_3, TIM3_IRQn, 0, Mode_IPD}, // S3_IN - SoftSerial RX + { TIM3, GPIOB, Pin_1, TIM_Channel_4, TIM3_IRQn, 0, Mode_IPD}, // S4_IN - SoftSerial TX { TIM2, GPIOA, Pin_0, TIM_Channel_1, TIM2_IRQn, 0, Mode_IPD}, // S5_IN { TIM2, GPIOA, Pin_1, TIM_Channel_2, TIM2_IRQn, 0, Mode_IPD}, // S6_IN @@ -108,7 +108,7 @@ const timerHardware_t timerHardware[USABLE_TIMER_CHANNEL_COUNT] = { { TIM4, GPIOB, Pin_8, TIM_Channel_3, TIM4_IRQn, 1, GPIO_Mode_AF_PP}, // S2_OUT { TIM4, GPIOB, Pin_7, TIM_Channel_2, TIM4_IRQn, 1, GPIO_Mode_AF_PP}, // S3_OUT { TIM1, GPIOA, Pin_8, TIM_Channel_1, TIM1_CC_IRQn, 1, GPIO_Mode_AF_PP}, // S4_OUT - { TIM3, GPIOB, Pin_4, TIM_Channel_1, TIM3_IRQn, 1, GPIO_Mode_AF_PP}, // S5_OUT - GPIO_PartialRemap_TIM3 + { TIM3, GPIOB, Pin_4, TIM_Channel_1, TIM3_IRQn, 1, GPIO_Mode_AF_PP}, // S5_OUT - GPIO_PartialRemap_TIM3 - LED Strip { TIM2, GPIOA, Pin_2, TIM_Channel_3, TIM2_IRQn, 1, GPIO_Mode_AF_PP}, // S6_OUT }; diff --git a/src/main/target/CC3D/target.h b/src/main/target/CC3D/target.h index 0758d05dec..df70aaa425 100644 --- a/src/main/target/CC3D/target.h +++ b/src/main/target/CC3D/target.h @@ -49,6 +49,11 @@ #define USE_SOFTSERIAL1 #define SERIAL_PORT_COUNT 3 +#define SOFTSERIAL_1_TIMER TIM3 +#define SOFTSERIAL_1_TIMER_RX_HARDWARE 2 // PWM 3 +#define SOFTSERIAL_1_TIMER_TX_HARDWARE 3 // PWM 4 + + #define USART3_RX_PIN Pin_11 #define USART3_TX_PIN Pin_10 #define USART3_GPIO GPIOB @@ -66,6 +71,8 @@ #define GPS #define LED_STRIP +#define LED_STRIP_TIMER TIM3 + #define TELEMETRY #define SERIAL_RX #define AUTOTUNE diff --git a/src/main/target/CHEBUZZF3/target.h b/src/main/target/CHEBUZZF3/target.h index 6c9f0170bb..cacaa9b621 100644 --- a/src/main/target/CHEBUZZF3/target.h +++ b/src/main/target/CHEBUZZF3/target.h @@ -55,6 +55,8 @@ #define GPS #define LED_STRIP +#define LED_STRIP_TIMER TIM16 + #define TELEMETRY #define SERIAL_RX #define AUTOTUNE diff --git a/src/main/target/EUSTM32F103RC/target.h b/src/main/target/EUSTM32F103RC/target.h index e7de9f4cb0..29e4d33939 100644 --- a/src/main/target/EUSTM32F103RC/target.h +++ b/src/main/target/EUSTM32F103RC/target.h @@ -60,6 +60,13 @@ #define USE_SOFTSERIAL2 #define SERIAL_PORT_COUNT 4 +#define SOFTSERIAL_1_TIMER TIM3 +#define SOFTSERIAL_1_TIMER_RX_HARDWARE 4 // PWM 5 +#define SOFTSERIAL_1_TIMER_TX_HARDWARE 5 // PWM 6 +#define SOFTSERIAL_2_TIMER TIM3 +#define SOFTSERIAL_2_TIMER_RX_HARDWARE 6 // PWM 7 +#define SOFTSERIAL_2_TIMER_TX_HARDWARE 7 // PWM 8 + #define USE_I2C #define I2C_DEVICE (I2CDEV_2) @@ -71,6 +78,8 @@ #define GPS #define LED_STRIP +#define LED_STRIP_TIMER TIM3 + #define TELEMETRY #define SERIAL_RX #define AUTOTUNE diff --git a/src/main/target/MASSIVEF3/target.h b/src/main/target/MASSIVEF3/target.h index 162560e5cf..3cf4c3cece 100644 --- a/src/main/target/MASSIVEF3/target.h +++ b/src/main/target/MASSIVEF3/target.h @@ -56,7 +56,6 @@ #define SENSORS_SET (SENSOR_ACC) #define GPS -#define LED_STRIP #define TELEMETRY #define SERIAL_RX #define AUTOTUNE diff --git a/src/main/target/NAZE/target.h b/src/main/target/NAZE/target.h index 49c13c6e16..51bfd76415 100644 --- a/src/main/target/NAZE/target.h +++ b/src/main/target/NAZE/target.h @@ -86,6 +86,13 @@ #define USE_SOFTSERIAL2 #define SERIAL_PORT_COUNT 4 +#define SOFTSERIAL_1_TIMER TIM3 +#define SOFTSERIAL_1_TIMER_RX_HARDWARE 4 // PWM 5 +#define SOFTSERIAL_1_TIMER_TX_HARDWARE 5 // PWM 6 +#define SOFTSERIAL_2_TIMER TIM3 +#define SOFTSERIAL_2_TIMER_RX_HARDWARE 6 // PWM 7 +#define SOFTSERIAL_2_TIMER_TX_HARDWARE 7 // PWM 8 + #define USE_I2C #define I2C_DEVICE (I2CDEV_2) @@ -103,6 +110,8 @@ #define GPS #define LED_STRIP +#define LED_STRIP_TIMER TIM3 + #define TELEMETRY #define SERIAL_RX #define AUTOTUNE diff --git a/src/main/target/NAZE32PRO/target.h b/src/main/target/NAZE32PRO/target.h index 17a0cda94e..12ae41b82f 100644 --- a/src/main/target/NAZE32PRO/target.h +++ b/src/main/target/NAZE32PRO/target.h @@ -43,7 +43,6 @@ #define SENSORS_SET (SENSOR_ACC) #define GPS -#define LED_STRIP #define TELEMETRY #define SERIAL_RX #define AUTOTUNE diff --git a/src/main/target/OLIMEXINO/target.h b/src/main/target/OLIMEXINO/target.h index 684bfd85cd..c5afa524d8 100644 --- a/src/main/target/OLIMEXINO/target.h +++ b/src/main/target/OLIMEXINO/target.h @@ -71,6 +71,13 @@ #define USE_SOFTSERIAL2 #define SERIAL_PORT_COUNT 4 +#define SOFTSERIAL_1_TIMER TIM3 +#define SOFTSERIAL_1_TIMER_RX_HARDWARE 4 // PWM 5 +#define SOFTSERIAL_1_TIMER_TX_HARDWARE 5 // PWM 6 +#define SOFTSERIAL_2_TIMER TIM3 +#define SOFTSERIAL_2_TIMER_RX_HARDWARE 6 // PWM 7 +#define SOFTSERIAL_2_TIMER_TX_HARDWARE 7 // PWM 8 + #define USE_I2C #define I2C_DEVICE (I2CDEV_2) @@ -82,6 +89,8 @@ #define GPS #define LED_STRIP +#define LED_STRIP_TIMER TIM3 + #define TELEMETRY #define SERIAL_RX #define AUTOTUNE diff --git a/src/main/target/STM32F3DISCOVERY/target.h b/src/main/target/STM32F3DISCOVERY/target.h index d679a9ab34..18d125635c 100644 --- a/src/main/target/STM32F3DISCOVERY/target.h +++ b/src/main/target/STM32F3DISCOVERY/target.h @@ -58,6 +58,7 @@ #define GPS #define LED_STRIP +#define LED_STRIP_TIMER TIM16 #define TELEMETRY #define SERIAL_RX #define AUTOTUNE