概述
ESP32芯片具有34个物理GPIO焊盘。某些GPIO焊盘无法使用或芯片封装上没有相应的引脚(请参阅技术参考手册)。每个焊盘都可以用作通用I / O或可以连接到内部外围信号。但需要注意两点:
- GPIO6-11通常用于SPI闪存。
- GPIO34-39只能设置为输入模式,没有软件上拉或下拉功能。
还提供了单独的 RTC GPIO(共18个引脚)支持,这些GPIO连接到“ RTC”低功耗和模拟子系统,当芯片处于深度睡眠状态,需要运行超低功耗协处理器或使用ADC / DAC /等模拟功能时,这些GPIO便起作用。
arduino层编程
主要的输入输出以及中断配置原则上与arduino兼容。
void pinMode(uint8_t pin, uint8_t mode); // 引脚模式设置
void digitalWrite(uint8_t pin, uint8_t val); // 引脚输出状态写操作
int digitalRead(uint8_t pin); // 引脚状态读取
void attachInterrupt(uint8_t pin, void (*)(void), int mode); // 设置中断
void attachInterruptArg(uint8_t pin, void (*)(void*), void * arg, int mode);
void detachInterrupt(uint8_t pin); // 停止中断功能
val值:
#define LOW 0x0 // 低电平
#define HIGH 0x1 // 高电平
GPIO模式(Mode)
//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 ANALOG 0xC0 // 模拟输出
中断模式:
//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
例子
// IO18 输出
// IO19 下拉输入模式 电平改变触发中断
// 使用导线连接 IO18 和 IO19
uint8_t out= 18;
uint8_t in = 19;
void callBack(void)
{
int lv = digitalRead(in); //读取加载到out上的电平
Serial.printf("触发了中断,当前电平是: %d\n", lv);
}
void setup()
{
Serial.begin(9600);
Serial.println();
pinMode(out, OUTPUT);
digitalWrite(out, LOW);
pinMode(in, INPUT_PULLDOWN);
attachInterrupt(in, callBack, CHANGE); //使能中断,指定中断函数
for (int i = 0; i < 5; i++)
{
delay(1000);
digitalWrite(out, 1 ^ digitalRead(out)); //翻转输出电平
}
detachInterrupt(in); //失能中断
}
void loop()
{
delay(1000);
digitalWrite(out, 1 ^ digitalRead(out));
}
评论区