ESP8266引脚配置
输出
PIN_FUNC_SELECT(PERIPHS_IO_MUX_MTDI_U,FUNC_GPIO12); //设置GPIO12位IO模式
GPIO_OUTPUT_SET(GPIO_ID_PIN(12), 1) //设置GPIO12为高电平
//GPIO_OUTPUT_SET(GPIO_ID_PIN(12), 0) //设置GPIO12为低电平
输入
PIN_FUNC_SELECT(PERIPHS_IO_MUX_MTDI_U,FUNC_GPIO12); //设置GPIO12位IO模式
PIN_PULLUP_EN(PERIPHS_IO_MUX_MTDI_U); //设置GPIO12为上拉模式
//PIN_PULLUP_DIS(PERIPHS_IO_MUX_MTDI_U); //设置GPIO12变为下拉模式
GPIO_DIS_OUTPUT(GPIO_ID_PIN(12)); //GPIO0输入模式 其他引脚也一样 只要将GPIO输出模式关闭就变为了输入模式
int level = GPIO_INPUT_GET(GPIO_ID_PIN(12));//获取GPIO12的电平
输入中断
PIN_FUNC_SELECT(PERIPHS_IO_MUX_MTDI_U,FUNC_GPIO12); //设置GPIO12位IO模式
GPIO_DIS_OUTPUT(GPIO_ID_PIN(12)); //GPIO0输入模式 其他引脚也一样 只要将GPIO输出模式关闭就变为了输入模式
ETS_GPIO_INTR_DISABLE(); //禁止所有的IO中断
ETS_GPIO_INTR_ATTACH(key_intr_handler,NULL); //配置中断函数 key_intr_handler为中断函数
pio_pin_intr_state_set(GPIO_ID_PIN(12),GPIO_PIN_INTR_NEGEDGE); //GPIO0下降沿触发
/***********************************
*typedef enum {
********GPIO_PIN_INTR_DISABLE = 0, 不启用
********GPIO_PIN_INTR_POSEDGE = 1, 上升沿
********GPIO_PIN_INTR_NEGEDGE = 2, 下降沿
********GPIO_PIN_INTR_ANYEDGE = 3, 上升沿/下降沿
********GPIO_PIN_INTR_LOLEVEL = 4, 低电平触发
********GPIO_PIN_INTR_HILEVEL = 5 高电平触发
} GPIO_INT_TYPE;
************************************/
ETS_GPIO_INTR_ENABLE(); //使能GPIO中断
/*-------------------------------------------------------------*/
/*函数功能:按键中断处理函数 */
/*参 数:无 */
/*返 回:无 */
/*-------------------------------------------------------------*/
void key_intr_handler(void)
{
u16 gpio_status=0;
gpio_status = GPIO_REG_READ(GPIO_STATUS_ADDRESS); //读取中断状态,哪个IO的中断,对应的中断标志会置1
GPIO_REG_WRITE(GPIO_STATUS_W1TC_ADDRESS, gpio_status);//清除中断状态,对应的位,写1就清除了
if(gpio_status&BIT(12)) //判断是不是GPIO12中断 BIT为左移12位
{
os_printf("按键中断\r\n");
}
/*
If(gpio_status==GPIO_Pin_12)
{
os_printf("按键中断\r\n");
}
*/
}
如果时双沿触发的时候可以使用下面来判断上升沿还是上升沿
if(!GPIO_INPUT_GET(GPIO_ID_PIN(12))); //判断GPIO12有没有触发为下降沿
//if(GPIO_INPUT_GET(GPIO_ID_PIN(12))) //判断GPIO12有没有触发为上升沿