GPIO — Maple v0.0.9 Documentation

### Navigation

- next
- previous |
- LeafLabs |
- Docs Home |
- Index »

# GPIO

The Maple features 38 ready-to-use general purpose input/output (GPIO) pins for digital input/output, numbered D0 through D37. These numbers correspond to the numeric values next to each header on the Maple silkscreen.

Many of these pins may additionally be used for special features or peripheral functions. This page documents those capabilities, by pin.

The current and voltage limitations have not been copied over from the STM32 datasheet (see the Recommended Reading for a link). In particular, a number of GPIO pins are 5V tolerant (which means that applying 5 volts to a pin and reading it as input or allowing it to drain to ground will not damage that pin), while some are not.

Contents

- Pin Mapping Mega Table
- GPIO Modes
- Function Reference
- Recommended Reading

## Pin Mapping Mega Table

This table shows the available functionality on every GPIO pin, by peripheral type. The “STM32” column refers to the port and number that the header is connected to on the microcontroller. The “5V?” column documents whether or not the pin is 5 volt tolerant (see above).

Pin | STM32 | ADC | Timer | I2C | UART | SPI | 5v?
--- | --- | --- | --- | --- | --- | --- | ---
D0 | PA3 | ADC3 | TIM2_CH4 |  | USART2_RX |  | No
D1 | PA2 | ADC2 | TIM2_CH3 |  | USART2_TX |  | No
D2 | PA0 | ADC0 | TIM2_CH1_ETR |  | USART2_CTS |  | No
D3 | PA1 | ADC1 | TIM2_CH2 |  | USART2_RTS |  | No
D4 | PB5 |  |  | ISC1_SMBA |  |  | No
D5 | PB6 |  | TIM4_CH1 | I2C1_SCL |  |  | Yes
D6 | PA8 |  | TIM1_CH1 |  | USART1_CK |  | Yes
D7 | PA9 |  | TIM1_CH2 |  | USART1_TX |  | Yes
D8 | PA10 |  | TIM1_CH3 |  | USART1_RX |  | Yes
D9 | PB7 |  | TIM4_CH2 | I2C1_SDA |  |  | Yes
D10 | PA4 | ADC4 |  |  | USART2_CK | SPI1_NSS | No
D11 | PA7 | ADC7 | TIM3_CH2 |  |  | SPI1_MOSI | No
D12 | PA6 | ADC6 | TIM3_CH1 |  |  | SPI1_MISO | No
D13 | PA5 | ADC5 |  |  |  | SPI1_SCK | No
D14 | PB8 |  | TIM4_CH3 |  |  |  | Yes
D15 | PC0 | ADC10 |  |  |  |  | No
D16 | PC1 | ADC11 |  |  |  |  | No
D17 | PC2 | ADC12 |  |  |  |  | No
D18 | PC3 | ADC13 |  |  |  |  | No
D19 | PC4 | ADC14 |  |  |  |  | No
D20 | PC5 | ADC15 |  |  |  |  | No
D21 | PC13 |  |  |  |  |  | No
D22 | PC14 |  |  |  |  |  | No
D23 | PC15 |  |  |  |  |  | No
D24 | PB9 |  | TIM4_CH4 |  |  |  | Yes
D25 | PD2 |  | TIM3_ETR |  |  |  | Yes
D26 | PC10 |  |  |  |  |  | Yes
D27 | PB0 | ADC8 | TIM3_CH3 |  |  |  | No
D28 | PB1 | ADC9 | TIM3_CH4 |  |  |  | No
D29 | PB10 |  |  | I2C2_SCL | USART3_TX |  | Yes
D30 | PB11 |  |  | I2C2_SDA | USART3_RX |  | Yes
D31 | PB12 |  | TIM1_BKIN | I2C2_SMBAL | USART3_CK | SPI2_NSS | Yes
D32 | PB13 |  | TIM1_CH1N |  | USART3_CTS | SPI2_SCK | Yes
D33 | PB14 |  | TIM1_CH2N |  | USART3_RTS | SPI2_MISO | Yes
D34 | PB15 |  | TIM1_CH3N |  |  | SPI2_MOSI | Yes
D35 | PC6 |  |  |  |  |  | Yes
D36 | PC7 |  |  |  |  |  | Yes
D37 | PC8 |  |  |  |  |  | Yes

## GPIO Modes

