SDK版本:ESP8266_RTOS_SDK-2.0.0
开发平台:AiThinker_IDE(安信可基于eclipse订制版)
前言不必多说了
先来说说相关配置,不配置好,连相应的API都无法调用,谈何应用。
pwm应用的API放在根目录的include文件夹下,若想在app文件夹里调用,需要先配置好app目录下的Makefile。
修改如下:在后面添加一个:lpwm,就可以使用pwm.h里的API了
LINKFLAGS_eagle.app.v6 = \
-L$(SDK_PATH)/lib \
-Wl,--gc-sections \
-nostdlib \
-T$(LD_FILE) \
-Wl,--no-check-sections \
-u call_user_start \
-Wl,-static \
-Wl,--start-group \
-lcirom \
-lgcc \
-lhal \
-lcrypto \
-lfreertos \
-llwip \
-lmain \
-lnet80211 \
-lphy \
-lpp \
-lmbedtls \
-lopenssl \
-lmqtt \
-lwpa \
-lpwm \
$(DEP_LIBS_eagle.app.v6)\
-Wl,--end-group
然后现在来看看怎么用吧。
先初始化,esp8266的pwm初始化是所有的pwm通道一起配置的,频率只能一样
void pwm_init(uint32 period, uint32 *duty, uint32 pwm_channel_num, uint32(*pin_info_list)[3]);
period:输出频率
*duty:输出占空比,需要定义一个一维数组来统一配置多路pwm的初始占空比,最小为频率的一份,如果period=1000,即 1kHz,duty=10,则占空比为1%
pwm_channel_num :需要的输出pwm的通道数
(*pin_info_list)[3] :配置每个通道IO口的复用功能,
来举个栗子:
uint32 pwm_duty[3]= {10,10,10};
uint32 io_info[3][3]={
{PERIPHS_IO_MUX_MTDI_U,FUNC_GPIO12,12},
{PERIPHS_IO_MUX_MTCK_U,FUNC_GPIO13,13},
{PERIPHS_IO_MUX_MTDO_U,FUNC_GPIO15,15}
};
pwm_init(1000,pwm_duty,3,io_info);
pwm_start();
一定要调用pwm_start();,执行pwm_start();之后就可以输出pwm脉冲了。
中途修改占空比:
void pwm_set_duty(uint32 duty, uint8 channel);
duty:占空比
channel:通道
注意,每次修改都需要调用pwm_start();才会生效
其他的API就不多讲了,
PWM应用就到此结束