ESP32 SPI GPIO
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了ESP32 SPI GPIO相关的知识,希望对你有一定的参考价值。
参考技术A ESP32芯片具有以下Strapping pins:GPIO 0
GPIO 2
GPIO 4
GPIO 5(启动期间必须为高)
GPIO 12(启动期间必须低)
GPIO 15(启动期间必须为高)
Pins 1 and 3 are REPL UART TX and RX respectively
Pins 6, 7, 8, 11, 16, and 17 are used for connecting the embedded flash, and are not recommended for other uses
Pins 34-39 are input only, and also do not have internal pull-up resistors
The pull value of some pins can be set to Pin.PULL_HOLD to reduce power consumption during deepsleep.
ESP-C3入门2. 基于IDF的GPIO基本操作
ESP-C3入门2. 基于IDF的GPIO基本操作
一、ESP32-C3的GPIO口资源
ESP32-C3有22个物理GPIO管脚,编号从0~21。
每个管脚可用作通用IO,或连接一个内部的外设信号。
GPIO引脚特殊功能介绍:
GPIO | 模拟功能 | 注释 |
---|---|---|
GPIO0 | ADC1_CH0 | RTC |
GPIO1 | ADC1_CH1 | RTC |
GPIO2 | ADC1_CH2 | Strapping 管脚;RTC |
GPIO3 | ADC1_CH3 | RTC |
GPIO4 | ADC1_CH4 | RTC |
GPIO5 | ADC2_CH0 | RTC |
GPIO6 | ||
GPIO7 | ||
GPIO8 | Strapping 管脚 | |
GPIO9 | Strapping 管脚 | |
GPIO10 | ||
GPIO11 | ||
GPIO12 | SPI0/1 | |
GPIO13 | SPI0/1 | |
GPIO14 | SPI0/1 | |
GPIO15 | SPI0/1 | |
GPIO16 | SPI0/1 | |
GPIO17 | SPI0/1 | |
GPIO18 | USB-JTAG | |
GPIO19 | USB-JTAG | |
GPIO20 | ||
GPIO21 |
说明:
- GPIO2、8、9是Strapping管脚;它们和芯片复位状态有关,在芯片的系统复位过程中,Strapping管脚对自己电平采样并存储到锁存器,一直保持到芯片掉电或关闭。避免把这几个端口使用到其它功能上。
- GPIO12-17通常用于SPI flash和PSRAM,不推荐用作其它用途;
- GPIO18、19默认用于USB-JTAG,如果用作GPIO将无法使用USB-JTAG;
- RTC:GPIO0-5可以在Deep-sleep模式时使用。
二、重要的API
头文件位置:
components/driver/include/driver/gpio.h
1. gpio口配置函数
esp_err_t gpio_config(const gpio_config_t *pGPIOConfig)
端口可以设置以下模式:
- pull-up
- PullDown
- IntrType
- 参数: pGPIOConfig结构体
- 返回: ERP_OK或ESP_ERR_INVALID_ARG
gpio_config_t 结构体
公共成员 | 类型 | 说明 |
---|---|---|
pin_bit_mask | unit64_t | gpio引脚 |
mode | gpio_mode_t | 模式,input或oputput |
pull_up_en | gpio_pullup_t | 是否启用内部上拉电阻,前提是已配置上拉电阻 |
pull_down_en | gpio_pulldown_t | 是否启用内部下拉电阻,前提是已配置下拉电阻 |
intr_type | gpio_int_type_t | 中断类型 |
使用示例:
gpio_set_pull_mode(3, GPIO_PULLUP_ONLY);
gpio_set_pull_mode(4, GPIO_PULLUP_ONLY);
gpio_set_pull_mode(5, GPIO_PULLUP_ONLY);
gpio_config_t ioConfig =
.pin_bit_mask = (1ull<<3) || (1ull<<4) || (1ull<<5),
.mode = GPIO_MODE_OUTPUT,
.pull_up_en = 1
;
gpio_config(&ioConfig);
2. gpio口复位函数
esp_err_t gpio_reset_pin(gpio_num_t gpio_num)
- 设置为上拉、禁用输入、禁用输出
- 参数: gpio口号
- 返回: ESP_OK
3. 设置 gpio 方向
gpio_set_direction(gpio_num_tgpio_num, gpio_mode_tmode)
- GPIO_MODE_DISABLE
- GPIO_MODE_INPUT
- GPIO_MODE_OUTPUT
- GPIO_MODE_OUTPUT_OD
- GPIO_MODE_INPUT_OUTPUT_OD
- GPIO_MODE_INPUT_OUTPUT
4. GPIO输出高、低电平
gpio_set_level(gpio_num_t gpio_num, uint32_t level)
level:
- 0 低电平
- 1 高电平
5. 输入模式检测电平
gpio_get_level(gpio_num_t gpio_num)
6. 配置单个引脚内部上、下拉电阻
gpio_set_pull_mode(gpio_num_t gpio_num)
gpio_pullup_en(gpio_num_t gpio_num)
gpio_pullup_dis(gpio_num_t gpio_num)
gpio_pulldown_en(gpio_num_t gpio_num)
gpio_pulldown_dis(gpio_num_t gpio_num)
7. 配置内部上下拉电阻
esp_err_t gpio_set_pull_mode(gpio_num_t gpio_num, gpio_pull_mode_t pull)
pull值列表:
- GPIO_PULLUP_ONLY —— 仅上拉
- GPIO_PULLDOWN_ONLY —— 仅下拉
- GPIO_PULLUP_PULLDOWN —— 全部启用
- GPIO_FLOATING —— 悬空
三、 示例
1. RGB轮流显示
#include "driver/gpio.h"
#include "freertos/FreeRTOS.h"
#include "freertos/task.h"
void app_main()
gpio_reset_pin(GPIO_NUM_3);
gpio_reset_pin(GPIO_NUM_4);
gpio_reset_pin(GPIO_NUM_5);
gpio_set_direction(GPIO_NUM_3, GPIO_MODE_OUTPUT);
gpio_set_direction(GPIO_NUM_4, GPIO_MODE_OUTPUT);
gpio_set_direction(GPIO_NUM_5, GPIO_MODE_OUTPUT);
int i=0;
while(1)
printf("r=%d,g=%d,b=%d \\n", i%3==0?0:1, i%3==1?0:1,i%3==2?0:1);
//1为高电平,0为低电平
gpio_set_level(GPIO_NUM_3,i%3==0?0:1); // 红
gpio_set_level(GPIO_NUM_4,i%3==1?0:1); // 绿
gpio_set_level(GPIO_NUM_5,i%3==2?0:1); // 蓝
vTaskDelay(CONFIG_BLINK_PERIOD / portTICK_PERIOD_MS);
i++;
if(i>2)i=0;
2. 读取GPIO值示例
#include "driver/gpio.h"
#include "freertos/FreeRTOS.h"
#include "freertos/task.h"
void app_main()
gpio_reset_pin(GPIO_NUM_6);
gpio_set_direction(GPIO_NUM_6, GPIO_MODE_INPUT);
// 配置下拉,默认低电平
gpio_pulldown_en(GPIO_NUM_6);
while (1)
vTaskDelay(CONFIG_BLINK_PERIOD / portTICK_PERIOD_MS);
int s = gpio_get_level(GPIO_NUM_6);
printf("gpio6=%d \\n", s);
以上是关于ESP32 SPI GPIO的主要内容,如果未能解决你的问题,请参考以下文章
MicroPython ESP32通过sdcard模块软SPI读取SD卡实例