一、按键对应端口为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.释放CPU
vTaskDelay(10/portTICK_PERIOD_MS);
}
}
三、第六步
系统使用FreeRTOS,系统会调度,不能一直循环。vTaskDelay可以释放任务,让系统去执行其他任务(暂时没有其他任务)。这个是必须的,而且延时必须满足大于等于一个时间片。我们默认的任务频率为100HZ,即10ms,所以我们必须延时大于等于10ms(满足至少一个时间片的阻塞)
可以在此处修改任务频率