Skip to content

Commit ccf2a62

Browse files
committed
Fix Firmata library for STM32
Fix #5 Signed-off-by: Frederic Pillon <[email protected]>
1 parent 9a229a1 commit ccf2a62

File tree

10 files changed

+93
-52
lines changed

10 files changed

+93
-52
lines changed

Diff for: libraries/Firmata/Boards.h

+14-18
Original file line numberDiff line numberDiff line change
@@ -665,27 +665,23 @@ writePort(port, value, bitmask): Write an 8 bit port.
665665
#define PIN_TO_PWM(p) PIN_TO_DIGITAL(p)
666666
#define PIN_TO_SERVO(p) ((p) - 2)
667667

668-
// Nucleo STM32F429
668+
// STM32 based boards
669669
#elif defined(STM32)
670-
#define TOTAL_ANALOG_PINS MAX_ANALOG_IOS //7
671-
#define TOTAL_PINS MAX_DIGITAL_IOS //22 : All pins can be digital
672-
#define TOTAL_PORTS 3
670+
#define TOTAL_ANALOG_PINS MAX_ANALOG_IOS
671+
#define TOTAL_PINS MAX_DIGITAL_IOS
672+
#define TOTAL_PORTS MAX_NB_PORT
673673
#define VERSION_BLINK_PIN LED_BUILTIN
674-
#define PIN_SERIAL_RX 9
675-
#define PIN_SERIAL_TX 8
676-
#define PIN_SERIAL1_RX 0
677-
#define PIN_SERIAL1_TX 1
678-
#define PIN_SERIAL2_RX 8
679-
#define PIN_SERIAL2_TX 9
680-
#define IS_PIN_DIGITAL(p) ((p) >= 2 && (p) < TOTAL_PINS)
681-
#define IS_PIN_ANALOG(p) ((p) >= 16 && (p) < TOTAL_PINS)
682-
#define IS_PIN_PWM(p) ((p) == 3 || (p) == 5 || (p) == 6 || (p) == 9 || (p) == 10 || (p) == 11)
683-
#define IS_PIN_SERVO(p) IS_PIN_DIGITAL((p))
684-
#define IS_PIN_I2C(p) ((p) == 14 || (p) == 15)
685-
#define IS_PIN_SPI(p) ((p) == SS || (p) == MOSI || (p) == MISO || (p) == SCK)
686-
#define IS_PIN_SERIAL(p) ((p) == 0 || (p) == 1)
674+
// PIN_SERIALY_RX/TX defined in the variant.h
675+
#define IS_PIN_DIGITAL(p) ((p != PIN_SERIAL_RX) && (p != PIN_SERIAL_TX) &&(p < TOTAL_PINS))
676+
#define IS_PIN_ANALOG(p) (pin_in_pinmap(digitalToPinName(p), PinMap_ADC))
677+
#define IS_PIN_PWM(p) (pin_in_pinmap(digitalToPinName(p), PinMap_PWM))
678+
#define IS_PIN_SERVO(p) IS_PIN_DIGITAL(p)
679+
#define IS_PIN_I2C(p) (pin_in_pinmap(digitalToPinName(p), PinMap_I2C_SDA) || pin_in_pinmap(digitalToPinName(p), PinMap_I2C_SCL))
680+
#define IS_PIN_SPI(p) (pin_in_pinmap(digitalToPinName(p), PinMap_SPI_MOSI) || pin_in_pinmap(digitalToPinName(p), PinMap_SPI_MISO) ||\
681+
pin_in_pinmap(digitalToPinName(p), PinMap_SPI_SCLK) || pin_in_pinmap(digitalToPinName(p), PinMap_SPI_SSEL))
682+
#define IS_PIN_SERIAL(p) (pin_in_pinmap(digitalToPinName(p), PinMap_UART_RX) || pin_in_pinmap(digitalToPinName(p), PinMap_UART_TX))
687683
#define PIN_TO_DIGITAL(p) (p)
688-
#define PIN_TO_ANALOG(p) ((p) - 16)
684+
#define PIN_TO_ANALOG(p) (p)
689685
#define PIN_TO_PWM(p) (p)
690686
#define PIN_TO_SERVO(p) (p)
691687

Diff for: variants/DISCO_F407VG/variant.h

+7-4
Original file line numberDiff line numberDiff line change
@@ -72,10 +72,10 @@ enum {
7272
AEND
7373
};
7474

