esp 32 第一天-点亮第一个灯泡

目录

电灯day1

原码


 原码

 #include 
 #include "freertos/FreeRTOS.h"
 #include "freertos/task.h"
/*driver/gpio.h:用于引入对 GPIO(通用输入输出引脚)进行操作的相关函数和数据结构的声明,以便后续配置和控制 LED 所连接的 GPIO 引脚。*/
//LED_GPIO 定义:


#include "driver/gpio.h"
//定义LED_GPIO 
#define LED_GPIO GPIO_NUM_27
void led_run_task(void* param){
int gpio_level=0;
while (1)
    {
        gpio_level=gpio_level?0:1;
        gpio_set_level(LED_GPIO,gpio_level);
        vTaskDelay(pdMS_TO_TICKS(500));

    }
}
void app_main(void)
{
gpio_config_t led_cfg={
    .pin_bit_mask=(1<

  • 电灯day1

    • 1. 定义 LED 连接的引脚

      • #define LED_GPIO GPIO_NUM_27
      • 头文件

        • #include 
          • 这是 C 语言标准输入输出头文件。它提供了基本的输入输出函数,如printf、scanf等的声明。这些函数用于格式化输出数据到控制台(如打印调试信息)或者从控制台读取用户输入的数据。
        • #include "freertos/FreeRTOS.h"
          • 这是 FreeRTOS 实时操作系统的核心头文件。它包含了 FreeRTOS 的基本数据类型定义、任务管理相关的宏和函数声明、内存管理函数声明等众多关键元素。通过这个头文件,开发者可以使用 FreeRTOS 提供的各种功能来创建和管理多任务应用程序。
        • #include "freertos/task.h"
          • 这个头文件主要侧重于 FreeRTOS 任务相关的功能。它包含了更详细的任务管理函数和数据结构的定义,如任务的状态转换函数、任务延迟函数(如vTaskDelay)等。这些函数和定义帮助开发者更好地控制和协调各个任务的执行。
        • #include "driver/gpio.h"
          • 这是用于操作 GPIO(通用输入输出)引脚的头文件。它提供了配置 GPIO 引脚的模式(如输入模式、输出模式等)、设置引脚电平(如输出高电平或低电平)、读取引脚电平以及其他相关 GPIO 操作的函数声明和数据结构定义。
        • #include "driver/ledc.h"
          • 这个头文件通常用于控制 LED 的亮度调节,它提供了与 LED 脉宽调制(Pulse - Width Modulation,PWM)相关的函数声明和数据结构定义。PWM 是一种通过调节脉冲宽度来控制输出功率(如 LED 亮度)的技术。
    • 2. 控制 LED 闪烁的任务函数(led_run_task)

      • gpio_set_level(LED_GPIO, gpio_level);

        • 这个函数就是根据 gpio_level 的值去设置 LED_GPIO(也就是我们前面说的 GPIO_NUM_27 那个引脚)的电平啦。要是 gpio_level 是 1,就给引脚输出高电平让 LED 亮;要是 gpio_level 是 0,就给引脚输出低电平让 LED 灭。
      • vTaskDelay(pdMS_TO_TICKS(500));

        • pdMS_TO_TICKS(毫秒到时钟)
          • 宏会根据当前系统的节拍频率来计算给定毫秒数对应的节拍数。例如,如果节拍频率是 1000Hz,那么pdMS_TO_TICKS(500)就会计算出 500 毫秒对应的节拍数为 500 个节拍,然后vTaskDelay函数就会使任务暂停 500 个节拍的时间。
        • vTaskDelay函数的参数要求是以 “节拍(ticks)” 为单位的时间值
          • 它的主要功能是使正在执行的任务进入阻塞状态,暂停一段时间,从而实现任务之间的时间协调和延迟操作//
    • 3. 配置引脚和创建任务的主函数(app_main)

      •  gpio_config_t 

        • .intr_type = GPIO_INTR_DISABLE
          • 是用于配置 GPIO 引脚中断类型的一个设置选项。
          • 可配置的值及含义
            • GPIO_INTR_DISABLE(禁用中断)
            • GPIO_INTR_POSEDGE(上升沿触发中断)
            • GPIO_INTR_NEGEDGE(下降沿触发中断)
            • GPIO_INTR_ANYEDGE(双边沿触发中断)
            • GPIO_INTR_LOLEVEL(低电平触发中断)
            • GPIO_INTR_HILEVEL(高电平触发中断)
        • .pin_bit_mask 

          • 设置了要配置的 GPIO 引脚的位掩码,用于指定要操作的具体引脚
        • .pull_up_en  && .pull_down_en

          • GPIO_PULLUP_DISABLE
            • 禁用该引脚的上拉电阻功能
          • GPIO_PULLUP_ENABLE(启用上拉电阻)
            • 当设置为这个值时,引脚内部的上拉电阻会被启用。这意味着在没有外部设备将引脚电平拉低的情况下,引脚会被内部上拉电阻拉高到电源电压。
        • .mode

          • 输入模式相关(用于读取外部输入的信号
            • GPIO_MODE_INPUT
            • GPIO_MODE_INPUT_FLOATING(浮空输入模式)
            • GPIO_MODE_INPUT_PULLUP(带上拉输入模式)
            • GPIO_MODE_INPUT_PULLDOWN(带下拉输入模式)
          • 输出模式相关(用于控制向外输出信号)
            • PIO_MODE_OUTPUT
            • GPIO_MODE_OUTPUT_OD(开漏输出模式)
          • 其他特殊模式(用于特殊的功能或应用场景)
            • GPIO_MODE_ANALOG(模拟模式)
            • GPIO_MODE_DISABLE(禁用模式)
      • gpio_config(&led_cfg);

        • 这个函数就是根据我们前面配置好的 led_cfg 结构体,去真正地对那个 GPIO 引脚进行配置
      • xTaskCreatePinnedToCore(pdTaskCode,pcName,usStack,pvParaments,uxPriority,pxCreatedTask,xCoreId);

        • pxTaskCode(任务函数指针)
        • pcName(任务名称)
        • usStackDepth(任务栈大小)
        • pvParameters(任务参数)
          • 它的类型是void *,可以是任何类型的数据指针,通过这个参数可以向任务函数传递一些初始信息或者配置数据。在之前的 LED 闪烁程序中,这个参数设置为NULL,表示没有向任务函数传递额外的参数。
        • uxPriority(任务优先级)
        • pxCreatedTask(任务句柄)
        • xCoreID(核心编号)
        • 返回值
          • 任务创建成功
            • 函数返回pdPASS(这是一个定义在 FreeRTOS 中的宏,表示成功)
          • 创建失败
            • 例如由于内存不足等原因,函数返回errCOULD_NOT_CREATE_TASK(也是一个 FreeRTOS 中的宏,表示任务创建失败

你可能感兴趣的:(esp学习集合,实战,单片机,嵌入式硬件)