STM32 core 3.0.1-dev
Arduino core for STM32 based boards: API reference
← STM32duino documentation
Loading...
Searching...
No Matches
pins_arduino.h File Reference

Pin number conversion helpers, port register macros and default pin definitions. More...

#include <stdbool.h>
#include <stdlib.h>
#include "api/Common.h"
#include "variant.h"
#include "PinNames.h"
#include "pins_arduino_analog.h"
#include "pins_arduino_digital.h"

Macros

#define PNUM_MASK   0xFF
 Pin number mask, allows to retrieve the pin number without ALTx.
 
#define PNUM_NOT_DEFINED   NUM_DIGITAL_PINS
 Pin not defined.
 
#define PIN_SPI_SS   10
 
#define PIN_SPI_SS1   4
 
#define PIN_SPI_SS2   7
 
#define PIN_SPI_SS3   8
 
#define PIN_SPI_MOSI   11
 
#define PIN_SPI_MISO   12
 
#define PIN_SPI_SCK   13
 
#define PIN_WIRE_SDA   14
 
#define PIN_WIRE_SCL   15
 
#define PIN_I3C_SDA   14
 
#define PIN_I3C_SCL   15
 
#define NOT_AN_INTERRUPT   (pin_size_t)NC
 Value returned by digitalPinToInterrupt() when the pin cannot be used as an interrupt.
 
#define digitalPinToPinName(p)
 Convert a digital pin number (Dxx) to a PinName (PX_n).
 
#define analogInputToDigitalPin(p)   (NUM_DIGITAL_PINS)
 Convert an analog pin number (Ax) to a digital pin number.
 
#define digitalPinToInterrupt(p)   (digitalPinIsValid(p) ? p : NOT_AN_INTERRUPT)
 Convert a digital pin number to an interrupt number.
 
#define digitalPinHasI2C(p)
 Check whether a digital pin has an I2C (SDA or SCL) function.
 
#define digitalPinHasPWM(p)   (pin_in_pinmap(digitalPinToPinName(p), PinMap_TIM))
 Check whether a digital pin has a PWM (timer) function.
 
#define digitalPinHasSerial(p)
 Check whether a digital pin has a UART (RX or TX) function.
 
#define digitalPinHasSPI(p)
 Check whether a digital pin has an SPI (MOSI, MISO, SCLK or SSEL) function.
 
#define digitalPinToPort(p)   (get_GPIO_Port(STM_PORT(digitalPinToPinName(p))))
 Get the GPIO port (GPIO_TypeDef pointer) of a digital pin.
 
#define digitalPinToBitMask(p)   (STM_GPIO_PIN(digitalPinToPinName(p)))
 Get the bit mask of a digital pin in its GPIO port registers.
 
#define analogInPinToBit(p)   (STM_GPIO_PIN(digitalPinToPinName(p)))
 Get the bit mask of an analog pin in its GPIO port registers.
 
#define portOutputRegister(P)   (&(P->ODR))
 Get the address of the output data register of a GPIO port.
 
#define portInputRegister(P)   (&(P->IDR))
 Get the address of the input data register of a GPIO port.
 
#define portSetRegister(P)   (&(P->BSRR))
 Get the address of the set register of a GPIO port.
 
#define portClearRegister(P)   (&(P->BRR))
 
#define portModeRegister(P)   (&(P->MODER))
 
#define portConfigRegister(P)   (portModeRegister(P))
 Get the address of the mode register of a GPIO port.
 
#define digitalPinIsValid(p)   (digitalPinToPinName(p) != NC)
 Check whether a digital pin number is valid, i.e.
 
#define digitalPinFirstOccurence(p)   (pinNametoDigitalPin(digitalPinToPinName(p)))
 Get the first occurrence of a pin in digitalPin[].
 
#define pinIsAnalogInput   digitalpinIsAnalogInput
 Convenient macro to handle Analog for Firmata, see digitalpinIsAnalogInput().
 
#define ADC_RESOLUTION   10
 Default resolution of analogRead() values, in bits.
 
#define DACC_RESOLUTION   12
 Resolution of the DAC, in bits.
 
#define PWM_RESOLUTION   8
 Default resolution of analogWrite() values, in bits.
 
#define PWM_FREQUENCY   1000
 Default PWM frequency of analogWrite(), in Hertz.
 
#define PWM_MAX_DUTY_CYCLE   4095
 Maximum PWM duty cycle value.
 

Functions

pin_size_t pinNametoDigitalPin (PinName p)
 Convert a PinName (PX_n) to a digital pin number.
 
PinName analogInputToPinName (pin_size_t pin)
 Convert an analog pin number (Ax) to a PinName (PX_n).
 
bool digitalpinIsAnalogInput (pin_size_t pin)
 Check whether a digital pin is an analog input.
 
pin_size_t digitalPinToAnalogInput (pin_size_t pin)
 Get the analog input linked to a digital pin.
 

Variables

static const pin_size_t SS = PIN_SPI_SS
 
static const pin_size_t SS1 = PIN_SPI_SS1
 
static const pin_size_t SS2 = PIN_SPI_SS2
 
static const pin_size_t SS3 = PIN_SPI_SS3
 
static const pin_size_t MOSI = PIN_SPI_MOSI
 
static const pin_size_t MISO = PIN_SPI_MISO
 
static const pin_size_t SCK = PIN_SPI_SCK
 
static const pin_size_t SDA = PIN_WIRE_SDA
 
static const pin_size_t SCL = PIN_WIRE_SCL
 