75-
#define MAX_ANALOG_IOS (sizeof(PinMap_ADC)/sizeof(PinMap))
7675
#define MAX_DIGITAL_IOS DEND
7776
#define NUM_DIGITAL_PINS MAX_DIGITAL_IOS
78-
#define NUM_ANALOG_INPUTS (AEND - A0)
77+
#define MAX_ANALOG_IOS (AEND - A0)
78+
#define NUM_ANALOG_INPUTS MAX_ANALOG_IOS
7979

8080
// Convert a digital pin number Dxx to a PinName Pxy
8181
#define digitalToPinName(p) ((p < NUM_DIGITAL_PINS) ? digital_arduino[p] : (STM_VALID_PINNAME(p))? (PinName)p : NC)
@@ -143,8 +143,11 @@ uint32_t pinNametoPinNumber(PinName p);
143143
#define UART_EMUL_RX PE9
144144
#define UART_EMUL_TX PE11
145145

146-
//Enable Firmata
147-
#define STM32 1
146+
// Enable Firmata
147+
#define STM32 1
148+
// Serial Pin Firmata
149+
#define PIN_SERIAL_RX 42
150+
#define PIN_SERIAL_TX 3
148151

149152
#ifdef __cplusplus
150153
} // extern "C"

Diff for: variants/DISCO_F746NG/variant.cpp

+3-1
Original file line numberDiff line numberDiff line change
@@ -46,7 +46,9 @@ const PinName digital_arduino[] = {
4646
PF8, //D19/A3
4747
PF7, //D20/A4
4848
PF6, //D21/A5
49-
PI11 //D22 User btn
49+
PI11, //D22 User btn
50+
PB7, //D23 ST-Link Rx
51+
PA9 //D24 ST-Link Tx
5052
};
5153

5254
#ifdef __cplusplus

Diff for: variants/DISCO_F746NG/variant.h

+12-5
Original file line numberDiff line numberDiff line change
@@ -56,7 +56,7 @@ extern const PinName digital_arduino[];
5656
enum {
5757
D0, D1, D2, D3, D4, D5, D6, D7, D8, D9,
5858
D10, D11, D12, D13, D14, D15, D16, D17, D18, D19,
59-
D20, D21, D22,
59+
D20, D21, D22, D23, D24,
6060
DEND
6161
};
6262

@@ -66,10 +66,10 @@ enum {
6666
AEND
6767
};
6868

69-
#define MAX_ANALOG_IOS (sizeof(PinMap_ADC)/sizeof(PinMap))
7069
#define MAX_DIGITAL_IOS DEND
7170
#define NUM_DIGITAL_PINS MAX_DIGITAL_IOS
72-
#define NUM_ANALOG_INPUTS (AEND - A0)
71+
#define MAX_ANALOG_IOS (AEND - A0)
72+
#define NUM_ANALOG_INPUTS MAX_ANALOG_IOS
7373

7474
// Convert a digital pin number Dxx to a PinName Pxy
7575
#define digitalToPinName(p) ((p < NUM_DIGITAL_PINS) ? digital_arduino[p] : (STM_VALID_PINNAME(p))? (PinName)p : NC)
@@ -137,8 +137,15 @@ uint32_t pinNametoPinNumber(PinName p);
137137
//#define UART_EMUL_RX PYxx
138138
//#define UART_EMUL_TX PYxx
139139

140-
//Enable Firmata
141-
#define STM32 1
140+
// Enable Firmata
141+
#define STM32 1
142+
// Serial Pin Firmata
143+
#define PIN_SERIAL_RX 23
144+
#define PIN_SERIAL_TX 24
145+
#define PIN_SERIAL1_RX 0
146+
#define PIN_SERIAL1_TX 1
147+
#define PIN_SERIAL2_RX 21
148+
#define PIN_SERIAL2_TX 20
142149

143150
#ifdef __cplusplus
144151
} // extern "C"

Diff for: variants/NUCLEO_F091RC/variant.h

+11-4
Original file line numberDiff line numberDiff line change
@@ -69,10 +69,10 @@ enum {
6969
AEND
7070
};
7171

72-
#define MAX_ANALOG_IOS (sizeof(PinMap_ADC)/sizeof(PinMap))
7372
#define MAX_DIGITAL_IOS DEND
7473
#define NUM_DIGITAL_PINS MAX_DIGITAL_IOS
75-
#define NUM_ANALOG_INPUTS (AEND - A0)
74+
#define MAX_ANALOG_IOS (AEND - A0)
75+
#define NUM_ANALOG_INPUTS MAX_ANALOG_IOS
7676

