ESP32 SDK 开发(三)——点亮LED

上一章我们搭建好了开发环境,并且用串口输出了hello world, 接下来我们先点灯

参考资料: 官方入门教程: https://docs.espressif.com/projects/esp-idf/zh_CN/latest/esp32/get-started/index.html#get-started-start-project
在这里插入图片描述

一 移植示例工程

1. 移植generic_gpio工程

将esp-idf\examples\peripherals\gpio文件夹下的generic_gpio文件夹复制到某一个路径下(不能有空格),我的在 F:\duke_work\ESP_IDF下, 下面是我的文件夹结构:
在这里插入图片描述

2. 设置目标芯片

打开一个新项目后,应首先设置“目标”芯片 idf.py set-target esp32。注意,此操作将清除并初始化项目之前的编译和配置(如有)。 您也可以直接将“目标”配置为环境变量(此时可跳过该步骤)。更多信息,请见 选择目标芯片。CMD下面输入:

F:\duke_work\ESP_IDF\esp-idf\tools\idf.py  set-target esp32

idf.py的路径在esp-idf\tools下, 请将你的路径替换掉
在这里插入图片描述在这里插入图片描述

3. 编译工程

编译命令:

F:\duke_work\ESP_IDF\esp-idf\tools\idf.py  build 

同理: 将idf.py的路径替换为你的, 漫长的编译过程。
在这里插入图片描述

4. 烧录固件

F:\duke_work\ESP_IDF\esp-idf\tools\idf.py  -p COM9 flash  

请将idf的路径替换掉, 还有串口号(COM9)也替换掉
烧录成功!!!
在这里插入图片描述

二. 修改GPIO管脚

我的硬件是esp32-wroom-32
在这里插入图片描述
根据原理图可知,可编程GPIO为GPIO2, 并且为高电平触发
在这里插入图片描述
代码参考:gpio_example_main.c

/* GPIO Example

   This example code is in the Public Domain (or CC0 licensed, at your option.)

   Unless required by applicable law or agreed to in writing, this
   software is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR
   CONDITIONS OF ANY KIND, either express or implied.
*/
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include "freertos/FreeRTOS.h"
#include "freertos/task.h"
#include "freertos/queue.h"
#include "driver/gpio.h"

/**
 * Brief:
 * This test code shows how to configure gpio and how to use gpio interrupt.
 *
 * GPIO status:
 * GPIO18: output
 * GPIO19: output
 * GPIO4:  input, pulled up, interrupt from rising edge and falling edge
 * GPIO5:  input, pulled up, interrupt from rising edge.
 *
 * Test:
 * Connect GPIO18 with GPIO4
 * Connect GPIO19 with GPIO5
 * Generate pulses on GPIO18/19, that triggers interrupt on GPIO4/5
 *
 */

#define GPIO_OUTPUT_IO_0    2
#define GPIO_OUTPUT_IO_1    19
#define GPIO_OUTPUT_PIN_SEL GPIO_SEL_2

static xQueueHandle gpio_evt_queue = NULL;

static void gpio_task_example(void* arg)
{
    uint32_t io_num;
    for(;;) {
        printf("turn off led0!\r\n");
        gpio_set_level(GPIO_OUTPUT_IO_0, 0);
        vTaskDelay(1000 / portTICK_RATE_MS);
        printf("turn on led0!\r\n");
        gpio_set_level(GPIO_OUTPUT_IO_0, 1);
        vTaskDelay(1000 / portTICK_RATE_MS);
    }
}

void app_main(void)
{
    gpio_config_t io_conf;
    //disable interrupt
    io_conf.intr_type = GPIO_INTR_DISABLE;
    //set as output mode
    io_conf.mode = GPIO_MODE_OUTPUT;
    //bit mask of the pins that you want to set,e.g.GPIO18/19
    io_conf.pin_bit_mask = GPIO_OUTPUT_PIN_SEL;
    //disable pull-down mode
    io_conf.pull_down_en = 0;
    //disable pull-up mode
    io_conf.pull_up_en = 0;
    //configure GPIO with the given settings
    gpio_config(&io_conf);

    //start gpio task
    xTaskCreate(gpio_task_example, "gpio_task_example", 2048, NULL, 10, NULL);

    printf("Minimum free heap size: %d bytes\n", esp_get_minimum_free_heap_size());

    int cnt = 0;
    while(1) {
        printf("cnt: %d\n", cnt++);
        vTaskDelay(1000 / portTICK_RATE_MS);
    }
}

关键api解读:(对应官方资料的章节)
在这里插入图片描述

  • esp_err_tgpio_config(constgpio_config_t *pGPIOConfig)
    在这里插入图片描述
    该函数配置GPIO的一些属性:是否使能中断,输入输出模式,上下拉
    这里需要注意的是pin_bit_mask参数, 这个参数表示哪个管脚被选中使用
  • esp_err_tgpio_set_level(gpio_num_tgpio_num, uint32_t level)
    在这里插入图片描述
    参数写的很清楚了。
    代码中涉及的其他函数都为freeRTOS相关的, 这部分需要这方面的基础, 在这不做过多的讲解。
    烧入完程序后可以看到GPIO2会亮灭。
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

零涂

你的鼓励是我创作最大的动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值