ESP8266-NON_OS的SDK下PWM调试

近期,在调试ESP8266的PWM过程中,遇到了一个耗时很久的问题。在此,记录下来进行分享。

//初始化 PWM,包括 GPIO 选择,周期和占空比。目前仅支持调用一次。
void pwm_init(uint32 period, uint32 *duty,uint32 pwm_channel_num,uint32 (*pin_info_list)[3]);

uint32 period:PWM周期
uint8 *duty:各路PWM的占空比
uint32 pwm_channel_num:PWM通道数
uint32 (*pin_info_list)[3]:PWM各通道的GPIO的硬件参数。本参数是一个N*3的数组指针,数组中定义了GPIO得寄存器,对应PIN脚
的IO复用值和GPIO对应的序号。

在开始不知道的情况下,以为period单位为ms。导致在PWM功能调试下, LED并没有出现相应的变化,而且还导致了程序不断的重启情况。

在看到pwm_set_duty(uint32 duty,uint8 channel)函数解释中举例。原话是:duty的范围随PWM周期变化,最大值为:Period*1000/45。例如1KHZ PWM,duty的范围为0~22222。那么Period*1000/45=22222时,duty占空比此时是最大。算出PWM的周期Period约是1000。再之前说这是1KHZ的PWM,那么它的周期就是1ms。这下就明白了,period的默认单位应该是us。当我设置一个周期为1S的PWM时,就应该初始化为pwm_init(1000000,,)即可成功。

你可能感兴趣的:(ESP8266)