点亮一个LED灯,因为是功能性代码,所以此文件放在项目文件夹下的Components
>user_code
注意自定义目录要在其目录下新建一个component.mk
的空文件,并在其目录下新建include
用于存放头文件
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "freertos/FreeRTOS.h"
#include "freertos/task.h"
#include "driver/gpio.h"
#include "user_gpio.h"
#include "esp_system.h"
#include "esp_event_loop.h"
#include "esp_log.h"
#include "esp_err.h"
#include "esp8266/gpio_register.h"
#include "esp8266/pin_mux_register.h"
#include "driver/pwm.h"
uint32_t duties = 1000; //PWM占空比,一个周期内的通电时长
const uint32_t pin_num[1] = {5}; //指定PWM的输出IO口通道,
int16_t phase[1] = {0}; //当多个PWM通道时的相位
//点亮一个LED灯
void user_gpio_init(int GPIO_OUTPUT_IO, int IO_level)
{
#if 1
gpio_config_t io_conf ;
io_conf.pin_bit_mask =((1ULL<<GPIO_OUTPUT_IO) | (1ULL<<GPIO_OUTPUT_IO)),
io_conf.intr_type =GPIO_INTR_DISABLE; //进制中断
io_conf.mode = GPIO_MODE_OUTPUT; //输出模式
io_conf.pull_down_en=0; //禁止下拉
io_conf.pull_up_en =0; //禁止上拉
gpio_config(&io_conf); //配置使能
#else
//gpio_pad_select_gpio(GPIO_OUTPUT_IO);//选择一个GPIO 在新的RTOS版本里已没有这个函数
gpio_set_direction(GPIO_OUTPUT_IO, GPIO_MODE_OUTPUT);//把这个GPIO作为输出
#endif
gpio_set_level(GPIO_OUTPUT_IO, IO_level);//把这个GPIO输出低电平
}
//这上代码用在后面的WIFI测试
void ATaskLED(void *pvParameters)
{
// TickType_t lasttick = xTaskGetTickCount();
gpio_set_direction(GPIO_NUM_5, GPIO_MODE_OUTPUT);//把这个GPIO作为输出
gpio_set_level(GPIO_NUM_5, 0);//把这个GPIO输出低电平
os_printf("----LED_open----\n");
vTaskDelay(1000);
gpio_set_level(GPIO_NUM_5, 1);//把这个GPIO输出高电平
os_printf("----LED_close----\n");
vTaskDelete(NULL);
}
//pwm设置与其示例
void TaskGpio(void *p)
{
pwm_init(1000, &duties, 1, pin_num);
pwm_set_phases(phase);////设置相位:具体有什么用? 访问了解 https://blog.csdn.net/xh870189248/article/details/88526251#PWM_143
pwm_set_channel_invert(1ULL<< 0);//设置反相低电平有效
pwm_start();
while (1) {
for (size_t i = 0; i < duties; i++)
{
pwm_set_duty(0, i); //设置PWM亮度
pwm_start(); //使修改占空比生效,需要再次开启
vTaskDelay(10 / portTICK_RATE_MS);
}
//设置反
for (size_t i = duties; i > 0; i--)
{
pwm_set_duty(0, i); //设置PWM亮度
pwm_start(); //使修改占空比生效,需要再次开启
vTaskDelay(10 / portTICK_RATE_MS);
}
}
vTaskDelete(NULL);
}
头文件
#ifndef _USER_GPIO_H_
#define _USER_GPIO_H_
void user_gpio_init(int GPIO_OUTPUT_IO, int IO_level);
void ATaskLED(void *pvParameters);
void TaskGpio(void *p);
#endif
主函数内直接调用 xTaskCreate(TaskGpio,"TaskGpio",4*1024,NULL,5,NULL);