18#ifndef _PINS_ARDUINO_H_
19#define _PINS_ARDUINO_H_
25#include "pins_arduino_analog.h"
26#include "pins_arduino_digital.h"
35#define PNUM_NOT_DEFINED NUM_DIGITAL_PINS
38_Static_assert(LastPort <= 0x0F,
"PortName must be less than 16");
40_Static_assert(NUM_ANALOG_INPUTS <= MAX_ANALOG_INPUTS,
41 "Core NUM_ANALOG_INPUTS limited to MAX_ANALOG_INPUTS");
58 #define PIN_SPI_MOSI 11
61 #define PIN_SPI_MISO 12
64 #define PIN_SPI_SCK 13
67static const uint32_t SS = PIN_SPI_SS;
68static const uint32_t SS1 = PIN_SPI_SS1;
69static const uint32_t SS2 = PIN_SPI_SS2;
70static const uint32_t SS3 = PIN_SPI_SS3;
71static const uint32_t MOSI = PIN_SPI_MOSI;
72static const uint32_t MISO = PIN_SPI_MISO;
73static const uint32_t SCK = PIN_SPI_SCK;
77 #define PIN_WIRE_SDA 14
80 #define PIN_WIRE_SCL 15
83static const uint32_t SDA = PIN_WIRE_SDA;
84static const uint32_t SCL = PIN_WIRE_SCL;
89extern const PinName digitalPin[];
90extern const uint32_t analogInputPin[];
92#define NOT_AN_INTERRUPT (uint32_t)NC
95#if NUM_ANALOG_INPUTS > 0
97#define digitalPinToPinName(p) ((((uint32_t)(p) & PNUM_MASK) < NUM_DIGITAL_PINS) ? \
98 (PinName)(digitalPin[(uint32_t)(p) & PNUM_MASK] | ((p) & ALTX_MASK)) : \
99 (((uint32_t)(p) & PNUM_ANALOG_BASE) == PNUM_ANALOG_BASE) && \
100 (((uint32_t)(p) & PNUM_MASK) < NUM_ANALOG_INTERNAL_FIRST) ? \
101 (PinName)(digitalPin[analogInputPin[(p) & PNUM_ANALOG_INDEX]] | ((p) & ALTX_MASK)) : NC)
103#define digitalPinToPinName(p) ((((uint32_t)(p) & PNUM_MASK) < NUM_DIGITAL_PINS) ? \
104 (PinName)(digitalPin[(uint32_t)(p) & PNUM_MASK] | ((p) & ALTX_MASK)) : NC)
107uint32_t pinNametoDigitalPin(PinName p);
110#if NUM_ANALOG_INPUTS > 0
113#define analogInputToDigitalPin(p) ((((uint32_t)(p) & PNUM_MASK) < NUM_ANALOG_INPUTS) ? \
114 analogInputPin[(uint32_t)(p) & PNUM_MASK] | ((uint32_t)(p) & ALTX_MASK) : \
115 (((uint32_t)(p) & PNUM_ANALOG_BASE) == PNUM_ANALOG_BASE) && \
116 (((uint32_t)(p) & PNUM_MASK) < NUM_ANALOG_INTERNAL_FIRST) ? \
117 analogInputPin[(p) & PNUM_ANALOG_INDEX] | ((uint32_t)(p) & ALTX_MASK) : (uint32_t)NC)
119#define analogInputToDigitalPin(p) (NUM_DIGITAL_PINS)
123PinName analogInputToPinName(uint32_t pin);
126#define digitalPinToInterrupt(p) (digitalPinIsValid(p) ? p : NOT_AN_INTERRUPT)
128#define digitalPinHasI2C(p) (pin_in_pinmap(digitalPinToPinName(p), PinMap_I2C_SDA) ||\
129 pin_in_pinmap(digitalPinToPinName(p), PinMap_I2C_SCL))
130#define digitalPinHasPWM(p) (pin_in_pinmap(digitalPinToPinName(p), PinMap_TIM))
131#define digitalPinHasSerial(p) (pin_in_pinmap(digitalPinToPinName(p), PinMap_UART_RX) ||\
132 pin_in_pinmap(digitalPinToPinName(p), PinMap_UART_TX))
133#define digitalPinHasSPI(p) (pin_in_pinmap(digitalPinToPinName(p), PinMap_SPI_MOSI) ||\
134 pin_in_pinmap(digitalPinToPinName(p), PinMap_SPI_MISO) ||\
135 pin_in_pinmap(digitalPinToPinName(p), PinMap_SPI_SCLK) ||\
136 pin_in_pinmap(digitalPinToPinName(p), PinMap_SPI_SSEL))
139#define digitalPinToPort(p) (get_GPIO_Port(STM_PORT(digitalPinToPinName(p))))
140#define digitalPinToBitMask(p) (STM_GPIO_PIN(digitalPinToPinName(p)))
142#define analogInPinToBit(p) (STM_GPIO_PIN(digitalPinToPinName(p)))
143#define portOutputRegister(P) (&(P->ODR))
144#define portInputRegister(P) (&(P->IDR))
146#define portSetRegister(P) (&(P->BSRR))
147#if defined(STM32F2xx) || defined(STM32F4xx) || defined(STM32F7xx)
149#define portClearRegister(P) (&(P->BSRR))
151#define portClearRegister(P) (&(P->BRR))
155#if defined(STM32F1xx)
162#define portModeRegister(P) (&(P->CRL))
164#define portModeRegister(P) (&(P->MODER))
166#define portConfigRegister(P) (portModeRegister(P))
169#define digitalPinIsValid(p) (digitalPinToPinName(p) != NC)
173#define digitalPinFirstOccurence(p) (pinNametoDigitalPin(digitalPinToPinName(p)))
176#if defined(PIN_SERIAL_RX) && defined(PIN_SERIAL_TX)
177#define pinIsSerial(p) ((digitalPinToPinName(p) == \
178 digitalPinToPinName(PIN_SERIAL_RX & PNUM_MASK)) ||\
179 (digitalPinToPinName(p) == \
180 digitalPinToPinName(PIN_SERIAL_TX & PNUM_MASK)))
183#define pinIsAnalogInput digitalpinIsAnalogInput
184bool digitalpinIsAnalogInput(uint32_t pin);
185uint32_t digitalPinToAnalogInput(uint32_t pin);
192#ifndef ADC_RESOLUTION
193 #define ADC_RESOLUTION 10
196#define DACC_RESOLUTION 12
198#ifndef PWM_RESOLUTION
199 #define PWM_RESOLUTION 8
202_Static_assert((ADC_RESOLUTION > 0) &&(ADC_RESOLUTION <= 32),
203 "ADC_RESOLUTION must be 0 < x <= 32!");
204_Static_assert((PWM_RESOLUTION > 0) &&(PWM_RESOLUTION <= 32),
205 "PWM_RESOLUTION must be 0 < x <= 32!");
208 #define PWM_FREQUENCY 1000
210#ifndef PWM_MAX_DUTY_CYCLE
211 #define PWM_MAX_DUTY_CYCLE 4095