esp8266控制gpio2

前提:

最近在用esp8266控制42步进电机做智能窗帘,想找个gpio输出PWM信号

问题

gpio0可以直接使用GPIO_OUTPUT_SET函数控制,但是gpio2却死活不工作

原因

gpio2本来是作为TXD1来用的,
现在想用来控制作为通用gpio
需要先选择其功能为通用gpio

解决方案

添加初始化代码

 gpio_init();
 PIN_FUNC_SELECT(PERIPHS_IO_MUX_GPIO2_U,FUNC_GPIO2);

定义在eagle_soc.h中
#define PERIPHS_IO_MUX_GPIO2_U (PERIPHS_IO_MUX + 0x38)
#define FUNC_GPIO2 0
#define FUNC_U1TXD_BK 2
#define FUNC_U0TXD_BK 4
也就是需要选定gpio2为gpio功能后,方可使用此gpio
GPIO_OUTPUT_SET(GPIO_ID_PIN(2), 1);//拉高
GPIO_OUTPUT_SET(GPIO_ID_PIN(2), 0);//拉低
需要注意,此gpio默认要拉高启动,不然系统不能正常启动。
所以,接LED的话需要接LED的负极,LED的正极接VCC

代码

user_init(){
     gpio_init();//初始化GPIO
     PIN_FUNC_SELECT(PERIPHS_IO_MUX_GPIO2_U,FUNC_GPIO2);//蓝灯
     os_timer_disarm(&blue_led_timer);
     os_timer_setfn(&blue_led_timer, (os_timer_func_t *) blue_led_timer_toggle,NULL);//定时回调函数
     os_timer_arm(&blue_led_timer, 1000, true);//设置时间为1s
}

 /**
  * LED定时反转函数,1s状态反转一次
  */
 static void ICACHE_FLASH_ATTR
 blue_led_timer_toggle(void){
     os_timer_disarm(&blue_led_timer);//取消定时器
     uint32 status = GPIO_INPUT_GET(GPIO_ID_PIN(2));//获取蓝灯管脚状态
     GPIO_OUTPUT_SET(GPIO_ID_PIN(2),!status);//取反实现蓝灯管脚电平反转,从而实现亮灭操作
     os_timer_arm(&blue_led_timer, 1000, true);//使能定时器
 }
 此code引用来自:https://www.cnblogs.com/imliubo/p/10090874.html
  • 4
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值