@@ -51,7 +51,7 @@ bool SoftwareSerial::isValidGPIOpin(int8_t pin) {
51
51
return (pin >= 0 && pin <= 16 ) && !isFlashInterfacePin (pin);
52
52
#elif defined(ESP32)
53
53
return (pin >= 0 && pin <= 5 ) || (pin >= 12 && pin <= 19 ) ||
54
- (pin >= 21 && pin <= 23 ) || (pin >= 25 && pin <= 27 ) || (pin >= 32 && pin < 39 );
54
+ (pin >= 21 && pin <= 23 ) || (pin >= 25 && pin <= 27 ) || (pin >= 32 && pin <= 39 );
55
55
#else
56
56
return true ;
57
57
#endif
@@ -61,12 +61,26 @@ bool SoftwareSerial::isValidRxGPIOpin(int8_t pin) {
61
61
return isValidGPIOpin (pin)
62
62
#if defined(ESP8266)
63
63
&& (pin != 16 )
64
- #elif defined(ESP32)
64
+ #endif
65
+ ;
66
+ }
67
+
68
+ bool SoftwareSerial::isValidTxGPIOpin (int8_t pin) {
69
+ return isValidGPIOpin (pin)
70
+ #if defined(ESP32)
65
71
&& (pin < 34 )
66
72
#endif
67
73
;
68
74
}
69
75
76
+ bool SoftwareSerial::hasRxGPIOPullUp (int8_t pin) {
77
+ #if defined(ESP32)
78
+ return !(pin >= 34 && pin <= 39 );
79
+ #else
80
+ return true ;
81
+ #endif
82
+ }
83
+
70
84
void SoftwareSerial::begin (uint32_t baud, SoftwareSerialConfig config,
71
85
int8_t rxPin, int8_t txPin,
72
86
bool invert, int bufCapacity, int isrBufCapacity) {
@@ -91,10 +105,10 @@ void SoftwareSerial::begin(uint32_t baud, SoftwareSerialConfig config,
91
105
isrBufCapacity : m_buffer->capacity () * (2 + m_dataBits + static_cast <bool >(m_parityMode))));
92
106
if (m_buffer && (!m_parityMode || m_parityBuffer) && m_isrBuffer) {
93
107
m_rxValid = true ;
94
- pinMode (m_rxPin, INPUT_PULLUP);
108
+ pinMode (m_rxPin, hasRxGPIOPullUp (m_rxPin) ? INPUT_PULLUP : INPUT );
95
109
}
96
110
}
97
- if (isValidGPIOpin (m_txPin)) {
111
+ if (isValidTxGPIOpin (m_txPin)) {
98
112
m_txValid = true ;
99
113
if (!m_oneWire) {
100
114
pinMode (m_txPin, OUTPUT);
@@ -122,7 +136,7 @@ uint32_t SoftwareSerial::baudRate() {
122
136
}
123
137
124
138
void SoftwareSerial::setTransmitEnablePin (int8_t txEnablePin) {
125
- if (isValidGPIOpin (txEnablePin)) {
139
+ if (isValidTxGPIOpin (txEnablePin)) {
126
140
m_txEnableValid = true ;
127
141
m_txEnablePin = txEnablePin;
128
142
pinMode (m_txEnablePin, OUTPUT);
@@ -145,7 +159,7 @@ void SoftwareSerial::enableTx(bool on) {
145
159
digitalWrite (m_txPin, !m_invert);
146
160
}
147
161
else {
148
- pinMode (m_rxPin, INPUT_PULLUP);
162
+ pinMode (m_rxPin, hasRxGPIOPullUp (m_rxPin) ? INPUT_PULLUP : INPUT );
149
163
enableRx (true );
150
164
}
151
165
}
0 commit comments