WiringPinMode enum

  Specifies a GPIO pin behavior.

  Each of the GPIO pins on a Maple board may be configured using pinMode() to behave in a number of ways: as a digital output pin, or as an analog input pin, etc., depending on the particular pin.

  This enum specifies the complete set of possible configurations; not every pin can have all of these modes. For example, on the Maple, pin 15 may be configured as INPUT_ANALOG, but not as PWM. See your device’s silkscreen and and the GPIO documentation for more information.

  See
    pinMode()

  Values:

  - `OUTPUT` -

    Basic digital output: when the pin is HIGH, the voltage is held at +3.3v (Vcc) and when it is LOW, it is pulled down to ground.

  - `OUTPUT_OPEN_DRAIN` -

    In open drain mode, the pin indicates “low” by accepting current flow to ground and “high” by providing increased impedance.

    An example use would be to connect a pin to a bus line (which is pulled up to a positive voltage by a separate supply through a large resistor). When the pin is high, not much current flows through to ground and the line stays at positive voltage; when the pin is low the bus “drains” to ground with a small amount of current constantly flowing through the large resistor from the external supply. In this mode no current is ever actually /sourced/ from the pin.

  - `INPUT` -

    Basic digital input.

    The pin voltage is sampled; when it is closer to 3.3v (Vcc) the pin status is high, and when it is closer to 0v (ground) it is low. If no external circuit is pulling the pin voltage to high or low, it will tend to randomly oscillate and be very sensitive to noise (e.g., a breath of air across the pin might cause the state to flip).

  - `INPUT_ANALOG` -

    This is a special mode for when the pin will be used for analog (not digital) reads.

    Enables ADC conversion to be performed on the voltage at the pin.

  - `INPUT_PULLUP` -

    The state of the pin in this mode is reported the same way as with INPUT, but the pin voltage is gently “pulled up” towards +3.3v.

    This means the state will be high unless an external device is specifically pulling the pin down to ground, in which case the “gentle” pull up will not affect the state of the input.

  - `INPUT_PULLDOWN` -

    The state of the pin in this mode is reported the same way as with INPUT, but the pin voltage is gently “pulled down” towards 0v.

    This means the state will be low unless an external device is specifically pulling the pin up to 3.3v, in which case the “gentle” pull down will not affect the state of the input.

  - `INPUT_FLOATING` -

    Synonym for INPUT.

  - `PWM` -

    This is a special mode for when the pin will be used for PWM output (a special case of digital output).

  - `PWM_OPEN_DRAIN` -

    Like PWM, except that instead of alternating cycles of LOW and HIGH, the voltage on the pin consists of alternating cycles of LOW and floating (disconnected).

## Function Reference

void pinMode(uint8 pin, WiringPinMode mode)

  Configure behavior of a GPIO pin.

  Parameters

  - `pin` -

    Pin to configure. One of: 0-38 (pin numbers as labeled on silkscreen), or D0-D38 (symbols for same)

  - `mode` -

    Mode corresponding to desired pin behavior.

  See
    WiringPinMode
uint32 digitalRead(uint8 pin)

  Read a digital value from a pin.

  The pin must have its mode set to one of INPUT, INPUT_PULLUP, and INPUT_PULLDOWN.

  Parameters

  - `pin` -

    Pin to read from. One of: 0-38 (pin numbers as labeled on silkscreen), or D0-D38 (symbols for same)

  Return
    LOW or HIGH.
  See
    pinMode()
void digitalWrite(uint8 pin, uint8 value)

  Writes a (digital) value to a pin.

  The pin must have its mode set to `OUTPUT` or `OUTPUT_OPEN_DRAIN`.

  Parameters

  - `pin` -

    Pin to write to. One of: 0-38 (pin numbers as labeled on silkscreen), or D0-D38 (symbols for same)

  - `value` -

    Either LOW (write a 0) or HIGH (write a 1).

  See
    pinMode()
uint32 analogRead(uint8 pin)

  Read an analog value from pin.

  This function blocks during ADC conversion, and has 12 bits of resolution. The pin must have its mode set to INPUT_ANALOG. Ignoring function call overhead, conversion time is 55.5 cycles.

  Parameters

  - `pin` -

    Pin to read from. One of: 0, 1, 2, 3, 10, 11, 12, 13, 15, 16, 17, 18, 19, 20, 27, 28.

  Return
    ADC-converted voltage, in the range 0–4095, inclusive (i.e. a 12-bit ADC conversion).
  See
    pinMode()

## Recommended Reading

STMicro documentation for STM32F103RB microcontroller:

> - Datasheet (pdf)
> - Reference Manual (pdf)

### Navigation

- next
- previous |
- LeafLabs |
- Docs Home |
- Index »