Nodemcu freertos 学习之路 -- LED闪烁灯

目录

1.函数介绍

2.创建项目

3.创建线程

4.初始化GPIO

5.反转状态

6.编译代码

7.查看结果

 

1.函数介绍

创建线程函数

xTaskCreate( pvTaskCode, pcName, usStackDepth, pvParameters, uxPriority, pxCreatedTask )

pvTaskCode 函数名句柄

pcName 函名称

usStackDepth 分配的堆战空间大小 256

pvParameters 线程参数 没有参数传null

uxPriority 优先级 越大优先级越高

pxCreatedTask 线程句柄

删除线程函数

线程结束时需要设用这个删除创建的线程

vTaskDelete(xTaskHandle xTaskToDelete)

xTaskToDelete 线程句柄

配置gpio信息

用与配置gpio为入输还是输出等

gpio_config(GPIO_ConfigTypeDef *pGPIOConfig)

获取gpio口状态 参数为gpio序号(从0开始)

GPIO_INPUT_GET(0);

设置gpio口的状态 参数为gpio号,状态
GPIO_OUTPUT(GPIO_Pin_0, bit ^ 0x0000001 );

2.创建项目

拷贝SDK中的project_template项目重命名为led_demo,项目中用到了gpio接口,需要引用driver_lib下面的gpio代码. 

copy SDK/examples/driver_lib/driver/gpio.c  led_demo/user/gpio.c

copy SDK/examples/driver_lib/include/gpio.h led_demo/include/gpio.h

3.创建线程

程序入口函数 user_init

void user_init(void)
{
    printf("SDK version:%s\n", system_get_sdk_version());
    创建线程函数
    xTaskCreate(led_toggle_task, "led_toggle_task", 256, NULL,1, NULL);
}

//线程代码

void led_toggle_task(void  *pvParameters)
{
    led_init();
    for(; ; ){   //死循环

led_toggle();
    printf("led toggle \n");
    vTaskDelay(100);
    }

    线程完成后必需要删除线程。不然会出错。
    vTaskDelete(NULL);
}

4.初始化GPIO

Nodemcu freertos 学习之路 -- LED闪烁灯_第1张图片

看到开发板的信息。发现gpio 0 对应的是d3,上拉时点亮led灯,下接熄灭led.接led 正级到d3负级到GND端.

void led_init(void){
GPIO_ConfigTypeDef gpio_in_cfg;    //Define GPIO Init Structure
gpio_in_cfg.GPIO_IntrType = GPIO_PIN_INTR_NEGEDGE;    //
gpio_in_cfg.GPIO_Mode = GPIO_Mode_Output;   //设置gpio口为输出端口 /
gpio_in_cfg.GPIO_Pullup = GPIO_PullUp_EN; //设置gpio口上拉有效
gpio_in_cfg.GPIO_Pin = GPIO_Pin_0;    // Enable GPIO IO口
gpio_config(&gpio_in_cfg);    //Initialization function
}

5.反转状态

void led_toggle(void){
uint32_t bit;
bit = GPIO_INPUT_GET(0);
GPIO_OUTPUT(GPIO_Pin_0, bit ^ 0x0000001 ); 
}

6.编译代码

上传代码到虚拟机,执行命令

./gen_misc.sh 编译代码。

7.查看结果

    Nodemcu freertos 学习之路 -- LED闪烁灯_第2张图片

看到led toggle 不停的打印出来,再查看pin0脚上的led灯闪烁。测试成功。:)

 

代码下载地址 : https://github.com/FanShiYou/esp8266/tree/master/gpio_led

你可能感兴趣的:(esp8266)