侧边栏壁纸
  • 累计撰写 125 篇文章
  • 累计创建 16 个标签
  • 累计收到 4 条评论

目 录CONTENT

文章目录
ESP32   

ESP32-GPIO & RTC GPIO

概述

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));
}
0

评论区