- 简述
- GPIO
- ESP8266共计17个I/O管脚,每个GPIO都可使能内部上拉/下拉(XPD_DCDC只有下拉)
- IO管脚是双向、非反相和三态的;
- 输入模式
- 输出模式
- 中断模式
- 上升沿触发
- 下降沿触发
- 双沿触发
- 低电平
- 高电平
- Flash接口
- 四线模式:6个IO口用于Flash通讯
- 两线模式:4个IO口用于Flash通讯
- GPIO
- 例程
- 输出模式
void ICACHE_FLASH_ATTR user_init(void) { u8 F_Led = 0; //Led状态标志位 uart_init(115200,115200); //设置串口1,串口2波特率为115200 os_printf("\r\n--------------------------------------------\r\n"); os_printf("SPT SDK Project: %s \r\n", ProjectName); //打印项目名称 os_printf("SPT SDK version: %s \r\n", system_get_sdk_version()); //打印版本信息 os_printf("\r\n--------------------------------------------\r\n"); uart0_sendStr("\r\n Hello World !!! \r\n"); /*gpio */ PIN_FUNC_SELECT(PERIPHS_IO_MUX_GPIO4_U,FUNC_GPIO4); //管脚功能选择 GPIO_OUTPUT_SET(GPIO_ID_PIN(4), 1); //输出高电平 while(1) { system_soft_wdt_feed(); //喂狗 ;防止复位 F_Led = ! F_Led; //标志位翻转 GPIO_OUTPUT_SET(GPIO_ID_PIN(4), F_Led); //输出端口引脚状态翻转 os_delay_ms(500); //延时500ms } }
- 输入模式
#define KeyBoot GPIO_INPUT_GET(GPIO_ID_PIN(0)) //按键0宏定义 void ICACHE_FLASH_ATTR user_init(void) { u8 F_Led = 1; //Led状态标志位 u8 KeyFlag = 0; //按键 单次有效 uart_init(115200,115200); //设置串口1,串口2波特率为115200 os_printf("\r\n--------------------------------------------\r\n"); os_printf("SPT SDK Project: %s \r\n", ProjectName); //打印项目名称 os_printf("SPT SDK version: %s \r\n", system_get_sdk_version()); //打印版本信息 os_printf("\r\n--------------------------------------------\r\n"); uart0_sendStr("\r\n Hello World !!! \r\n"); //初始化LED PIN_FUNC_SELECT(PERIPHS_IO_MUX_GPIO4_U, FUNC_GPIO4); //管脚功能选择 GPIO_OUTPUT_SET(GPIO_ID_PIN(4), 1); //输出高电平 //初始化按键 PIN_FUNC_SELECT(PERIPHS_IO_MUX_GPIO0_U, FUNC_GPIO0); //管脚功能设为IO口 GPIO_DIS_OUTPUT(GPIO_ID_PIN(0)); //禁止输出(默认) PIN_PULLUP_DIS(PERIPHS_IO_MUX_GPIO0_U); //禁止内部上拉(默认,硬件已经外接上拉) while(1) { if((KeyBoot == 0) && (KeyFlag == 1)) //按键 单次有效 { KeyFlag = 0; os_delay_ms(20); if(KeyBoot == 0) { F_Led = ! F_Led; //输出标志位翻转 GPIO_OUTPUT_SET(GPIO_ID_PIN(4), F_Led); //输出端口引脚状态翻转 } } if(KeyBoot == 1) KeyFlag = 1; system_soft_wdt_feed(); //喂狗 ;防止复位 } }
- 中断模式
// 宏定义 //================================================================================== #define ProjectName "GPIO_EXTI" // 工程名宏定义 #define KeyBoot GPIO_INPUT_GET(GPIO_ID_PIN(0)) //按键0宏定义 //================================================================================== // 全局变量 //================================================================================== u8 F_Led = 1; //Led状态标志位 u8 KeyFlag = 0; //按键 单次有效 //================================================================================== //延时函数 void ICACHE_FLASH_ATTR os_delay_ms(u32 Count) { for(; Count>0; Count--) os_delay_us(1000); } //注册KeyBoot按键中断函数 void KeyBoot_Interrupt(void) { uint32 gpio_status; u32 KeyBoot_Status; gpio_status = GPIO_REG_READ(GPIO_STATUS_ADDRESS); //读取所有GPIO状态 //clear interrupt status GPIO_REG_WRITE(GPIO_STATUS_W1TC_ADDRESS, gpio_status); //清除中断标志位 KeyBoot_Status = gpio_status & (0x01 << 0); //读取GPIO_0中断状态 if(KeyBoot == 0) { F_Led = ! F_Led; //输出标志位翻转 GPIO_OUTPUT_SET(GPIO_ID_PIN(4), F_Led); //输出端口引脚状态翻转 } } /****************************************************************************** * FunctionName : user_init * Description : entry of user application, init user function here * Parameters : none * Returns : none *******************************************************************************/ void ICACHE_FLASH_ATTR user_init(void) { uart_init(115200,115200); //设置串口1,串口2波特率为115200 os_printf("\r\n--------------------------------------------\r\n"); os_printf("\r\nSPT SDK Project: %s \r\n", ProjectName); //打印项目名称 os_printf("\r\nSPT SDK version: %s \r\n", system_get_sdk_version()); //打印版本信息 os_printf("\r\n--------------------------------------------\r\n"); uart0_sendStr("\r\n Hello World !!! \r\n"); //初始化LED PIN_FUNC_SELECT(PERIPHS_IO_MUX_GPIO4_U, FUNC_GPIO4); //管脚功能选择 GPIO_OUTPUT_SET(GPIO_ID_PIN(4), 1); //输出高电平 //初始化按键 PIN_FUNC_SELECT(PERIPHS_IO_MUX_GPIO0_U, FUNC_GPIO0); //管脚功能设为IO口 GPIO_DIS_OUTPUT(GPIO_ID_PIN(0)); //禁止输出(默认) PIN_PULLUP_DIS(PERIPHS_IO_MUX_GPIO0_U); //禁止内部上拉(默认,硬件已经外接上拉) //按键中断设置 ETS_GPIO_INTR_DISABLE(); //关中断 ETS_GPIO_INTR_ATTACH((ets_isr_t)KeyBoot_Interrupt, NULL); //注册中断函数 gpio_pin_intr_state_set(GPIO_ID_PIN(0), GPIO_PIN_INTR_NEGEDGE); //管脚0设置为下降沿触发 ETS_GPIO_INTR_ENABLE(); //开中断 }
- 输出模式
- 总结:
- 无
- 文档资料:
- ESP8266 Non-OS SDK API参考
- ESP8266 技术参考手册
- 工具篇:
- 编译器:安信可一体化开发环境(Eclipse),需要安装JAVA环境
- 烧录工具:flash_download_tools_v3.6.6.zip
- http://wiki.ai-thinker.com/tools
- 固件
- AT指令:通过串口发送AT指令(串口数据)到ESP8266
- SDK编程:8266内部集成了32bit的处理器,通过SDK编程实现所需功能
- 分类:带RTOS的SDK和不带RTOS的SDK
- SDK版本:ESP8266_NONOS_SDK 2.2.0
- 硬件平台
- 技新 物联网开发板_ESP8266_V1.0
- 安信可 ESP8266模块:ESP12F
- 电源:3.3V
- 晶振:26Mhz
- 外部Flash:4MB = = 32Mbit
- 4MB Flash => 0x000 000 ~ 0x3FF FFF
- 扇区编号:0x000~0x3FF【Flash扇区 == 4KB】
- 外部射频电路:PCB板载天线
- 参考资料:
【1】WiFi——————ESP8266 SDK编程 之 GPIO输入、输出、中断模式
最新推荐文章于 2023-07-13 22:21:33 发布