void drive_gpio_process(void *arg)
{
bool io_sta = false;
while (1)
{
if (drv_gpio_read(GPIO_NUM_17) == 0) // 扫描方法读IO17的状态
{
os_msdelay(50); // 延时50ms
if (drv_gpio_read(GPIO_NUM_17) == 0)
{
while (drv_gpio_read(GPIO_NUM_17) == 0);
io_sta = !io_sta;
os_printf(LM_OS, LL_INFO, "now io_sta is: %d \n", io_sta);
}
}
drv_gpio_write(GPIO_NUM_0, io_sta); // IO0输出
}
}
void drive_gpio_init(void)
{
drv_gpio_init(); // GPIO初始化
PIN_FUNC_SET(IO_MUX_GPIO17, FUNC_GPIO17_GPIO17); // 将IO设置为GPIO功能
PIN_FUNC_SET(IO_MUX_GPIO0, FUNC_GPIO0_GPIO0);
drv_gpio_ioctrl(GPIO_NUM_17, DRV_GPIO_CTRL_PULL_TYPE, DRV_GPIO_ARG_PULL_UP); // 配置IO17为上拉输入
drv_gpio_ioctrl(GPIO_NUM_0, DRV_GPIO_CTRL_SET_DIRCTION, DRV_GPIO_ARG_DIR_OUT); // 配置IO0为输出
os_task_create("gpio_process", 6, 1024, (task_entry_t)drive_gpio_process, NULL); // 创建GPIO线程
}
int main(void)
{
component_cli_init(E_UART_SELECT_BY_KCONFIG); // 串口初始化
os_printf(LM_OS, LL_INFO, "program run. \n"); // 上电打印信息
drive_gpio_init();
vTaskStartScheduler(); // 启动tsak
return 0;
}
编译烧录完成后 打印信息如下