7777
// Convert a digital pin number Dxx to a PinName Pxy
7878
#define digitalToPinName(p) ((p < NUM_DIGITAL_PINS) ? digital_arduino[p] : (STM_VALID_PINNAME(p))? (PinName)p : NC)
@@ -140,8 +140,15 @@ uint32_t pinNametoPinNumber(PinName p);
140140
#define UART_EMUL_RX PB14
141141
#define UART_EMUL_TX PB13
142142

143-
//Enable Firmata
144-
#define STM32 1
143+
// Enable Firmata
144+
#define STM32 1
145+
// Serial Pin Firmata
146+
#define PIN_SERIAL_RX 0
147+
#define PIN_SERIAL_TX 1
148+
#define PIN_SERIAL1_RX 2
149+
#define PIN_SERIAL1_TX 8
150+
#define PIN_SERIAL2_RX 47
151+
#define PIN_SERIAL2_TX 46
145152

146153
#ifdef __cplusplus
147154
} // extern "C"

Diff for: variants/NUCLEO_F303RE/variant.h

+11-4
Original file line numberDiff line numberDiff line change
@@ -69,10 +69,10 @@ enum {
6969
AEND
7070
};
7171

72-
#define MAX_ANALOG_IOS (sizeof(PinMap_ADC)/sizeof(PinMap))
7372
#define MAX_DIGITAL_IOS DEND
7473
#define NUM_DIGITAL_PINS MAX_DIGITAL_IOS
75-
#define NUM_ANALOG_INPUTS (AEND - A0)
74+
#define MAX_ANALOG_IOS (AEND - A0)
75+
#define NUM_ANALOG_INPUTS MAX_ANALOG_IOS
7676

7777
// Convert a digital pin number Dxx to a PinName Pxy
7878
#define digitalToPinName(p) ((p < NUM_DIGITAL_PINS) ? digital_arduino[p] : (STM_VALID_PINNAME(p))? (PinName)p : NC)
@@ -140,8 +140,15 @@ uint32_t pinNametoPinNumber(PinName p);
140140
#define UART_EMUL_RX PC1
141141
#define UART_EMUL_TX PC3
142142

143-
//Enable Firmata
144-
#define STM32 1
143+
// Enable Firmata
144+
#define STM32 1
145+
// Serial Pin Firmata
146+
#define PIN_SERIAL_RX 0
147+
#define PIN_SERIAL_TX 1
148+
#define PIN_SERIAL1_RX 2
149+
#define PIN_SERIAL1_TX 8
150+
#define PIN_SERIAL2_RX 47
151+
#define PIN_SERIAL2_TX 46
145152

146153
#ifdef __cplusplus
147154
} // extern "C"

Diff for: variants/NUCLEO_F429ZI/variant.cpp

+6-4
Original file line numberDiff line numberDiff line change
@@ -107,7 +107,9 @@ const PinName digital_arduino[] = {
107107
PF10, //D78/A5
108108
PB7, //D79
109109
PB14, //D80
110-
PC13 //D81
110+
PC13, //D81
111+
PD9, //D82
112+
PD8 //D83
111113
};
112114

113115
#ifdef __cplusplus
@@ -117,9 +119,9 @@ const PinName digital_arduino[] = {
117119
/*
118120
* UART objects
119121
*/
120-
HardwareSerial Serial(PD9, PD8); //available on PD8/PD9 - Connected to ST-Link
121-
HardwareSerial Serial1(PG9, PG14); //available on PG14/PG9
122-
HardwareSerial Serial2(PD6, PD5); //available on PD5/PD6
122+
HardwareSerial Serial(PD9, PD8); // Connected to ST-Link
123+
HardwareSerial Serial1(PG9, PG14);
124+
HardwareSerial Serial2(PD6, PD5);
123125

124126
void serialEvent() __attribute__((weak));
125127
void serialEvent() { }

Diff for: variants/NUCLEO_F429ZI/variant.h

+11-4
Original file line numberDiff line numberDiff line change
@@ -62,7 +62,7 @@ enum {
6262
D50, D51, D52, D53, D54, D55, D56, D57, D58, D59,
6363
D60, D61, D62, D63, D64, D65, D66, D67, D68, D69,
6464
D70, D71, D72, D73, D74, D75, D76, D77, D78, D79,
65-
D80, D81,
65+
D80, D81, D82, D83,
6666
DEND
6767
};
6868

@@ -72,10 +72,10 @@ enum {
7272
AEND
7373
};
7474

75-
#define MAX_ANALOG_IOS (sizeof(PinMap_ADC)/sizeof(PinMap))
7675
#define MAX_DIGITAL_IOS DEND
7776
#define NUM_DIGITAL_PINS MAX_DIGITAL_IOS
78-
#define NUM_ANALOG_INPUTS (AEND - A0)
77+
#define MAX_ANALOG_IOS (AEND - A0)
78+
#define NUM_ANALOG_INPUTS MAX_ANALOG_IOS
7979

8080
// Convert a digital pin number Dxx to a PinName Pxy
8181
#define digitalToPinName(p) ((p < NUM_DIGITAL_PINS) ? digital_arduino[p] : (STM_VALID_PINNAME(p))? (PinName)p : NC)
@@ -145,8 +145,15 @@ uint32_t pinNametoPinNumber(PinName p);
145145
#define UART_EMUL_RX PF15
146146
#define UART_EMUL_TX PE13
147147

148-
//Enable Firmata
148+
// Enable Firmata
149149
#define STM32 1
150+
// Serial Pin Firmata
151+
#define PIN_SERIAL_RX 82
152+
#define PIN_SERIAL_TX 83
153+
#define PIN_SERIAL1_RX 0
154+
#define PIN_SERIAL1_TX 1
155+
#define PIN_SERIAL2_RX 52
156+
#define PIN_SERIAL2_TX 53
150157

151158
#ifdef __cplusplus
152159
} // extern "C"

