diff --git a/src/main/drivers/serial_softserial.c b/src/main/drivers/serial_softserial.c index aaf0b2a212..6789d70ce1 100644 --- a/src/main/drivers/serial_softserial.c +++ b/src/main/drivers/serial_softserial.c @@ -254,9 +254,10 @@ serialPort_t *openSoftSerial(softSerialPortIndex_e portIndex, serialReceiveCallb if (options & SERIAL_BIDIR) { // If RX and TX pins are both assigned, we CAN use either with a timer. // However, for consistency with hardware UARTs, we only use TX pin, - // and this pin must have a timer. - if (!timerTx) + // and this pin must have a timer, and it should not be N-Channel. + if (!timerTx || (timerTx->output & TIMER_OUTPUT_N_CHANNEL)) { return NULL; + } softSerial->timerHardware = timerTx; softSerial->txIO = txIO; @@ -264,9 +265,10 @@ serialPort_t *openSoftSerial(softSerialPortIndex_e portIndex, serialReceiveCallb IOInit(txIO, OWNER_SERIAL_TX, RESOURCE_INDEX(portIndex + RESOURCE_SOFT_OFFSET)); } else { if (mode & MODE_RX) { - // Need a pin & a timer on RX - if (!(tagRx && timerRx)) + // Need a pin & a timer on RX. Channel should not be N-Channel. + if (!timerRx || (timerRx->output & TIMER_OUTPUT_N_CHANNEL)) { return NULL; + } softSerial->rxIO = rxIO; softSerial->timerHardware = timerRx;