目录
1.函数介绍
2.创建项目
3.创建线程
4.初始化GPIO
5.反转状态
6.编译代码
7.查看结果
创建线程函数
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 );
拷贝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
程序入口函数 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);
}
看到开发板的信息。发现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
}
void led_toggle(void){
uint32_t bit;
bit = GPIO_INPUT_GET(0);
GPIO_OUTPUT(GPIO_Pin_0, bit ^ 0x0000001 );
}
上传代码到虚拟机,执行命令
./gen_misc.sh 编译代码。
看到led toggle 不停的打印出来,再查看pin0脚上的led灯闪烁。测试成功。:)
代码下载地址 : https://github.com/FanShiYou/esp8266/tree/master/gpio_led