使用Arduino开发ESP32(十二):GPIO与中断

基本函数:

GPIO6 ~ 11通常不使用,由于它们接了存储程序的Flash。git

pinMode(pin, mode)

引脚工做方式设置
mode可选:
INPUTOUTPUTINPUT_PULLUPINPUT_PULLDOWN
输入、输出、上拉输入、下拉输入web

digitalWrite(pin, value)

设置某引脚高低电平svg

digitalRead(pin)

读取某引脚电平值函数

注:oop

ESP32的IO12,这个IO口上上电时的电平会决定外部flash(存放程序的那颗)的工做电压,上电时该脚为高则认为flash工做于1.8V,为低则认为flash工做于3.3V。
经常使用的像是Wroom-32系列模块该脚内部已下拉,即flash是工做于3.3V的,若外部电路接强上拉则可能致使模块工做异常;而像是WROVER模块该脚是内部上拉的,flash工做于1.8V,外部上拉不影响模块运行。ui

**spa

外部中断:

**
打开中断,使用.net

attachInterrupt(uint8_t pin, void (*)(void), int mode)
attachInterruptArg(uint8_t pin, void (*)(void*), void * arg, int mode)

(引脚号、中断服务函数、服务函数的输入参数、外部中断触发模式)
mode可选:
RISINGFALLINGCHANGE……
上升沿、降低沿、改变时、低电平、高电平…code

关闭中断,使用xml

detachInterrupt(uint8_t pin)

**

实例:

**

代码:

void callBack(void)
{
  int level = digitalRead(13); //读取GPIO_13上的电平
  Serial.printf("触发了中断,当前电平是: %d\n", level);
}

void setup()
{
  Serial.begin(115200);
  Serial.println();
  
  pinMode(13,OUTPUT);    //GPIO_13,输出模式
  attachInterrupt(13, callBack, CHANGE);  //当电平发生变化时,触发中断

  for (int i = 0; i < 5; i++)
  {
    delay(1000);
    digitalWrite(13, 1 ^ digitalRead(13)); //翻转 GPIO_13 电平
  }

  detachInterrupt(13); //关闭中断
}

void loop()
{
}

结果:
在这里插入图片描述
参考:
使用Arduino开发ESP32(11):IO口与相关外设说明与记录