本例程基于ESP8266 NONOS 2.0 的PWM呼吸灯
LED为IO4引脚
程序如下:
#include "user_config.h" // 用户配置
#include "driver/uart.h" // 串口
#include "c_types.h" // 变量类型
#include "eagle_soc.h" // GPIO函数、宏定义
#include "ets_sys.h" // 回调函数
#include "os_type.h" // os_XXX
#include "osapi.h" // os_XXX、软件定时器
#include "pwm.h" // PWM控制需要的文件
#include "user_interface.h" // 系统接口、system_param_xxx接口、WIFI、RateContro
os_timer_t timer;
uint8 type,x,y,z;
uint32 duty=0;
void ICACHE_FLASH_ATTR display(void *arg)
{
for(y=0;y<3;y++)
{
for(z=0;z<12;z++)
{
duty=z*2000;
type=y;
pwm_set_duty(duty,type);//设置 PWM 某个通道信号的占空比, duty 占空比的值, type当前要设置的 PWM 通道
pwm_start();//设置完成后,需要调用 pwm_start,PWM 开始
}
}
}
main()
{
uint32 pwm_duty_init[1]={0};
uint32 io_info[][3]={{PERIPHS_IO_MUX_GPIO4_U,FUNC_GPIO4,4}};
pwm_init(1000,pwm_duty_init,1,io_info);//初始化 PWM,1000周期,pwm_duty_init占空比,1通道数,io_info各通道的 GPIO 硬件参数
for(x=0;x<3;x++)
{
type=x;
pwm_set_duty(duty,type);//设置 PWM 某个通道信号的占空比, duty 占空比的值, type当前要设置的 PWM 通道
pwm_start();//设置完成后,需要调用 pwm_start,PWM 开始
}
os_timer_disarm(&timer);
os_timer_setfn(&timer,display,NULL);
os_timer_arm(&timer,100,1);
}