Q: 怎样进行GPIO编程?你能举个例子吗?

ESP_Luna

Q: 怎样进行GPIO编程?你能举个例子吗?

Postby ESP_Luna » Tue Jul 28, 2015 1:03 pm

Q: 怎样进行GPIO编程?你能举个例子吗?
关于非 OS 版本和 OS 版本 GPIO 的操作有些不同。
【非 OS 版本】
设置 MTDO 为输入模式,并且配置为下降沿触发中断方式。

Code: Select all

void ICACHE_FLASH_ATTR gpio_init(void)
{
    PIN_FUNC_SELECT(PERIPHS_IO_MUX_MTDO_U,FUNC_GPIO15);                //GPIO 选择功能
    GPIO_DIS_OUTPUT(GPIO_ID_PIN(15));                                  //配置为输入模式
    ETS_GPIO_INTR_DISABLE();                                           //关闭 GPIO 中断
    ETS_GPIO_INTR_ATTACH(GPIO_INTERRUPT,NULL);                         //注册中断函数
    gpio_pin_intr_state_set(GPIO_ID_PIN(15),GPIO_PIN_INTR_NEGEDGE);    //下降沿触发
    ETS_GPIO_INTR_ENABLE() ;                                           //使能 GPIO 中断
}

【OS 版本】
设置MTDO为输入模式,并且配置为下降沿触发中断方式。
void ICACHE_FLASH_ATTR gpio_init(void)

Code: Select all

{
    GPIO_ConfigTypeDef gpio_in_cfg;                                    //定义 GPIO 初始化结构体
    gpio_in_cfg.GPIO_IntrType = GPIO_PIN_INTR_NEGEDGE;                 //下降沿触发
    gpio_in_cfg.GPIO_Mode = GPIO_Mode_Input;                           //输入模式
    gpio_in_cfg.GPIO_Pin  = GPIO_Pin_15;                               //GPIO 选择使能
    gpio_config(&gpio_in_cfg);                                         //初始化函数
    GPIO_REG_WRITE(GPIO_STATUS_W1TC_ADDRESS, BIT(GPIO_UART_IN_NUM));
    gpio_intr_handler_register(interrupt_GPIO_UART);                   //注册中断函数
    _xt_isr_unmask(1 << ETS_GPIO_INUM);                                //使能 GPIO 中断
}

【配置说明】
请参考 开发指南文档清单 中的 “0D-ESP8266__Pin_List__Release_15-11-2014.xlsx” 文档。
  • 在 Reg 页签可以查阅到 GPIO 功能选择相关的寄存器。
  • 在 Digital Die Pin List 页签中可以查到通用的 GPIO 以及复用功能,其中 FUNCTION 列就是功能的配置选项。
    如果需要配置为 FUNCTION3,应该往寄存器对应的位中写2,如果需要配置为 FUNCTION2,应该往寄存器对应的位中写 1,以此类推。
    例如:代码中 PIN_FUNC_SELECT(PERIPHS_IO_MUX_MTDO_U,FUNC_GPIO15); 这里的FUNC_GPIO15 的值为 3,根据表格中 FUNCTION4 列可知,这是将 PERIPHS_IO_MUX_MTDO_U 配置为 GPIO 功能。

Who is online

Users browsing this forum: No registered users and 126 guests