一、按键对应端口为GPIO0(上拉)
二、代码
#include <stdio.h>
#include "driver/gpio.h"
#include "freertos/FreeRTOS.h"
#include "freertos/task.h"
#include "unistd.h"void app_main(void)
{int counter=0;//1.配置gpio输入(GPIO0)gpio_config_t gpio_init = {.pin_bit_mask = BIT(0), //设置gpio0.mode = GPIO_MODE_INPUT,.pull_up_en = GPIO_PULLUP_ENABLE, //使能上拉.pull_down_en = GPIO_PULLDOWN_DISABLE,.intr_type = GPIO_INTR_DISABLE};gpio_config(&gpio_init);//2.循环检测按键while(1){if(gpio_get_level(0)==0){//3.延时消抖vTaskDelay(20/portTICK_PERIOD_MS); //延时20ms消抖if (gpio_get_level(0)==0){//4.计数counter++;}//5.打印计数printf("按下了按键计数: %d\n",counter);}//6.释放CPUvTaskDelay(10/portTICK_PERIOD_MS); }}
三、第六步
系统使用FreeRTOS,系统会调度,不能一直循环。vTaskDelay可以释放任务,让系统去执行其他任务(暂时没有其他任务)。这个是必须的,而且延时必须满足大于等于一个时间片。我们默认的任务频率为100HZ,即10ms,所以我们必须延时大于等于10ms(满足至少一个时间片的阻塞)
可以在此处修改任务频率