Diff for: variants/NUCLEO_L053R8/variant.h

+9-4
Original file line numberDiff line numberDiff line change
@@ -69,10 +69,10 @@ enum {
6969
AEND
7070
};
7171

72-
#define MAX_ANALOG_IOS (sizeof(PinMap_ADC)/sizeof(PinMap))
7372
#define MAX_DIGITAL_IOS DEND
7473
#define NUM_DIGITAL_PINS MAX_DIGITAL_IOS
75-
#define NUM_ANALOG_INPUTS (AEND - A0)
74+
#define MAX_ANALOG_IOS (AEND - A0)
75+
#define NUM_ANALOG_INPUTS MAX_ANALOG_IOS
7676

7777
// Convert a digital pin number Dxx to a PinName Pxy
7878
#define digitalToPinName(p) ((p < NUM_DIGITAL_PINS) ? digital_arduino[p] : (STM_VALID_PINNAME(p))? (PinName)p : NC)
@@ -136,8 +136,13 @@ uint32_t pinNametoPinNumber(PinName p);
136136

137137
#define DEBUG_UART ((USART_TypeDef *) USART2)
138138

139-
//Enable Firmata
140-
#define STM32 1
139+
// Enable Firmata
140+
#define STM32 1
141+
// Serial Pin Firmata
142+
#define PIN_SERIAL_RX 0
143+
#define PIN_SERIAL_TX 1
144+
#define PIN_SERIAL1_RX 2
145+
#define PIN_SERIAL1_TX 8
141146

142147
#ifdef __cplusplus
143148
} // extern "C"

Diff for: variants/NUCLEO_L476RG/variant.h

+9-4
Original file line numberDiff line numberDiff line change
@@ -69,10 +69,10 @@ enum {
6969
AEND
7070
};
7171

72-
#define MAX_ANALOG_IOS (sizeof(PinMap_ADC)/sizeof(PinMap))
7372
#define MAX_DIGITAL_IOS DEND
7473
#define NUM_DIGITAL_PINS MAX_DIGITAL_IOS
75-
#define NUM_ANALOG_INPUTS (AEND - A0)
74+
#define MAX_ANALOG_IOS (AEND - A0)
75+
#define NUM_ANALOG_INPUTS MAX_ANALOG_IOS
7676

7777
// Convert a digital pin number Dxx to a PinName Pxy
7878
#define digitalToPinName(p) ((p < NUM_DIGITAL_PINS) ? digital_arduino[p] : (STM_VALID_PINNAME(p))? (PinName)p : NC)
@@ -140,8 +140,13 @@ uint32_t pinNametoPinNumber(PinName p);
140140
#define UART_EMUL_RX PB13
141141
#define UART_EMUL_TX PB14
142142

143-
//Enable Firmata
144-
#define STM32 1
143+
// Enable Firmata
144+
#define STM32 1
145+
// Serial Pin Firmata
146+
#define PIN_SERIAL_RX 0
147+
#define PIN_SERIAL_TX 1
148+
#define PIN_SERIAL1_RX 2
149+
#define PIN_SERIAL1_TX 8
145150

146151
#ifdef __cplusplus
147152
} // extern "C"

0 commit comments

Comments
 (0)