GPIO — Maple v0.0.10beta Documentation

### Navigation

- next
- previous |
- LeafLabs |
- Index »

# GPIO

Each LeafLabs board comes with ready-to-use General Purpose Input/Output (GPIO) pins, which are numbered starting from zero. These numbers are listed on your board’s silkscreen, next to where the pin is broken out to a header. Many pins may additionally be used for special features or peripheral functions.

Contents

- Pin Maps
- GPIO Modes
- Function Reference
- Recommended Reading

## Pin Maps

The hardware documentation for your board lists each pin’s capabilities, by pin number:

- Maple
- Maple RET6 Edition

The current and voltage limitations were determined using the STM32 datasheets. In particular, only some 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. Connecting a voltage higher than 3.3V to a non-5V tolerant pin may damage your board.

## GPIO Modes

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.

A `WiringPinMode` value specifies the complete set of possible configurations; not every pin can have all of these modes. For example, on the Maple, pin 15 may have mode `INPUT_ANALOG`, but not `PWM`. See your board’s pin maps and its silkscreen for more information on what functionality is available on each pin.

WiringPinMode enum

  Specifies a GPIO pin behavior.

  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

- pinMode()
- digitalRead()
- digitalWrite()
- analogRead()
- pwmWrite() (Maple’s equivalent to `analogWrite()`; see the analogWrite() reference for differences from the Arduino version).

## Recommended Reading

- ST Documentation for the STM32F103 series of microcontrollers:
  - Reference Manual (pdf)
  - Programming Manual (PDF; assembly language and register reference)

### Navigation

- next
- previous |
- LeafLabs |
- Index »