提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
前言
记录一下,对知识的整理和复习,方便你我他。。。
只是记录的外设的API函数的使用,外设知识不介绍。
提示:以下是本篇文章正文内容,下面案例可供参考
一、包含的头文件
#include "driver/gpio.h"
二、API
/*
函数: gpio_reset_pin
功能: 重置引脚
输入: gpio_num:GIPO引脚编号
返回值: 0 -> OK; other -> 异常;
*/
esp_err_t gpio_reset_pin(gpio_num_t gpio_num)
/*
函数: gpio_set_direction
功能: 设置GPIO的模式
输入: gpio_num:GIPO引脚编号; mode:模式(是个枚举值)
返回值: 0 -> OK; other -> 异常;
*/
esp_err_t gpio_set_direction(gpio_num_t gpio_num, gpio_mode_t mode)
/*
函数: gpio_config
功能: 配置GPIO
输入: pGPIOConfig:GPIO的配置信息,是个结构体指针
返回值: 0 -> OK; other -> 异常;
*/
esp_err_t gpio_config(const gpio_config_t *pGPIOConfig)
/*
函数: gpio_set_level
功能: 设置GPIO的输出
输入:gpio_num:GIPO引脚编号; level:0 -> 输出低电平;1 -> 输出高电平;
返回值: 0 -> OK; other -> 异常;
*/
esp_err_t gpio_set_level(gpio_num_t gpio_num, uint32_t level)
三、GPIO初始化
- 方法1
void Led_init(void)
{
gpio_reset_pin(LED0_GPIO);//重置引脚
gpio_set_direction(LED0_GPIO, GPIO_MODE_OUTPUT);//输出模式
//gpio_set_level(LED0_GPIO, 0);//默认让之歌引脚输出什么电平
}
- 方法2
void Led_init(void)
{
gpio_config_t GpioConfigt;
GpioConfigt.pin_bit_mask = BIT64(LED0_GPIO);//设置引脚
GpioConfigt.mode = GPIO_MODE_OUTPUT;//设置模式
GpioConfigt.pull_up_en = GPIO_PULLUP_ENABLE;//上拉使能
GpioConfigt.pull_down_en = GPIO_PULLDOWN_DISABLE;//下拉失能
GpioConfigt.intr_type = GPIO_INTR_DISABLE;//配置中断
gpio_config(&GpioConfigt);
//gpio_set_level(LED0_GPIO, 0);//默认让这个引脚输出什么电平
}
注意: 1. GpioConfigt.pin_bit_mask这个参数需要使用 BIT64() 转换一下。
2. 中断需要配置一下失能。
四、代码
4.1 main.c
#include <stdio.h>
#include "esp_log.h"
#include "freertos/FreeRTOS.h"
#include "freertos/task.h"
#include "driver/gpio.h"
#include "led.h"
void app_main(void)
{
char *tag = "main";
esp_log_level_set(tag, ESP_LOG_DEBUG); //设置日志等级
Led_init();
while(true)
{
LED0(OPEN);
ESP_LOGD(tag, "GPIO_NUM_2 输出高电平");
vTaskDelay(1000);
LED0(CLOSE);
ESP_LOGD(tag, "GPIO_NUM_2 输出低电平");
vTaskDelay(1000);
}
}
注意: 1. 设置日志等级时,工程的配置中需要修改一下 Maximum log verbosity
2. 工程的配置中需要修改一下 configTICK_RATE_HZ
4.2 led.c
#include " .h"
#include "driver/gpio.h"
// void Led_init(void)
// {
// gpio_reset_pin(LED0_GPIO);//重置引脚
// gpio_set_direction(LED0_GPIO, GPIO_MODE_OUTPUT);//输出模式
// }
void Led_init(void)
{
gpio_config_t GpioConfigt;
GpioConfigt.pin_bit_mask = BIT64(LED0_GPIO);//设置引脚
GpioConfigt.mode = GPIO_MODE_OUTPUT;//设置模式
GpioConfigt.pull_up_en = GPIO_PULLUP_ENABLE;//上拉使能
GpioConfigt.pull_down_en = GPIO_PULLDOWN_DISABLE;//下拉失能
GpioConfigt.intr_type = GPIO_INTR_DISABLE;//配置中断
gpio_config(&GpioConfigt);
gpio_set_level(LED0_GPIO, 0);
}
4.3 led.h
#ifndef __LED_H
#define __LED_H
#define OPEN 1
#define CLOSE 0
#define LED0_GPIO GPIO_NUM_2
#define LED0(status) gpio_set_level(LED0_GPIO, status)
void Led_init(void);
#endif
五、补充
之前是写stm32的所以编程风格。。。
5.1 如何添加自己写的驱动
ps:因该还有其它方法, CMakeLists.txt 文件有点像linux中的makefile。
保存路径是在main文件夹下的BSP文件中
修改main文件夹下的 CMakeLists.txt 文件