ESP32_Arduino

ESP32_Arduino

ESP32GPIO構成

Espressifが提供する公式マニュアルから判断すると、ESP32のGPIOは基本的に汎用GPIOです。つまり、いくつかの特別なピンを除いて、基本的にすべてのピンをSPI / I2Cなどのさまざまな機能に多重化できます。

  • GPIO6-11は通常SPIフラッシュメモリに使用されることに注意してください。

  • GPIO34-39は入力モードにのみ設定でき、ソフトウェアのプルアップまたはプルダウン機能はありません。

  • 個別の「RTCGPIO」サポートも提供されます。これは、GPIOが「RTC」低消費電力およびアナログサブシステムにルーティングされるときに機能します。これらのピン機能は、次の状況で使用できます。

上記の段落は、Espressifの公式APIチュートリアルからのものです。

ESP32 SDKの場合、GPIO関連はgpio.c / gpio.hに含まれており、関連する関数の使用は通常のSTM32またはNXPライブラリの使用と同様です。

ESP32 GPIO_Arduino

Arduinoはハードウェア抽象ライブラリのセットです。SDKに基づいて、さまざまな初期化関数が統一された方法でカプセル化され、インターフェイスが標準化されます。実際、呼び出すことができる関連APIを知る必要があるだけです。

一般的に使用されるAPI関数は次のとおりです。

  • pinMode(uint8_tピン、uint8_tモード)
  • digitalWrite(uint8_t pin、uint8_t val)
  • digitalRead(uint8_tピン)
  • attachInterrupt(uint8_t pin、void()(void)、int mode);
  • attachInterruptArg(uint8_t pin、void()(void)、void * arg、int mode);
  • detachInterrupt(uint8_tピン);

pinModeは、GPIOを入力/出力などの必要なモードに初期化できます。

//GPIO FUNCTIONS
#define INPUT 0x01
#define OUTPUT 0x02
#define PULLUP 0x04
#define INPUT_PULLUP 0x05
#define PULLDOWN 0x08
#define INPUT_PULLDOWN 0x09
#define OPEN_DRAIN 0x10
#define OUTPUT_OPEN_DRAIN 0x12
#define SPECIAL 0xF0
#define FUNCTION_1 0x00
#define FUNCTION_2 0x20
#define FUNCTION_3 0x40
#define FUNCTION_4 0x60
#define FUNCTION_5 0x80
#define FUNCTION_6 0xA0
#define ANALOG 0xC0

GPIOの場合、純粋な入力と出力だけでは不十分であり、割り込みとともに使用する必要があるため、Arduinoでは次の割り込みモードから選択できます。

//Interrupt Modes

#define DISABLED 0x00

#define RISING 0x01

#define FALLING 0x02

#define CHANGE 0x03

#define ONLOW 0x04

#define ONHIGH 0x05

#define ONLOW_WE 0x0C

#define ONHIGH_WE 0x0D

追加の再利用のために、追加の機能も提供されます。

#define digitalPinIsValid(pin) ((pin) < 40 && esp32_gpioMux[(pin)].reg)

#define digitalPinCanOutput(pin) ((pin) < 34 && esp32_gpioMux[(pin)].reg)

#define digitalPinToRtcPin(pin) (((pin) < 40)?esp32_gpioMux[(pin)].rtc:-1)

#define digitalPinToAnalogChannel(pin) (((pin) < 40)?esp32_gpioMux[(pin)].adc:-1)

#define digitalPinToTouchChannel(pin) (((pin) < 40)?esp32_gpioMux[(pin)].touch:-1)

#define digitalPinToDacChannel(pin) (((pin) == 25)?0:((pin) == 26)?1:-1)

おすすめ

転載: blog.csdn.net/qq_42312125/article/details/112762155