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

基本函数:

GPIO6 ~ 11一般不使用,因为它们接了存储程序的Flash。

pinMode(pin, mode)

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

digitalWrite(pin, value)

设置某引脚高低电平

digitalRead(pin)

读取某引脚电平值

注:

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

**

外部中断:

**
打开中断,使用

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

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

关闭中断,使用

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口与相关外设说明与记录

  • 8
    点赞
  • 37
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
ESP32支持硬件中断GPIO中断。 硬件中断: 硬件中断是由特定的硬件事件触发的,如定时器、串口接收中断等。在ESP32中,硬件中断可以管理许多不同的硬件资源,例如定时器、GPIO、RTC等。ESP32的硬件中断可以使用Arduino的attachInterrupt()函数进行设置。 GPIO中断GPIO中断是由GPIO引脚状态的改变触发的,例如输入信号从低电平变为高电平或从高电平变为低电平。ESP32中的GPIO引脚可以通过pinMode()函数配置为输入和输出模式,当GPIO引脚的输入状态发生改变时,ESP32可以通过gpio_intr_enable()函数启用GPIO中断。在中断响应函数中,可以使用gpio_get_level()函数读取GPIO引脚的当前输入状态。 下面是一个示例代码,演示如何在ESP32使用GPIO中断: ``` #define BUTTON_PIN 0 // GPIO0 void IRAM_ATTR handleInterrupt(){ // Interrupt service routine // Toggle the LED digitalWrite(LED_BUILTIN, !digitalRead(LED_BUILTIN)); } void setup() { pinMode(BUTTON_PIN, INPUT_PULLUP); pinMode(LED_BUILTIN, OUTPUT); attachInterrupt(BUTTON_PIN, handleInterrupt, FALLING); } void loop() { // Do nothing } ``` 在上面的示例代码中,我们使用GPIO0作为输入引脚,通过INPUT_PULLUP配置它为输入模式,并在FALLING边沿触发GPIO中断。当GPIO引脚状态发生变化时,handleInterrupt()函数将被调用,在其中我们可以执行一些操作,例如切换LED的状态。在setup()函数中,我们使用attachInterrupt()函数将GPIO0的中断处理函数注册到GPIO中断,以便当引脚状态改变时能够调用它。在loop()函数中,我们什么也不做。
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值