使用Arduino开发ESP32(十二):GPIO与中断
·
基本函数:
GPIO6 ~ 11一般不使用,因为它们接了存储程序的Flash。
pinMode(pin, mode)
引脚工作方式设置
mode可选:
INPUT
、OUTPUT
、INPUT_PULLUP
、INPUT_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可选:
RISING
、FALLING
、CHANGE
……
上升沿、下降沿、改变时、低电平、高电平…
关闭中断,使用
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()
{
}
更多推荐
已为社区贡献2条内容
所有评论(0)