【1】WiFi——————ESP8266 SDK编程 之 GPIO输入、输出、中断模式

  1. 简述
    1. GPIO
      1. ESP8266共计17个I/O管脚,每个GPIO都可使能内部上拉/下拉(XPD_DCDC只有下拉)
      2. IO管脚是双向、非反相和三态的;
      3. 输入模式
      4. 输出模式
      5. 中断模式
        1. 上升沿触发
        2. 下降沿触发
        3. 双沿触发
        4. 低电平
        5. 高电平
      6. Flash接口
        1. 四线模式:6个IO口用于Flash通讯
        2. 两线模式:4个IO口用于Flash通讯
  2. 例程
    1. 输出模式
      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
      
      	}
      }

       

    2. 输入模式
      #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();		//喂狗 ;防止复位
      	}
      }
      

       

    3. 中断模式
      // 宏定义
      //==================================================================================
      #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();									//开中断
      
      }
      

       

  3. 总结:
  4. 文档资料:
    1. ESP8266 Non-OS SDK API参考
    2. ESP8266 技术参考手册
  5. 工具篇:
    1. 编译器:安信可一体化开发环境(Eclipse),需要安装JAVA环境
    2. 烧录工具:flash_download_tools_v3.6.6.zip
    3. http://wiki.ai-thinker.com/tools
  6. 固件
    1. AT指令:通过串口发送AT指令(串口数据)到ESP8266
    2. SDK编程:8266内部集成了32bit的处理器,通过SDK编程实现所需功能
      1. 分类:带RTOS的SDK和不带RTOS的SDK
    3. SDK版本:ESP8266_NONOS_SDK 2.2.0
  7. 硬件平台
    1. 技新 物联网开发板_ESP8266_V1.0
    2. 安信可 ESP8266模块:ESP12F
      1. 电源:3.3V
      2. 晶振:26Mhz
      3. 外部Flash:4MB = = 32Mbit
      4. 4MB Flash => 0x000 000 ~ 0x3FF FFF
      5. 扇区编号:0x000~0x3FF【Flash扇区 == 4KB】
      6. 外部射频电路:PCB板载天线
  8. 参考资料:
    1. 技新资料:https://www.jixin.pro/bbs/topic/6498
    2. 乐鑫官网:https://www.espressif.com/zh-hans/support/documents/technical-documents?keys=&field_type_tid%5B%5D=14
    3. 安信可官网:www.ai-thinker.com
    4. ESP12F资料:http://wiki.ai-thinker.com/esp8266
  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值