static const uint32_t I3C_SDA = PIN_I3C_SDA
 
static const uint32_t I3C_SCL = PIN_I3C_SCL
 
const PinName digitalPin []
 
const pin_size_t analogInputPin []
 

Detailed Description

Pin number conversion helpers, port register macros and default pin definitions.

Macro Definition Documentation

◆ analogInputToDigitalPin

#define analogInputToDigitalPin (   p)    (NUM_DIGITAL_PINS)

Convert an analog pin number (Ax) to a digital pin number.

Used by the analogRead API to have A0 == 0, even if the analog pins are not contiguous in the digitalPin array.

Parameters
pAnalog pin number.
Returns
Digital pin number, with the ALTX bits preserved. NC if the pin is not valid, or NUM_DIGITAL_PINS when no analog input is defined.

◆ digitalPinFirstOccurence

#define digitalPinFirstOccurence (   p)    (pinNametoDigitalPin(digitalPinToPinName(p)))

Get the first occurrence of a pin in digitalPin[].

Some pins could be duplicated in digitalPin[], this returns the digital pin number of the first occurrence of the linked PinName (PYx).

Parameters
pDigital pin number.
Returns
Digital pin number of the first occurrence. NUM_DIGITAL_PINS if not found.

◆ digitalPinHasI2C

#define digitalPinHasI2C (   p)
Value:
(pin_in_pinmap(digitalPinToPinName(p), PinMap_I2C_SDA) ||\
pin_in_pinmap(digitalPinToPinName(p), PinMap_I2C_SCL))
bool pin_in_pinmap(PinName pin, const PinMap *map)
Check whether a pin is present in a pinmap.
Definition pinmap.c:138
#define digitalPinToPinName(p)
Convert a digital pin number (Dxx) to a PinName (PX_n).
Definition pins_arduino.h:127

Check whether a digital pin has an I2C (SDA or SCL) function.

◆ digitalPinHasSerial

#define digitalPinHasSerial (   p)
Value:
(pin_in_pinmap(digitalPinToPinName(p), PinMap_UART_RX) ||\
pin_in_pinmap(digitalPinToPinName(p), PinMap_UART_TX))

Check whether a digital pin has a UART (RX or TX) function.

◆ digitalPinHasSPI

#define digitalPinHasSPI (   p)
Value:
(pin_in_pinmap(digitalPinToPinName(p), PinMap_SPI_MOSI) ||\
pin_in_pinmap(digitalPinToPinName(p), PinMap_SPI_MISO) ||\
pin_in_pinmap(digitalPinToPinName(p), PinMap_SPI_SCLK) ||\
pin_in_pinmap(digitalPinToPinName(p), PinMap_SPI_SSEL))

Check whether a digital pin has an SPI (MOSI, MISO, SCLK or SSEL) function.

◆ digitalPinIsValid

#define digitalPinIsValid (   p)    (digitalPinToPinName(p) != NC)

Check whether a digital pin number is valid, i.e.

linked to a PinName.

◆ digitalPinToInterrupt

#define digitalPinToInterrupt (   p)    (digitalPinIsValid(p) ? p : NOT_AN_INTERRUPT)

Convert a digital pin number to an interrupt number.

All pins could manage EXTI, so the pin number is used as interrupt number.

Parameters
pDigital pin number.
Returns
The pin number if it is valid, NOT_AN_INTERRUPT otherwise.

◆ digitalPinToPinName

#define digitalPinToPinName (   p)
Value:
((((pin_size_t)(p) & PNUM_MASK) < NUM_DIGITAL_PINS) ? \
(PinName)(digitalPin[(pin_size_t)(p) & PNUM_MASK] | ((p) & ALTX_MASK)) : NC)
#define PNUM_MASK
Pin number mask, allows to retrieve the pin number without ALTx.
Definition pins_arduino.h:34

Convert a digital pin number (Dxx) to a PinName (PX_n).

The ALTX bits of the pin number are preserved. An analog pin number (Ax) is also accepted.

Parameters
pDigital pin number.
Returns
PinName of the pin. NC if the pin is not valid.

◆ portConfigRegister

#define portConfigRegister (   P)    (portModeRegister(P))

Get the address of the mode register of a GPIO port.

Same as portModeRegister().

Function Documentation

◆ analogInputToPinName()

PinName analogInputToPinName ( pin_size_t  pin)

Convert an analog pin number (Ax) to a PinName (PX_n).

Note
The internal channels (ATEMP, ATEMP_ADC5, AVREF, AVBAT) are also handled when defined.
Parameters
pinAnalog pin number, Ax.
Returns
PinName of the analog input. NC if the pin is not an analog input.

◆ digitalpinIsAnalogInput()

bool digitalpinIsAnalogInput ( pin_size_t  pin)

Check whether a digital pin is an analog input.

Parameters
pinDx, x or PYn.
Returns
true if the pin is an analog input, false otherwise.

◆ digitalPinToAnalogInput()

pin_size_t digitalPinToAnalogInput ( pin_size_t  pin)

Get the analog input linked to a digital pin.

Parameters
pinDx, x or PYn.
Returns
Valid analog input number, or NUM_ANALOG_INPUTS if none.

◆ pinNametoDigitalPin()

pin_size_t pinNametoDigitalPin ( PinName  p)

Convert a PinName (PX_n) to a digital pin number.

Parameters
pPinName to convert.
Returns
Digital pin number, with the ALTX bits preserved. NUM_DIGITAL_PINS if not found.