ESP8266 PWM&GPIO

来源:互联网 发布:淘宝个人主页标签 编辑:程序博客网 时间:2024/06/05 12:01

    这是一个关于ESP8266 PWM一路输出的例子,输出引脚为GPIO2,这个管脚与UART1有冲突,可以到art_config(uint8 uart_no)这个函数里关掉PIN_FUNC_SELECT(PERIPHS_IO_MUX_GPIO2_U, FUNC_U1TXD_BK);也可以换个脚位。

#include "gpio.h"#include "pwm.h"

这是定义的全局变量

ETSTimer pwmTimer;//定时器 pwmuint32 pwm_duty_init[1]={0};//对应管脚的输出占空比uint32 pwm_info[1][3]={{PERIPHS_IO_MUX_MTDI_U,FUNC_GPIO2,2}};//设置pwm输出管脚
这是PWM输出函数,使用定时器回调的方式调用这个函数
void ICACHE_FLASH_ATTRpwm_put(void *arg)//pwm输出{static int32 duty = 0;//pwm占空比static bool fla = 0;if(fla){duty-=50;pwm_set_duty(duty,0);pwm_start();}else{duty+=50;pwm_set_duty(duty,0);pwm_start();}if(duty>=5000) fla = 1;if(duty<=0) fla = 0;}
这是ESP8266系统初始化完成后的回调函数
void ICACHE_FLASH_ATTRsys_init_cb(void)//系统初始化完成后回调函数{PIN_FUNC_SELECT(PERIPHS_IO_MUX_GPIO0_U,FUNC_GPIO0);//设置输出模式gpio_output_set(0,BIT0,BIT0,0);//gpio0输出低电平//gpio_output_set(BIT0,0,BIT0,0);//gpio0输出高电平//开启pwm功能pwm_init(1000,pwm_duty_init,1,pwm_info);os_timer_disarm(&pwmTimer);os_timer_setfn(&pwmTimer,pwm_put,NULL);os_timer_arm(&pwmTimer,50,TRUE);}
这里是主函数部分
void ICACHE_FLASH_ATTRuser_init(void){system_init_done_cb(sys_init_cb);//创建初始化完成后回调函数}
有一点要是注意,需要在APP目录下的Makefile的LINKFLAGS_eagle.app.v6 =  里添加PWM的源文件

源码下载